Событие (хук) для сохранение шаблона в центре администрирования?

#
Событие (хук) для сохранение шаблона в центре администрирования?
Нужно повесить хук на кнопку Сохранить-Применить в разделе Макеты Сайта, при редактировании шаблонов?
Я попробовал так
class Template_Observer extends Template_Model
{
    static public function onAfterExecute($object, $args){
       echo 'ok';
    }
}

Core_Event::attach('template.onAfterExecute', array('Template_Observer','onAfterExecute'));

только он выполняется на фронтенде, а мне нужно в админке???
Модератор
#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
xelaxela13,
1. почему наблюдатель унаследован от Template_Model? с чего вы это взяли?
2. onAfterExecute используется в клиентском разделе, к центру администрирования не имеет никакого отношения.
3. см. http://www.hostcms.ru/documentation/modules/core/events/
если в вашей конкретной форме нет переопределенного вызова onAfterRedeclaredApplyObjectProperty, тогда обрабатывайте Admin_Form_Action_Controller_Type_Edit.onBeforeApplyObjectProperty или Admin_Form_Action_Controller_Type_Edit.onAfterApplyObjectProperty.

и обязательно внутри проверяете на нужный вам класс, пример из документации
        // Данное событие будет вызываться для всех форм, определяем с каким контроллером работаем
        switch (get_class($controller))
        {
            case 'Shop_Controller_Edit':
                $oMainTab = $controller->getTab('main');
                $oMainTab->delete($controller->getField('description'));
            break;
        }
#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
HostCMS писал(а):
почему наблюдатель унаследован от Template_Model? с чего вы это взяли?

я хочу переопределить методы
saveTemplateJsFile($content)
и Цитата:
saveTemplateCssFile($content)
которые сохраняют скрипты и соответственно стили.
Это вообще те методы которые я думаю? В админке при нажатии сохранить-применить они выполняются?


Модератор
#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
xelaxela13,
каким образом через наследие модели вы собрались переопределять методы, ведь в системе будет использоваться оригинальная модель и ей на ваших потомков просто начхать.

xelaxela13 писал(а):
В админке при нажатии сохранить-применить они выполняются?

вы же программист? Что мешает открыть контроллер Template_Controller_Edit и посмотреть как он работает?
#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
Спасибо! Буду пробовать!
Как я понимаю мне нужно событие
Template_Controller_Edit.onAfterRedeclaredApplyObjectProperty
или все таки
Admin_Form_Action_Controller_Type_Edit.onAfterApplyObjectProperty
?
и получится как то так?
class Template_Controller_Edit_Observer
{
    static public function onAfterApplyObjectProperty($controller, $args){
        switch (get_class($controller))
        {
            case 'Template_Controller_Edit':

                break;
        }
    }
}

Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterApplyObjectProperty', array('Template_Controller_Edit','onAfterApplyObjectProperty'));

Правильно?
Модератор
#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
xelaxela13,
оба события допустимы, одно вызывается вначале переопределенного _applyObjectProperty() внутри parent::_applyObjectProperty();, а onAfterRedeclaredApplyObjectProperty вызывается уже в самом конце переопределенного метода. Решайте сами в каком именно месте вы хотите обрабатывать.
#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
как мне узнать что что то происходит?
var_dump не работает, на экран ничего вывести не получилось, или если не выводится, значит и не сработало?
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredApplyObjectProperty', array('Template_Controller_Edit_Observer','onAfterRedeclaredApplyObjectProperty'));

class Template_Controller_Edit_Observer
{
    static public function onAfterRedeclaredApplyObjectProperty($controller, $args){
        switch (get_class($controller))
        {
            case 'Template_Controller_Edit':
                    echo_r(Core_Array::getPost('js'));
                break;
        }
    }
}

#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
что то у меня не получается, я взял пример с документации
Цитата:
Скрытие полей форм центра администрирования (для контроллеров с определнным методом _prepareForm())

