Правка кода при сохранении статьи

#
Правка кода при сохранении статьи
Всем привет!
Интересует такой вопрос: Как можно организовать автоматическую правку кода в статье, при ее сохранении?
К примеру, администратор сайта в тексте статьи вставляет ссылку на фотографию, и нужно при сохранении в атрибут ссылки записать размеры фотографии.
Размер фото могу получить через php.
Модератор
#
Re: Правка кода при сохранении статьи
Используйте хуки на события редактирования в центре администрирования.
Примеры разных хуков: http://www.hostcms.ru/documentation/modules/core/events/
#
Re: Правка кода при сохранении статьи
Т.е. мне надо сделать следующее:
1. В bootstrap.php добавляю строчку:
Core_Event::attach('Admin_Form_Action_Controller_Type_Apply.onBeforeExecute', array('Admin_Form_Action_Controller_Type_Apply_Observer', 'onBeforeExecute'));

2. Создаю в папке /modules/admin/form/action/controller/type/apply/ файл observer.php, в котором будет:
class Admin_Form_Action_Controller_Type_Apply_Observer{...}

в котором уже обрабатывать событие onBeforeExecute ?
#
Re: Правка кода при сохранении статьи
Немного разобрался: Нужно добавить в bootstrap.php такой хук:
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeApplyObjectProperty', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onBeforeApplyObjectProperty'));

В файле будет такой код:
class Admin_Form_Action_Controller_Type_Edit_Observer
{
    static public function onBeforeApplyObjectProperty($object, $args){....}
}

Но как вытащить поле $text, обработать его и перезаписать в $object ?
#
Re: Правка кода при сохранении статьи
Вот готовое решение, если кому надо:
1. Добавляем в  bootstrap.php такой хук:
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onBeforeExecute'));

2. Создаем файл observer.php в папке modules/admin/form/action/controller/type/edit/
3. Содержимое файла
<?php

defined('HOSTCMS') || exit('HostCMS: access denied.');

class Admin_Form_Action_Controller_Type_Edit_Observer extends Admin_Form_Action_Controller_Type_Edit
{
    static public function onBeforeExecute($controller, $args)
    {
        //Если происходит событие сохранения
        if ($args[0]!=NULL){
            //Определяем класс контроллера
            $class=get_class($controller);

            //Проверяем, в каком контроллере сохраняем (в данном примере - сохраняем документ)
            if ( $class=='Document_Controller_Edit' ) {
                //Сохраняемый текст хранится в $controller->_formValues['text']
                //Его можно изменить, как Вам угодно и перезаписать в эту же переменную
            }
        }
    }
}
#
Re: Правка кода при сохранении статьи
Интересует вопрос. Ничего не происходит если написать так:
class Admin_Form_Action_Controller_Type_Edit_Observer extends Admin_Form_Action_Controller_Type_Edit
{
    static public function onBeforeExecute($controller, $args)
    {
        //Если происходит событие сохранения
        if ($args[0]!=NULL){
            //Определяем класс контроллера
            $class=get_class($controller);

            //Проверяем, в каком контроллере сохраняем (в данном примере - сохраняем документ)
            if ( $class=='Shop_Item_Controller_Edit' ) {
                //Сохраняемый текст хранится в $controller->_formValues['text']
                //Его можно изменить, как Вам угодно и перезаписать в эту же переменную
                echo 'erererer';

            }
        }
    }
}

Надо события при сохранение товара в админке что то делать с товаром
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Модератор
#
Re: Правка кода при сохранении статьи
А вызов хука есть?
Добавьте внутрь  static public function onBeforeExecute($controller, $args)
echo 111;
и проверьте, выводится или нет.
#
Re: Правка кода при сохранении статьи
HostCMS писал(а):
А вызов хука есть?

Спасибо за быстрый ответ. Да есть вызов Хука в /bootstrap.php
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onBeforeExecute'));

Проверяю /modules/admin/form/action/controller/type/edit/observer.php в файле:
class Admin_Form_Action_Controller_Type_Edit_Observer extends Admin_Form_Action_Controller_Type_Edit
{
    static public function onBeforeExecute($controller, $args)
    {
        list($operation, $Admin_Form_Controller) = $args;
        if (!is_null($operation))
        {
            // Данное событие будет вызываться для всех форм, определяем с каким контроллером работаем
            switch (get_class($controller))
            {
                case 'Shop_Item_Controller_Edit':
                    $object = $controller->getObject();
                    Core_Message::show('Индексировать товар = '.$object->indexing, 'success');
                    break;
            }
        }
    }
}

Например на галочке Индексировать товар в форме редактирование товара. Когда удираю галочку и нажимаю Сохранить то пишет предыдущее состояние галочки тогда это галочка установлена Индексировать товар = 1. А я снимал галочку и нажимал на сохранить должно было быть надпись Индексировать товар = 0.
Надо бы учитывать состояние после изменение статуса.  Как это можно узнать или отследить?
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
#
Re: Правка кода при сохранении статьи
Seri,
ну раз вы запускаете код в onBeforeExecute, то indexing нужно получать из POST запроса
HostDev.pw - модули для HostCMS, Telegram: @hostdev
#
Re: Правка кода при сохранении статьи
EugenyP,
Спасибо, удалось уловить получать значение через POST.
Если после записи значений то onAfterExecute использовать?
E-mail: info@syrbek.ru / телега: @syrbek /skype: activexm / syrbek.ru / Поддержка сайтов / г. Москва [HTML, CSS (Bootstrap), JS(JQuery, ExtJS), PHP, MySQL, MSSql, Posgres, Git, SVN, Redmine]
Авторизация