Полезные решения, шпаргалки и примеры по html, css, js, jQuery, MySQL, PHP, HostCMS, ssh.
Создаем файл /modules/admin/form/action/controller/type/edit/observer.php со следующим содержимым:
<?php
/* Добавление/скрытие полей форм ЦА HostCMS v6 */
defined('HOSTCMS') || exit('HostCMS: access denied.');
class Admin_Form_Action_Controller_Type_Edit_Observer
{
// либо public static function onAfterRedeclaredPrepareForm($controller, $args)
// Генерация стандартной формы редактирования осуществляется методом _prepareForm() контроллера Admin_Form_Action_Controller_Type_Edit. Далее в методе класса потомка, например Shop_Controller_Edit, осуществляется перемещение полей по вкладкам и для корректировки уже этого перемещения необходимо использовать событие Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredPrepareForm.
public static function onBeforeExecute($controller, $args)
{
list($operation, $Admin_Form_Controller) = $args;
if(is_null($operation))
{
// Данное событие будет вызываться для всех форм, определяем с каким контроллером работаем
switch(get_class($controller))
{
// Редактирование информационной системы
case 'Informationsystem_Controller_Edit':
// Получаем доступ к вкладке "Основные"
$mainTab = $controller->getTab('main');
// Если вдруг мы добавили новый столбец 'sign' в БД то система будет ругаться "Key 'sign' in 'ru' language does not exist for model 'informationsystem'."
// Конечно же в файл /modules/informationsystem/i18n/ru.php мы ничего внести не может, как оказалось он затирается, для этого делаем следующее
$controller->getField('sign')->caption("Подпись");
// Удаляем поле "Сортировка" с вкладки "Основные"
$mainTab->delete($controller->getField('sorting'));
// Добавляем произвольное поле на вкладку "Основные"
// либо до/после (addBefore/addAfter) уже существующего поля
$customFiled = Admin_Form_Entity::factory('Input')->name("custom");
$mainTab->addAfter($customFiled, $controller->getField('name'));
// либо просто добавляем, в большем случае в конце
$mainTab->add($customFiled);
break;
}
}
}
}
В файле bootstrap.php в конце добавляем следующую строчку:
// Добавление/скрытие полей форм ЦА
Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onBeforeExecute'));
// либо Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onAfterRedeclaredPrepareForm', array('Admin_Form_Action_Controller_Type_Edit_Observer', 'onAfterRedeclaredPrepareForm'));
// если первое не работает
Получить список всех вкладок можно следующим образом:
echo("<pre>");
foreach($controller->getTabs() as $tab)
{
echo '$'.$tab->name.'Tab = $controller->getTab(\''.$tab->name.'\');<br />';
}
echo("</pre>");
Узнать название класса можно так:
print_r(get_class($controller));
Узнать методы класса можно так:
print_r(get_class_methods($Admin_Form_Controller));