В стандартный дистрибудив Strawberry входят несколько хаков и много плагинов. Так или иначе они расширяют возможности скрипта, придают гибкость и много чего ещё хорошего.
Все плагины хранятся в папке plugins/. Плагины требуют инсталяции, которая крайне проста: нужно закинуть фаил в папку с плагинами, а потом в админки включить плагин. Если понадобится, плагин можно и отключить, как понимаете. Если плагин является многоязыковым, то к нему прилогается фаил с расширением ini (сам плагин имеет расширение php), этот фаил нужно закинуть в папку inc/lang/ваш_язык/plugins/.
Дополнения обычно храняться в директории со скриптом (rss.php, show_users.php - это дополнения). Некоторые (show_search.php, например) нужно подключать
include rootpath.'/show_search.php';
Другие (print.php) в этом не нуждаются, т.к. именно через них идёт вывод.
Если вместе с аддоном идёт фаил с расширением ini, то его нужно закинуть в папку inc/lang/ваш_язык/addons/.
Как вы наверное заметили, дополнения имеющие префикс show_ рассчитаны на подключение: show_search.php, show_users.php.
Дополнение позволяет выводить новости в формате RSS 2.0 для обработки их какой-нибудь читалкой. Часть дополнения это шаблон RSS, кторый лежит в папке с шаблонами и может быть изменён на ваше усмотрение.
Справедливости ради, нужно сказать, что RSS работает почти для всего: новости, категории, пользователи и т.д. Очень удобно.
Нехитрый аддон выдающий новость в формате пригодном для печати. Часть дополнения - шаблон Print.
Позволяет одним постом убить двух зайцев. Система такая: сайт А написал заметку про зайцев, предположим, вы страстный фанат этих ушастых животных и тоже пишите заметку опровергающюю доводы сайта А. В форму для трэкбэков вы пихаете TrackBack URI заметки про зайцев сайта А и таким образом комментируете эту заметку, но ещё и пишите что-то у себя. Более подробное описание ищите в Яндексе.
Частью дополнения является плагин TrackBack, который позволяет модерировать присланные трэкбэки и слать свои.
С помощью этого дополнения пользователи смогут транслировать ваши заголовки (или полные новости, см. ниже) у себя на сайте через обычную явускрипт:
<script language="javascript" src="http://example.com/path/to/remote_headlines.php"></script>
Более подробное описание вы найдёте в самом файле remote_headlines.php, открыть его можно любым текстовым редактором.
Частью дополнения является шаблон remote_headlines, в нём можно настроить вывод: давать только заголовки, давать категории и т.д.
Это движок поиска, не форма! Форму вы найдёте открыв сам фаил в текстовом редакторе. Часть дополнения - шаблон Search.
Показывает список пользователей системы. Внешний вид и всякое такое :) можно настроить через шаблон Users.
Это XML-RPC гейт, дополнение позволяет добавлять/редактировать/удалять новости через десктоп-программу w.bloggar. Описание настройки с картинками вы найдёте тут.
Плагин Keywords расширяет классификацию. Помимо категорий посту можно присваивать кейворды. Добавлять кейворды можно в окне добавления/редактирования новости, в текстовое поле вводится слово или несколько. Разделять несколько слов нужно переносом строки, т.е. одна строка это один кейворд. При добавлении или сохранении новости введённые в поля слова добавляются в базу и присваиваются посту.
Кейворды в отличии от категорий "плоские", у них нет никакой иерархии. Ключсловам это и не нужно, они являются ярлыками записи и нуждаются в иерархии лишь в случае отсутствия в системе категорий (или близких по смыслу понятий, например, рубрик).
Для сортировки по ключевым словам перед инклудом show_news.php нужно писать:
$keywords = 'key1,key2'; // key1 и key2 это то же самое, что поле "УРЛ" у категорий, только задаётся автоматически, через транслит
$keywords = '1,2'; // 1 и 2 - ID, задаются автоматически и не повторяются
$keywords = 'Key1,Key2'; // Key1 и Key2 это имена кейвордов
В вышеуказаных примерах будут выводится все посты с кейвордами Key1 и Key2.
Чтобы посмотреть кейворды указанные для новости в шаблоне, нужно указывать $tpl['post']['_']['keywords'] - это выведет что-то типа "1,2" (без кавычек), вывести готовый вид (имена со ссылками) можно через $tpl['post']['keywords'].
В массив $post кейворды тоже попадают:
$number = 5;
include rootpath.'/show_news.php';
if ($post['keywords']){ // узнаём, открыта ли какая-то новость и указаны ли для неё кейворды
$static['skip'] = 0;
$static['template'] = 'Headlines';
$static['number'] = 7;
$static['category'] = $post['keywords'];
include rootpath.'/show_news.php';
}
Вышеуказанный пример это практически калька с примера категорий. Смысл примера: вывести 5 последних новостей и если новость открыта, то под ней 7 постов с похожими кейвордами. На сайтах СМИ это называется "новости по теме".
Пример "новостей по теме". Вы пишите новость, указываете кейворды "Путин", "А лох-то кто?" и "Киркоров". Все другие новости, которым присвоен кейворд "Киркоров" являются "по теме".
Если позволите, а выбор у вас небольшой :), объясню смысл этого плагина.
Возникло желание классифицировать обычный стандартный пост по нескольким параметрам. Есть, к примеру, нужда делать страницу, при этом запись не должна попадать в общую ленту, создавать отдельную категорию - не с руки, ибо нужна и иерархия страниц. То есть одна страница может быть "родителем" другой и "ребёнком" третьей, но при этом не является "папкой". Банальный пример: страница "Обо мне" её "ребёнок" "Контакты".
Получается, что новость она как бы уже и не новость совсем, а страница, опрос, приватный пост или чистый php.
Итак, на данный момент типов всего четыре и я их перечислил выше. В чём их различия.
Страница не выводится в общем потоке и имеет иерархию. Когда в админке выбирается тип "Страница" снизу появляется ещё одно выподающее меню, в котором можно выбрать "родителя" - другой пост указаный как "страница".
Опрос позволяет сделать голосовалку, которая появится в общем потоке. Любой текст в короткой новости становится пунктом опроса. Принцип прост - одна строка это один пункт. Полная новость становится выводом результатов, при этом не важно заполняли вы её или нет - ваши данные видны не будут, только результаты. Если вы проголосовали, то записываются куки сроком на сутки и в короткой новости у вас тоже только результаты. После голосования кем-либо записываются голоса, но не в отдельную базу, а в сам пост:
Пункт 1{кол-во голосов}
Пункт 2{кол-во голосов}
Пункт 3{кол-во голосов}
Запароленый пост это приватный пост, пост на который поставлен пароль, если кто-то не знает пароль и не введёт его, то кроме формы ввода пароля ничего не увидит. Запаролить пост просто - нужно выбрать тип "Запароленый", появится новое поле и туда следует ввести пароль. Просто, как три копейки.
PHP пост это пост, который содержит только валидный php. php-теги писать не нужно, просто код и всё. Такой тип поста доступен только человеку с полными правами, по умолчанию существует только одна группа с такими правами - "Администраторы". Люди, которым позволино редактировать чужые посты могут править пост и сохранять его, но после правки php работать не будет, он превратится в текст.
Чтобы вызвать только определённый тип нужно использовать переменную $type:
$type = 'poll'; // выведет только опросы
$type = 'page'; // выведет только страницы
Если $type не указывать будет выводиться всё, кроме страниц.
Очень задорный плагин, он создан только лишь потому что хотелось. Я давно желал увидить "блоки своей мечты" в каком-нибудь ином движке, но не удавалось, ибо нет или просто в тех движках, которых смотрел нет. Не знаю на сколько плагин будет полезен в полной мере, но при создании странички примера помог. Всё оказалось достаточно удобным. Конечно, делать ещё и делать, но то, что имеется очень удачное, как мне кажется.
Плагин делится на две части. Первая находится в админке и через неё создаются блоки (обычные файлы) и их категории (папки). Вторая часть находится в самой странице, в которой в самом низу (после </html>) подключён foot.php:
include plugins_directory.'/ddb/foot.php';
Если набрать в адресной строке http://example.com/ваша-страница.php?ddb=edit, то появятся поля, в которые можно перетащить блоки. Эти поля появляются не абы как, прежде нужно сделать разметку:
<!--block:NAME-->
NAME это любое слово, кроме blocks. Очень советую как следует изучить для этого дела example/index.php из дистрибутива. Там есть и подключение foot.php (вы можете увидить что такое низ страницы :)) и немного разметки. Самого кода - кот наплакал, поэтому всё должно быть предельно ясно.
Ещё одна интересная деталь. Предположем, есть у нас набор страниц:
http://example.com/ваша-страница.php?key=i
http://example.com/ваша-страница.php?key=see
http://example.com/ваша-страница.php?key=nude
http://example.com/ваша-страница.php?key=people
(далее я буду писать просто ?key=что-то_непостоянное)
Каждая такая штука подключает что-то или выводит. Что обычно приходится писать в таких случаях:
if ($key == 'i'){
что-то если key равно i
} elseif ($key == 'see'){
что-то если key равно see
} else {
если key не равно ни i, ни see
}
С Drag'n'Drop Blocks от этого можно избавиться. Если у нас есть шаблон с расставленными полями (см. про <!--block:NAME-->), то всё делается проще. В админке Drag'n'Drop Blocks можно создать категорию с родителем NAMEи именем- key. Теперь в этой категории создаём блоки с именами i, see, nude и people. Теперь при совпадении $key в блок NAME будет подключаться нужный блок. Если правило не совпадает, то подключается блок else. Конечно, если такой блок есть.
Красотища! :)
Есть такая штука GetText. Крайне удобна для создания мультиязычных систем. Принцип её прост, как три копейки: есть набор функций отвечающий за настройку и есть две функции отвечающие непосредственно за перевод - gettext() и её псевдоним _(). Через _() выводится текс, например _('Привет!'), если существуют файлы .po (исходник) и .mo (укомплектованый po-фаил), то GetText их просматривает и заменяет слова выведеные через функцию на переведённый вариант. Поэтому плагин называется PO Maker, но генерирует он далеко не po-файлы.
Плагин генерирует обычные массивы. Каждый перевод хранится в папке с языком в директории gettext. В свою очередь, там имеется своя иерархия директорий и файлов, эта иерархия полностью повторяет структуру файлов скрипта, просто хранит в себе не логику, а массивы с текстом.