Хуки в формах администрирования Интернет-магазина

#
Хуки в формах администрирования Интернет-магазина
Написал хук для формы редактирования элемента интернет-магазина:

файл Observer.php:


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

class Shop_Item_Controller_Edit_Observer
{
    static public function onBeforeExecute($object, $operation)
    {
        $oMainTab = $object->getTab('main');
        $oMainTab->delete($object->getField('description'));
    }
}


Когда открываю элемент на редактирование, в верхней части формы появляются ошибки:


delete(): deleting object does not exist.
29 modules\core\exception.php
206 modules\core\html\entity.php
17 modules\shop\item\controller\edit\observer.php
80 modules\core\event.php
465 modules\admin\form\action\controller\type\edit.php
1452 modules\shop\item\controller\edit.php
1030 modules\admin\form\controller.php
584 admin\shop\item\index.php


Отдельно строка $object->getField('description' обрабатывается и возвращает объект.
Модератор
#
Re: Хуки в формах администрирования Интернет-магазина
Поле то есть, а вот на этой вкладке его нет!
#
Re: Хуки в формах администрирования Интернет-магазина
Хорошо. Судя по всему "main" - это вкладка Основные, на ней есть элемент Единицы измерения, тогда я меняю "description" на "shop_measure_id" но ошибка остается.
Модератор
#
Re: Хуки в формах администрирования Интернет-магазина
Georgy90,
да откройте Вы контроллер и посмотрите, нет там того shop_measure_id, нет. Там есть новый select с таким же именем, но этот вовсе не стандартный input shop_measure_id, который генерирует форма "по умолчанию" и Вы получаете его же через getField()!
#
Re: Хуки в формах администрирования Интернет-магазина
Разобрался. Только я их не удаляю, а задаю style('display:none', иначе при сохранении ошибку выдает.
Модератор
#
Re: Хуки в формах администрирования Интернет-магазина
Georgy90,
Конечно не нужно удалять, ведь поле обрабатывается и при отсутствии объекту в значение идет NULL
#
Re: Хуки в формах администрирования Интернет-магазина
Можно 2 конкретных примера кода:
1. Как спрятать поле
2. Как спрятать вкладку/таб
#
Re: Хуки в формах администрирования Интернет-магазина
Пока нашел такие варианты:
1. Как спрятать поле
$controller->getField('start_datetime'->divAttr(array('style' => 'display:none');
вместо start_datetime может быть любое поле

2. Как спрятать вкладку/таб
$controller->getTab('Associateds'->active(0);
вместо Associateds может быть любой таб

Верны ли эти решения, или есть более универсальные средства?
Модератор
#
Re: Хуки в формах администрирования Интернет-магазина
lipton_ice_tea,
вполне разумно
#
Re: Хуки в формах администрирования Интернет-магазина
Но теперь столкнулся с несколькими другими проблемами.
1. По такой схеме не скрываются поля type, modification_id, shop_measure_id и т.д. (пробовал их переносить в другие вкладки - тоже без результатов).
2. К примеру, если речь идет о Shop_Item_Controller_Edit, то как определить какая форма открывается: для редактирования группы или редактирования товара?
В описании хуков есть такой пример:
static public function onBeforeAddDataset($object, $args)
   {
      list($oAdmin_Form_Dataset) = $args;
      $oEntity = $oAdmin_Form_Dataset->getEntity();
      switch (get_class($oEntity))
....

Но если это пытаться сделать в onBeforeExecute - то вылетает ошибка.
3. Как перенести поле в середину другой вкладки?
Сам перенос выполняется так: $oAdditionalTab->move($controller->getField('id', $oMainTab);
Но поле помещается в самый низ и визуально вылезает за края формы.

Заранее спасибо! Третий день гуглю и копаюсь в api, но ответа не нашел.
Авторизация