private:koding:hostcms:modules:formy_ca:hide_or_sign_field

Cкрытие/добавление подписей для нестандартных полей

Некоторые модули или решения добавляют нестандартные поля для сущностей, такие поля некорректно отображаются при редактировании сущностей в центре администрирования. Нестандартные поля можно скрыть, либо добавить им подписи, чтобы администратору было ясно их предназначение.

Для этих целей можно воспользоваться нижеприведенным наблюдателем.

  1. Создаем файл наблюдателя /modules/admin/form/action/controller/type/edit/observer/hidecustomfields.php со следующим содержимым:
    <?php
     
    defined('HOSTCMS') || exit('HostCMS: access denied.');
     
    /**
     * Наблюдатель для скрытия/добавления подписи для поля.
     * 
     * В bootstrap.php:
     * 
     * // Kad: Наблюдатели для скрытия/добавления подписи для поля.
     * Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforePrepareForm',
     *    array('Admin_Form_Action_Controller_Type_Edit_Observer_HideCustomFields', 'onBeforePrepareForm'));
     * // Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute',
     * //   array('Admin_Form_Action_Controller_Type_Edit_Observer_HideCustomFields', 'onBeforeExecute'));
     */
    class Admin_Form_Action_Controller_Type_Edit_Observer_HideCustomFields
    {
        /**
         * Метод для скрытия поля.
         * 
         * @param  Admin_Form_Action_Controller_Type_Edit  $oAdminFormActionControllerTypeEdit
         * @param  array $aArgs
         * @return void
         */
        static public function onBeforePrepareForm(Admin_Form_Action_Controller_Type_Edit $oAdminFormActionControllerTypeEdit, array $aArgs)
        {
            list($oObject, $oAdminFormController) = $aArgs;
     
            switch (get_class($oAdminFormActionControllerTypeEdit))
            {
                case 'Shop_Order_Controller_Edit':
                case 'Siteuser_Controller_Edit':
                    $oAdminFormActionControllerTypeEdit->addSkipColumn('custom_field');
                break;
            }
        }
     
        /**
         * Метод для добаления полю подписи.
         * 
         * @param  Admin_Form_Action_Controller_Type_Edit  $oAdminFormActionControllerTypeEdit
         * @param  array $aArgs
         * @return void
         */
        static public function onBeforeExecute(Admin_Form_Action_Controller_Type_Edit $oAdminFormActionControllerTypeEdit, array $aArgs)
        {
            list($operation, $oAdminFormController) = $aArgs;
     
            switch (get_class($oAdminFormActionControllerTypeEdit))
            {
                case 'Shop_Order_Controller_Edit':
                case 'Siteuser_Controller_Edit':
                    if (array_key_exists('custom_field', $oAdminFormActionControllerTypeEdit->getFields()))
                    {
                        $oAdminFormActionControllerTypeEdit->getField('custom_field')
                            ->caption('Подпись для поля');
                    }
                break;
            }
        }
    }
  2. В /boostrap.php добавляем:
    Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforePrepareForm',
        array('Admin_Form_Action_Controller_Type_Edit_Observer_HideCustomFields', 'onBeforePrepareForm'));
     
    Core_Event::attach('Admin_Form_Action_Controller_Type_Edit.onBeforeExecute',
        array('Admin_Form_Action_Controller_Type_Edit_Observer_HideCustomFields', 'onBeforeExecute'));

* Метод onBeforePrepareForm отвечает за скрытие поля, можно перечислить контроллеры сущностей, для которых необходимо скрывать поля, и собственно поля. Метод onBeforeExecute отвечает за добавление полю подписи, в нем также можно перечислить контроллеры сущностей, для которых необходимо скрывать поля, и собственно поля и надписи для них.

Страницу создал Максим Засорин 31.03.17 в 15:36

private/koding/hostcms/modules/formy_ca/hide_or_sign_field.txt · Last modified: 14.05.19 в 09:24 by maximzasorin_gmail.com