Morozov&Pimnev blog

Полезные решения, шпаргалки и примеры по html, css, js, jQuery, MySQL, PHP, HostCMS, ssh.

Добавление/скрытие полей форм ЦА HostCMS v6

Создаем файл /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));

php, core_event, hostcms6, хуки