Рассмотрим задачу на примере создания счетчика редактирования топика. Счетчик будет увеличиваться на единицу каждый раз, когда пользователь сохраняет свой топик.
Задача будет решена за трёх шагов
Шаг 1: Создание методов записи и чтения значения счётчика
Методы будут расширять класс сущности топика ModuleTopic_EntityTopic. Делается это стандартно для любого плагина. Создадим файл common/plugins/example/classes/modules/topic/entity/Topic.entity.class.php, содержащий следующий код:
<?php
class PluginExample_ModuleTopic_EntityTopic
extends PluginExample_Inherit_ModuleTopic_EntityTopic {
/**
* Устанавливает новое значение счётчика
* @param int $iValue
*/
public function setEditCounterValue($iValue) {
$this->setExtraValue('edit_counter_value', $iValue);
}
/**
* Возвращает значение счётчика
* @return int
*/
public function getEditCounterValue() {
return (int)$this->getExtraValue('edit_counter_value');
}
}
Как видно методы довольно просты и использую методы родительского класса setExtraValue и getExtraValue для работы со значением счетчика. Конечно, еще нужно не забыть указать созданную сущность в массиве переопределенных классов в клавном файле плагина:
Шаг 2: Установка хука на событие сохранения топика
Перехватить нужно два события – добавление топика и его редактирование. Каждое это событие вызывает на исполнение соответствующие хуки: topic_add_before и topic_edit_before, код этих хуков приведён ниже.
Шаг 3. Вывод значения
Значение редактирования выведем в подвал топика через шаблонный хук topic_show_info.
<?php
class PluginExample_HookExample extends Hook {
/**
* Регистрация хуков
*/
public function RegisterHook() {
// хуки, вызываемые перед сохранением топика
$this->AddHook('topic_add_before', 'UpdateEditCounterValue');
$this->AddHook('topic_edit_before', 'UpdateEditCounterValue');
// шаблонный хук для вывода значения
$this->AddHook('template_topic_show_info','ShowEditCounterValue');
}
/**
* Увеличение значения счётчика редактирования топика
* @param array $aData
*/
public function UpdateEditCounterValue($aData) {
/** @var PluginExample_ModuleTopic_EntityTopic $oTopic */
$oTopic = $aData['oTopic'];
$oTopic->setEditCounterValue($oTopic->getEditCounterValue()+1);
}
/**
* Возвращает строку с количеством редактирований топика
*
* @param array $aData
* @return string
*/
public function ShowEditCounterValue($aData){
/** @var PluginExample_ModuleTopic_EntityTopic $oTopic */
$oTopic = $aData['topic'];
return "<li>Кол-во редактирований: {$oTopic->getEditCounterValue()}</li>" ;
}
}
Результат:
Основной термин:
extra
Синонимы:
экстра, setExtraValue, getExtraValue
0 комментариев