копи-паст, все как написано, хотя бы реакция появилась
Цитата:
Предупреждение: call_user_func() expects parameter 1 to be a valid callback, class 'Shop_Controller_Edit_Observer' not found в файле C:\wamp\www\osf.loc\modules\core\event.php (строка 107)

Модератор
#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
xelaxela13,
вся причина в том, что вы фантазируете об именах событий. Скажите, пожалуйста, где в моем примере указано Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredApplyObjectProperty?
#
Re: Событие (хук) для сохранение шаблона в центре администрирования?
Не получается! Я специально пробую примеры с документации, но либо ошибка
Предупреждение: call_user_func() expects parameter 1 to be a valid callback, class 'Shop_Controller_Edit_Observer' not found в файле C:\wamp\www\osf.loc\modules\core\event.php (строка 107)

либо ничего не происходит...
если открываю файл modules\template\controller\edit.php смотрю в нем метод
/**
    * Processing of the form. Apply object fields.
    * @return this
    * @hostcms-event Template_Controller_Edit.onAfterRedeclaredApplyObjectProperty
    */
   protected function _applyObjectProperty()
   {
      parent::_applyObjectProperty();

      $modelName = $this->_object->getModelName();

      if ($modelName == 'template')
      {
         if ($this->_object->template_id)
         {
            $this->_object->template_dir_id = 0;
            $this->_object->save();
         }

         $this->_object
            ->saveTemplateFile(Core_Array::getPost('template'))
            ->saveTemplateJsFile(Core_Array::getPost('js'));

         $css = Core_Array::getPost('css');

         try
         {
            $this->_object->less
               // Save LESS and rebuild CSS
               ? $this->_object->saveTemplateLessFile($css)
               // Save just CSS
               : $this->_object->saveTemplateCssFile($css);
         }
         catch (Exception $e)
         {
            Core_Message::show($e->getMessage(), 'error');
         }

         $manifest = Core_Array::getPost('manifest');
         !is_null($manifest)
            && $this->_object->saveManifestFile($manifest);

         $this->_object
            ->rebuildCompressionCss()
            ->updateTimestamp();

         // Delete all compressed JS
         if (Core::moduleIsActive('compression'))
         {
            Compression_Controller::instance('js')->deleteAllJs();
         }

         // Backup revision
         if (Core::moduleIsActive('revision'))
         {
            $this->_object->backupRevision();
         }
      }

      Core_Event::notify(get_class($this) . '.onAfterRedeclaredApplyObjectProperty', $this, array($this->_Admin_Form_Controller));

      return $this;
   }

соответственно мой хук должен быть внедрен сюда, правильно???
Core_Event::notify(get_class($this) . '.onAfterRedeclaredApplyObjectProperty', $this, array($this->_Admin_Form_Controller));


соответственно я пишу в bootstrap.php
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredApplyObjectProperty', array('Template_Controller_Edit_Observer', 'onAfterRedeclaredApplyObjectProperty'));


файл abserver.php ложу в папку  Modules/Template/Controller/
<?php
defined('HOSTCMS') || exit('HostCMS: access denied.');

/**
* Created by PhpStorm.
* User: xelax
* Date: 15.07.2017
* Time: 19:33
*/
class Template_Controller_Edit_Observer
{
    static public function onAfterRedeclaredApplyObjectProperty($controller, $args)
    {
        switch (get_class($controller)) {
            case 'Template_Controller_Edit':
                  echo_r(Core_Array::getPost('js'));
                break;
        }
    }
}


если я не верно понимаю, дайте готовый пример пожалуйста!!!

HostCMS писал(а):
если в вашей конкретной форме нет переопределенного вызова onAfterRedeclaredApplyObjectProperty, тогда обрабатывайте Admin_Form_Action_Controller_Type_Edit.onBeforeApplyObjectProperty или Admin_Form_Action_Controller_Type_Edit.onAfterApplyObjectProperty.

Откуда я знаю есть переопределенный вызов или нет?
Я пробовал все варианты, не вижу результата
Авторизация