Хуки работы с контентом

Было бы очень неплохо добавить ко всем хукам манипуляции с контентом (ну типа topic_edit_before, blog_edit_after и т.д и т.п.) параметр, указывающий реального пользователя изменяющего этот контент. Ведь, например, топик может поменять и админ и модератор. И в обработчике хука было бы очень неплохо это знать.

А есть ли системный хук на отображение страницы?

Собственно вопрос в сабже. Нужен именно системный хук, вызываемый при отображении страницы и именно один раз… Все, какие нашел вызываются, почему-то, два-три раза. Нормально работает темплейтные, типа html_head_end, но хочется именно системный, чтобы не зависить от текущего шаблона.

В подвале появилась ссылка

У меня простой (надеюсь) вопрос. Пару дней назад, после того как я удалил из главного меню ссылку Разделы (так у меня называются Блоги) — я просто зашёл в header_top.tpl и удалил оттуда соответствующий li. Ссылка из топа пропала, но через пару дней я заметил её в подвале (внизу слева): www.varim.ru/ — причём, ссылка ведёт на страницу /index/ (вроде ссылка сверху вела на /blog/)

Не знаю, связано ли это вообще было с пунктом меню сверху, но даже когда я возвращаю пункт меню на место, снизу он не пропадает. Появляется оно там благодаря хуку, который выполняется перед завершением body, но если хук удалить, пропадают и другие вещи, такие как информация из админки.

Куда копать? Главный вопрос, на самом деле, как понять, кто именно выводит эту ссылку через хук — может, плагин какой. Появляется только на главной!

Помогите, люди добрые!

Выглядит это так:

Как прервать акшин?

При выполнении хука хотелось бы прервать выполнение текущего акшина(отправка формы) и вернуться на страницу отправки/редактирования. Подскажите как корректнее это сделать.

Livestreet: дао разработчика - 2

Первая часть цикла

Дао — это действие, процесс, поток. Чем чаще вы смотрите на код других плагинов, тем больше вы понимаете, как делать свой.
Накачайте плагинов под 0.4.2 и расматривайте, что у них внутри. Без этого вы не сможете начать писать свои плагины.

Я сделал типовой шаблон, из которого удобно делать свои собственные плагины. Располагается он тут:
http://github.com/medar/livestreetplugin
Чтобы скачать его, надо нажать в правом верхнем углу кнопку «Download Source». Желающие могут форкать и вносить изменения.

В файле находится «рыба» плагина с названием abcplugin.
Читать дальше →

Livestreet: дао разработчика - 1

Я сейчас работаю над одним проектов, в качестве платформы для которого я выбрал 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

Как делать эти самые плагины — подробно поговорим во второй части.

Вторая часть

Плагин aceAdminPanel – новые возможности для разработчиков плагинов

Прямо так и хочется начать: «Кролики – это не только ценный мех, но и три-четыре килограмма легкоусвояемого мяса» :)

А все потому, что плагин админки (aceAdminPanel) – это не только облегчение работы администратора сайта, но и новые возможности для разработчиков, пишущих различные расширения для движка. Здесь я расскажу об одной интересной фиче, которую я смог реализовать в плагине, и которая дает гораздо больше возможностей при создании плагинов, чем стандартные средства.
Читать дальше →

Ставим хук внутри шаблона.

Появилась возможность устанавливать хуки прямо внутри шаблона — trac.lsdev.ru/livestreet/changeset/848
Делается это за счет плагина к Smarty hook, например:
{hook run='body_begin'}
вызовет хуки повешенные на событие 'template_body_begin'(обратите внимание, что приставка template_ добавляется автоматически, если хук вызван из шаблона), а их результат в виде строки вернется в шаблон.

Предлагаю определиться какие нужны стандартные хуки? Сейчас добавлено только два: body_begin и body_end, соответственно вызываются в начале HTML тега BODY и в конце.

Переопределение методов модулей с помощью ...Hook'ов!

В LiveStreet 0.4 появилась возможность переопределять не только целиком модули, но и отдельные методы. Это позволить разным плагинам бесконфликтно переопределять разные методы одного модуля.

Принцип действия этого механизма основан на Hook'ах:
  1. Вызов каждого метода сопровождается выполнением хуков — module_ModuleName_MethodName_before и module_ModuleName_MethodName_after, соответственно ДО и ПОСЛЕ вызова метода модуля. В первом случаи в хук передаются параметры вызова метода, во втором передается результат выполнения метода модуля.
  2. На module_ModuleName_MethodName_before можно повесить специальный хук — delegate, результат выполнения которого и будет «результатом» выполнения метода модуля

Пример:
<?php 
class HookTest extends Hook {
	public function RegisterHook() {
		$this->AddDelegateHook('module_text_parser_before','testHook',__CLASS__,-3);
	}

	public function testHook($aVars) {
		return 'Topic text > '.$aVars[0];
	}
}
?>

Читать дальше →

Помогите разобраться с делегированием (или хуками)

Сделал я плагин для своего сайта. Плагин очень специфический, и вряд ли кому пока пригодится в том виде, какой есть. Но, если есть пожелания по его доработке — пишите, если наши пожелания совпадут, то допилю и поделюсь бесплатно. Вроде как все работает как надо, но для того, чтобы добавить в информацию о пользователе информацию из плагина, мне пришлось дописывать строчки в системные модули, что совсем нехорошо.
Читать дальше →