Как создать свой вид топика, используя систему плагинов
3 года назад было написано Руководство: Как создать свой вид топика на LiveStreet. В то время ещё не было системы плагинов, и всё делалось «топорно», что в последствии затрудняло обновление движка, т.к. приходилось свои куски кода вставлять опять. С появлением системы плагинов LiveStreet стал более гибким и легко обновляемым. Передо мной встала задача создать новый вид топика, и я решил сделать это плагином. Но в процессе выяснилось, что то ли я чего-то не знаю, толи этого нет.
Напишу, что и как я делал, заодно задам вопросы, может быть на них решение уже есть. Надеюсь, совместно у нас получится сделать каркас нового типа топика в форме плагина. Итак, по порядку:
Читаем "Руководство по созданию плагина", ещё, создаём каркас плагина — папочки, конфиг, plugin.xml и т.п.
1. Первая задача, которая перед нами стоит — в базе данных в таблицу «topic» добавить дополнительный новый тип топика в поле «topic_type». Путей решения есть два: (1) Зайти в phpMyAdmin и создать руками, (2) Сделать что-то типа такого в функции активации плагина:
2. Создаём ссылку на создания нового вида топика топика в шаблоне.
В папке "/plugins/test/templates/skin/default/" создаём файл «menu.topic_action.tpl» следующего содержания:
Текстовку «topic_menu_add_test» не забываем разместить в языковом файле "/plugins/test/templates/language/russian.php".
Далее создаём хук "/plugins/test/classes/hooks/HookTest.class.php":
3. У нас есть ссылка, пропишем для нее путь к экшену.
Для чего создадим файл "/plugins/test/config/config.php" и добавим в него строчку:
Далее всё идёт почти как три года назад:
4. Создаем сам экшен.
Создаём "/plugins/test/classes/actions/ActionTest.class.php". Можно скопировать класс ActionTopic, заменив названия переменных.
5. Копируем необходимые шаблоны для нового вида топика.
Так же можно скопировать шаблоны от стандартного топика и отредактировать их.
Структура плагина, план «минимум» :)
Скачать получившийся каркас можно тут.
Напишу, что и как я делал, заодно задам вопросы, может быть на них решение уже есть. Надеюсь, совместно у нас получится сделать каркас нового типа топика в форме плагина. Итак, по порядку:
Читаем "Руководство по созданию плагина", ещё, создаём каркас плагина — папочки, конфиг, plugin.xml и т.п.
1. Первая задача, которая перед нами стоит — в базе данных в таблицу «topic» добавить дополнительный новый тип топика в поле «topic_type». Путей решения есть два: (1) Зайти в phpMyAdmin и создать руками, (2) Сделать что-то типа такого в функции активации плагина:
public function Activate() {
$this->addEnumType(Config::Get('db.table.topic'),'topic_type','test');
return true;
}
(спасибо ort'у за подсказку)2. Создаём ссылку на создания нового вида топика топика в шаблоне.
В папке "/plugins/test/templates/skin/default/" создаём файл «menu.topic_action.tpl» следующего содержания:
<li {if $sMenuItemSelect=='test'}class="active"{/if}><a href="{router page='test'}{$sMenuSubItemSelect}/">{$aLang.topic_menu_add_test}</a></li>
Текстовку «topic_menu_add_test» не забываем разместить в языковом файле "/plugins/test/templates/language/russian.php".
Далее создаём хук "/plugins/test/classes/hooks/HookTest.class.php":
class PluginTest_HookTest extends Hook {
public function RegisterHook() {
$this->AddHook('template_menu_topic_action_add_item', 'Add');
}
// Новый тип при создании топика
public function Add() {
return $this->Viewer_Fetch(Plugin::GetTemplatePath(__CLASS__).'menu.topic_action.tpl');
}
}
3. У нас есть ссылка, пропишем для нее путь к экшену.
Для чего создадим файл "/plugins/test/config/config.php" и добавим в него строчку:
Config::Set('router.page.test', 'PluginTest_ActionTest');
Далее всё идёт почти как три года назад:
4. Создаем сам экшен.
Создаём "/plugins/test/classes/actions/ActionTest.class.php". Можно скопировать класс ActionTopic, заменив названия переменных.
5. Копируем необходимые шаблоны для нового вида топика.
Так же можно скопировать шаблоны от стандартного топика и отредактировать их.
Структура плагина, план «минимум» :)
Скачать получившийся каркас можно тут.
37 комментариев
Оно?
в /plugins/test/classes/actions/ActionTest.class.php у Вас class PluginTest_ActionTest extends PluginAction_Inherits_ActionTopic { как я понимаю Вы хотете переопределить экшен топиков но нигде переопределение не обьявили, если Вам нужен был новый экшен то для чего _Inherits_ActionTopic? или описка?
В общем и целом, меня лично каркас устраивает. Пошёл делать основной функционал…
Спасибо!
Проблема при выводе топика этого плагина в котором использовались html теги они не обрабатываются, как решить?
Разве ни у кого не возникала эта проблема?
если написать топик в этом плагине то получает при выводе
если написать в обычном топике то получаем
Что я не так делаю?
вот это убивает список привращая его в
На всякий случай, в версии 1.0.1 хук называется по другому не
а
template_write_item
в любом случае можно хук смотреть в window_write.tpl
и там хук называется menu_create_topic_item
Правда вызвать его пока не получилось((
Слово template_ откуда-то копировал, а там буква «e» русская оказалась. Убил бы!
выдает пустую строку, хотя проверил файл menu.topic_action.tpl — на месте, текст в нем тоже есть. Немогу понять где проблема
Спасибо!
SQL Error: Column 'topic_text_hash' cannot be null at Z:\home\qwer\www\classes\modules\topic\mapper\Topic.mapper.class.php line 50
Подскажите, в чем может быть проблема?