Написание хуков/плагинов LiveStreet
3
Вечер добрый, хотя, уже ночь.
Знакомлюсь с livestreet, а точнее с написанием плагинов/хуков. Настал тот момент, когда начал «строить» свой проект.
Возникла потребность добавить некий «второй» рейтинг для пользователей, который не будет связан с основным и будет регулировать некоторые действия на сайте.
Немного прочитав, понял, что правкой в двиг такое не стоит делать, ибо скоро и обновления, да и вообще принято это делать хуками/плагинами ( не так ли? ).
Прошу подкиньте материал по ним, пока что нашел следующее:
http://mindlis.ru/livestreet/urok-1-napisanie-plaginov-livestreet-051-hello-world.html
http://social.ilya-afanasyev.ru/blog/sites/88.html
http://livestreet.ru/blog/sollutions/9962.html
Пользователь beauty_free добавил http://github.com/medar/livestreetplugin
http://livestreet.ru/blog/dev_documentation/4499.html
http://livestreet.ru/blog/5071.html
А verdet подкинул:
docs.livestreetcms.com/api/1.0/
docs.livestreetcms.com/template/1.0/
Буду благодарен, а в дальнейшем надеюсь, этот топик станет сборником для новичков
Знакомлюсь с livestreet, а точнее с написанием плагинов/хуков. Настал тот момент, когда начал «строить» свой проект.
Возникла потребность добавить некий «второй» рейтинг для пользователей, который не будет связан с основным и будет регулировать некоторые действия на сайте.
Немного прочитав, понял, что правкой в двиг такое не стоит делать, ибо скоро и обновления, да и вообще принято это делать хуками/плагинами ( не так ли? ).
Прошу подкиньте материал по ним, пока что нашел следующее:
http://mindlis.ru/livestreet/urok-1-napisanie-plaginov-livestreet-051-hello-world.html
http://social.ilya-afanasyev.ru/blog/sites/88.html
http://livestreet.ru/blog/sollutions/9962.html
Пользователь beauty_free добавил http://github.com/medar/livestreetplugin
http://livestreet.ru/blog/dev_documentation/4499.html
http://livestreet.ru/blog/5071.html
А verdet подкинул:
docs.livestreetcms.com/api/1.0/
docs.livestreetcms.com/template/1.0/
Буду благодарен, а в дальнейшем надеюсь, этот топик станет сборником для новичков
Где найти исходный код хука?
5
Начал изучать LS, но никак не могу понять, кто такие хуки.
Прочитал в документации и искал по всему сайту, но до меня никак не доходит.
Например в шаблоне header.tpl буквально в пятой строчке есть вызов хука «html_head_begin»
а теперь внимание вопрос.
Где в исходных кодах можно найти, что делает этот хук? в каких папках и директориях копать?
если я где-то затупил — поправьте пожалуйста.
UPD: Та дам! Если кто-то еще не разобрался, что такое хуки, то вот вам колхозное определение.
Хук — это место в шаблоне, которое обозначается примерно так:
это значит, что вы можете написать функцию, которая будет запущена в месте, где этот хук расположен. Например так:
Т.е. мы говорим движку: «я хочу запустить эту белеберду в месте, где стоит хук „menu_topic_action_add_item“. Поэтому, если вы нашли в коде конструкцию
то не пугайтесь, это значит, что тут может запускаться некий код. А может и не запускаться :)
И не забывайте, что при регистрации хука шаблона надо вначале писать „template_“, т.е. если вы в шаблоне нашли
то определять его надо так:
Прочитал в документации и искал по всему сайту, но до меня никак не доходит.
Например в шаблоне header.tpl буквально в пятой строчке есть вызов хука «html_head_begin»
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="ru">
<head>
{hook run='html_head_begin'}
<title>{$sHtmlTitle}</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<meta name="description" content="{$sHtmlDescription}" />
<meta name="keywords" content="{$sHtmlKeywords}" /> а теперь внимание вопрос.
Где в исходных кодах можно найти, что делает этот хук? в каких папках и директориях копать?
если я где-то затупил — поправьте пожалуйста.
UPD: Та дам! Если кто-то еще не разобрался, что такое хуки, то вот вам колхозное определение.
Хук — это место в шаблоне, которое обозначается примерно так:
{hook run='menu_topic_action_add_item'}это значит, что вы можете написать функцию, которая будет запущена в месте, где этот хук расположен. Например так:
public function RegisterHook()
{
$this->AddHook('menu_topic_action_add_item', 'TopicEditAfter');
}
public function TopicEditAfter()
{
$aType = $this->PluginCategory_Category_GetType();
$this->Viewer_Assign('aType', $aType);
return $this->Viewer_Fetch(Plugin::GetTemplatePath('category') . 'menu.settings_category.tpl');
}Т.е. мы говорим движку: «я хочу запустить эту белеберду в месте, где стоит хук „menu_topic_action_add_item“. Поэтому, если вы нашли в коде конструкцию
{hook run='menu_topic_action_add_item'}то не пугайтесь, это значит, что тут может запускаться некий код. А может и не запускаться :)
И не забывайте, что при регистрации хука шаблона надо вначале писать „template_“, т.е. если вы в шаблоне нашли
{hook run="menu_topic_action_add_item"}то определять его надо так:
public function RegisterHook()
{
$this->AddHook('tеmplate_menu_topic_action_add_item', 'TopicEditAfter');
}
}
Пытаюсь добавить поле БД и 2 метода к модулю User, не получается
До этого редактировал напрямую User.mapper.class.php и User.entity.class.php в движке, захотел от этого избавиться, сделал по образцу плагина l10n:
plugins/sport/classes/hooks/HookSport.class.php:
Читать дальше
plugins/sport/classes/hooks/HookSport.class.php:
Читать дальше
[РЕШЕНО]Использование хуков в плагине
1
Дочитал документацию и этот топик, пытаюсь добавить поле при регистрации, но, похоже, поставил функцию не там, где её ищет движок:
В этом случае при регистрации появляется следующая ошибка:
Также пробовал создавать внутри плагина каталог classes/hooks с файлом hookMyPlugin.class.php:
Но в этом случае совсем ничего не происходит. Если просто добавить хук в /classes/hooks в корневой каталог, то всё работает. Но хотелось бы расположить все файлы внутри каталога плагина
//PluginMyPlugin.class.php
public function Init() {
$this->Hook_AddExecFunction('template_form_registration_end','add_field',10);
}
public function add_field($aVars) {
var_dump("some additional field");
}
В этом случае при регистрации появляется следующая ошибка:
Warning: call_user_func_array() expects parameter 1 to be a valid callback, function 'add_field' not found or invalid function name in /var/www/localhost/htdocs/live/engine/modules/hook/Hook.class.php on line 139Также пробовал создавать внутри плагина каталог classes/hooks с файлом hookMyPlugin.class.php:
class PluginMyPlugin_HookMyPlugin extends Hook {
public function RegisterHook ()
{
this -> AddHook('template_form_registration_end','RegEnd',__CLASS__,10);
}
public function RegEnd ($aVars) {
//return $this -> Viewer_Fetch (Plugin::GetTemplatePath (__CLASS__) . 'reg_end.tpl');
var_dump("Hook it!");
}
}Но в этом случае совсем ничего не происходит. Если просто добавить хук в /classes/hooks в корневой каталог, то всё работает. Но хотелось бы расположить все файлы внутри каталога плагина
Хуки работы с контентом
Было бы очень неплохо добавить ко всем хукам манипуляции с контентом (ну типа topic_edit_before, blog_edit_after и т.д и т.п.) параметр, указывающий реального пользователя изменяющего этот контент. Ведь, например, топик может поменять и админ и модератор. И в обработчике хука было бы очень неплохо это знать.
А есть ли системный хук на отображение страницы?
Собственно вопрос в сабже. Нужен именно системный хук, вызываемый при отображении страницы и именно один раз… Все, какие нашел вызываются, почему-то, два-три раза. Нормально работает темплейтные, типа html_head_end, но хочется именно системный, чтобы не зависить от текущего шаблона.
В подвале появилась ссылка
1
У меня простой (надеюсь) вопрос. Пару дней назад, после того как я удалил из главного меню ссылку Разделы (так у меня называются Блоги) — я просто зашёл в header_top.tpl и удалил оттуда соответствующий li. Ссылка из топа пропала, но через пару дней я заметил её в подвале (внизу слева): www.varim.ru/ — причём, ссылка ведёт на страницу /index/ (вроде ссылка сверху вела на /blog/)
Не знаю, связано ли это вообще было с пунктом меню сверху, но даже когда я возвращаю пункт меню на место, снизу он не пропадает. Появляется оно там благодаря хуку, который выполняется перед завершением body, но если хук удалить, пропадают и другие вещи, такие как информация из админки.
Куда копать? Главный вопрос, на самом деле, как понять, кто именно выводит эту ссылку через хук — может, плагин какой. Появляется только на главной!
Помогите, люди добрые!
Выглядит это так:
Не знаю, связано ли это вообще было с пунктом меню сверху, но даже когда я возвращаю пункт меню на место, снизу он не пропадает. Появляется оно там благодаря хуку, который выполняется перед завершением body, но если хук удалить, пропадают и другие вещи, такие как информация из админки.
Куда копать? Главный вопрос, на самом деле, как понять, кто именно выводит эту ссылку через хук — может, плагин какой. Появляется только на главной!
Помогите, люди добрые!
Выглядит это так:
- 0
- 17 декабря 2010, 15:38
- TonyClifton
- 5
Как прервать акшин?
При выполнении хука хотелось бы прервать выполнение текущего акшина(отправка формы) и вернуться на страницу отправки/редактирования. Подскажите как корректнее это сделать.
Livestreet: дао разработчика - 2
51
Первая часть цикла
Дао — это действие, процесс, поток. Чем чаще вы смотрите на код других плагинов, тем больше вы понимаете, как делать свой.
Накачайте плагинов под 0.4.2 и расматривайте, что у них внутри. Без этого вы не сможете начать писать свои плагины.
Я сделал типовой шаблон, из которого удобно делать свои собственные плагины. Располагается он тут:
http://github.com/medar/livestreetplugin
Чтобы скачать его, надо нажать в правом верхнем углу кнопку «Download Source». Желающие могут форкать и вносить изменения.
В файле находится «рыба» плагина с названием abcplugin.
Читать дальше
Дао — это действие, процесс, поток. Чем чаще вы смотрите на код других плагинов, тем больше вы понимаете, как делать свой.
Накачайте плагинов под 0.4.2 и расматривайте, что у них внутри. Без этого вы не сможете начать писать свои плагины.
Я сделал типовой шаблон, из которого удобно делать свои собственные плагины. Располагается он тут:
http://github.com/medar/livestreetplugin
Чтобы скачать его, надо нажать в правом верхнем углу кнопку «Download Source». Желающие могут форкать и вносить изменения.
В файле находится «рыба» плагина с названием abcplugin.
Читать дальше
Livestreet: дао разработчика - 1
25
Я сейчас работаю над одним проектов, в качестве платформы для которого я выбрал Livestreet. Так как с инфой для программистов у этого движка туго, я буду выкладывать те вещи, который я узнал о движке здесь. Надеюсь, это поможет остальным начинающим программистам на LS.
Я работаю с движком всего несколько дней, поэтому что-то в описании может быть неточно или неполно. Не стесняйтесь поправлять.
Цель этого цикла — дать поверхностный, но глобальный взгляд на движок, чтобы снизить порог вхождений. Плюс собрать все актуальные (0.4.1 и выше) ссылки, относящиеся к разработке в одно место.
Итак.
Для начала стоит пробежаться по существующей документации для разработчика (http://trac.lsdev.ru/livestreet/wiki/DeveloperDoc), чтобы понимать термины.
Откройте в IDE движок, пробежитесь по папкам движка, по плагину page, который идет в комплекте с движком.
В движке Livestreet:
Экшены, содержащие Ивенты (action, events) — это, кто знаком с MVC — контроллеры.
Модули (module) — куски кода, которые осуществляют некий функционал (например, функционирование блогов, топиков, комментов). В процессе своей работы они обращаются к Мапперам (mapper) для того, чтобы пообщаться с базой данных. Все sql-запросы пишутся именно в мапперах. Мапперы в свою очередь используют Сущности (entity), которые переводят массивы, отданные mysql в объекты, с которыми потом работает движок.
Способ модификации кода Livestreet два.
1. Через переопределение существующих функций. Меняется целиком существующая функция в модуле/маппере/сущности, или добавляется своя. Подробно: livestreet.ru/blog/dev_documentation/4499.html
2. Через хуки. При этом вставляется код в указанное место движка.
Хуки можно вставить в места, определенные конструкцией $this->HookRun(...); в движке, а также на начало и конец любого модуля, зарегистрированного в системе (не важно, системный он, или установлен каким-то плагином). Подробно про хуки в моделях: livestreet.ru/blog/dev_documentation/3991.html.
Переопределения эти делаются в плагинах. Подробнее о плагинах и их устройстве: livestreet.ru/blog/dev_documentation/3531.html
Как делать эти самые плагины — подробно поговорим во второй части.
Вторая часть
Я работаю с движком всего несколько дней, поэтому что-то в описании может быть неточно или неполно. Не стесняйтесь поправлять.
Цель этого цикла — дать поверхностный, но глобальный взгляд на движок, чтобы снизить порог вхождений. Плюс собрать все актуальные (0.4.1 и выше) ссылки, относящиеся к разработке в одно место.
Итак.
Для начала стоит пробежаться по существующей документации для разработчика (http://trac.lsdev.ru/livestreet/wiki/DeveloperDoc), чтобы понимать термины.
Откройте в IDE движок, пробежитесь по папкам движка, по плагину page, который идет в комплекте с движком.
В движке Livestreet:
Экшены, содержащие Ивенты (action, events) — это, кто знаком с MVC — контроллеры.
Модули (module) — куски кода, которые осуществляют некий функционал (например, функционирование блогов, топиков, комментов). В процессе своей работы они обращаются к Мапперам (mapper) для того, чтобы пообщаться с базой данных. Все sql-запросы пишутся именно в мапперах. Мапперы в свою очередь используют Сущности (entity), которые переводят массивы, отданные mysql в объекты, с которыми потом работает движок.
Способ модификации кода Livestreet два.
1. Через переопределение существующих функций. Меняется целиком существующая функция в модуле/маппере/сущности, или добавляется своя. Подробно: livestreet.ru/blog/dev_documentation/4499.html
2. Через хуки. При этом вставляется код в указанное место движка.
Хуки можно вставить в места, определенные конструкцией $this->HookRun(...); в движке, а также на начало и конец любого модуля, зарегистрированного в системе (не важно, системный он, или установлен каким-то плагином). Подробно про хуки в моделях: livestreet.ru/blog/dev_documentation/3991.html.
Переопределения эти делаются в плагинах. Подробнее о плагинах и их устройстве: livestreet.ru/blog/dev_documentation/3531.html
Как делать эти самые плагины — подробно поговорим во второй части.
Вторая часть