AltoWiki / Сборник рецептов


Хранение дополнительных данных топика

Часто возникает необходимость хранить вместе с топиком какое-либо дополнительное значение и самым простым решением здесь будет – записывать это значение в поле топика extra, которое, собственно, для этих целей и предназначено.
Рассмотрим задачу на примере создания счетчика редактирования топика. Счетчик будет увеличиваться на единицу каждый раз, когда пользователь сохраняет свой топик.
Задача будет решена за трёх шагов
Шаг 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

Похожие статьи

  • Не включаются плагины
    Привет всем.Загрузил в папку /common/plugins с десяток плагинов из них включились парочка, остальные или вообще ни каких ошибок не выдают или требуют файл Plugin_xxxx.class.php который присутствует в архиве. С чем...
  • Плагины Компании и Работа, теперь на Альто
    Добрый день, меня зовут Антон, я занимаюсь разработкой плагинов и доработок под Livestreet с 2009 года. Тогда же были написаны плагины Компании и Работа для livestreet, некий аналог разделам хабрахабр. Недавно стали...
  • Обновлен плагин Категории
    Обновленная версия плагина «заточена» под Alto CMS 1.1.х, и в ней решена проблема задвоения виджетов. И добавлена возможность выбирать категорию при создании и редактировании блога. Причем, возможность выбора при...
  • Бесплатный плагин Feedback — формы обратной связи на вашем сайте

0 комментариев

Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.