Как вызвать один и тот же код в 2х хуках?

#
Как вызвать один и тот же код в 2х хуках?
Есть хуки для 2х событий, в которых используется одинаковый код. Как избавиться от дублирования кода? (к примеру, написать функцию и вызывать ее)

<?php
defined('HOSTCMS') || exit('HostCMS: access denied.');
/**
* Observer
*
* @package HostCMS
* @version 6.x
* @author Hostmake LLC
* @copyright © 2005-2015 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
*/

class Hooks_Form_Observer
{

    static public function onAfterRedeclaredPrepareForm($controller, $args)
    {
        list($object, $Admin_Form_Controller) = $args;
        //КОД
    }


    static public function onBeforeExecute($controller, $args)
    {
        list($operation, $Admin_Form_Controller) = $args;

        if (is_null($operation))
        {        
            //ТАКОЙ ЖЕ КОД
        }
    }

}
Модератор
#
Re: Как вызвать один и тот же код в 2х хуках?
lipton_ice_tea,
class Hooks_Form_Observer
{

    static public function onAfterRedeclaredPrepareForm($controller, $args)
    {
        list($object, $Admin_Form_Controller) = $args;
        
      //КОД
      self::_xxx($Admin_Form_Controller);
    }


    static public function onBeforeExecute($controller, $args)
    {
        list($operation, $Admin_Form_Controller) = $args;

        if (is_null($operation))
        {        
            //ТАКОЙ ЖЕ КОД
         
         self::_xxx($Admin_Form_Controller);
        }
    }

   static protected function _xxx($Admin_Form_Controller)
   {
      // код
   }
}
#
Re: Как вызвать один и тот же код в 2х хуках?
Спасибо!!!
#
Re: Как вызвать один и тот же код в 2х хуках?
Еще 1 вопросик не получается:
$controller->issetTab('ExportImport' работает, а вот $oMainTab->issetField('sorting' нет...
Как можно проверить, есть ли поле на вкладке, не перебирая все поля этой вкладки?
Модератор
#
Re: Как вызвать один и тот же код в 2х хуках?
lipton_ice_tea,
метод issetField ищет поле на вкладке по названию (собственно перебирает поля), но, важно событие, в котором вы его вызываете. Формы строятся двумя методами - с использованием _prepareForm() и без. Вероятно в момент вызова вашего хука поля на вкладке еще не добавлены.
http://www.hostcms.ru/documentation/modules/core/events/
#
Re: Как вызвать один и тот же код в 2х хуках?
Делал проверку в двух событиях, и без результатов(
Модератор
#
Re: Как вызвать один и тот же код в 2х хуках?
lipton_ice_tea,
подробнее о событиях расскажите и покажите
#
Re: Как вызвать один и тот же код в 2х хуках?
В bootstrap добавил такие хуки
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredPrepareForm', array('Lhooks_Form', 'onAfterRedeclaredPrepareForm'));
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute', array('Lhooks_Form', 'onBeforeExecute'));


Вот сам код
<?php
defined('HOSTCMS') || exit('HostCMS: access denied.');
/**
* Observer
*
* @package HostCMS
* @version 6.x
* @author Hostmake LLC
* @copyright © 2005-2015 ООО "Хостмэйк" (Hostmake LLC), http://www.hostcms.ru
*/


class Lhooks_Form
{
    static public function onBeforeExecute($controller, $args)
    {
        list($operation, $Admin_Form_Controller) = $args;

        if (is_null($operation))
        {
            $oMainTab = $controller->getTab('main');
            if ($oMainTab->issetField('sorting'))
            {
                echo 'true';
            }
        }
    }

    static public function onAfterRedeclaredPrepareForm($controller, $args)
    {
        list($object, $Admin_Form_Controller) = $args;

        $oMainTab = $controller->getTab('main');
        if ($oMainTab->issetField('sorting'))
        {
            echo 'true';
        }
   }
}
Модератор
#
Re: Как вызвать один и тот же код в 2х хуках?
lipton_ice_tea,
поля разложены по безымянным row, поэтому через issetField() вы и не видите результат в onBeforeExecute()
Для получения стандартного поля, сгенерированного системой, используйте $controller->getField('sorting'
#
Re: Как вызвать один и тот же код в 2х хуках?
А как тогда мне узнать, на какой вкладке поле? Или как узнать, есть ли поле в данной вкладке?
Только перебором полей в цикле для каждой вкладки?
Авторизация