Добавление кастомных настроек в модуле каталог
Материал из Umicms
В настройках модуля каталог, а именно на данной странице:
http://ваш_сайт/admin/catalog/config/
имеется всего один параметр для настройки "Количество объектов на странице", но в случае необходимости, можно добавить дополнительные настройки, которые потом можно использовать для управления логикой работы какого-либо кастомного метода. Рассмотрим следующий пример. В папку \styles\skins\mac\data\modules\catalog\ добавим файл settings.modify.custom.xsl следующего содержания:
<?xml version="1.0" encoding="utf-8"?> <!DOCTYPE xsl:stylesheet SYSTEM "ulang://common"> <xsl:stylesheet version="1.0" xmlns:xsl="http://www.w3.org/1999/XSL/Transform"> <xsl:template match="data[@type = 'settings' and @action = 'modify']"> <form method="post" action="/admin/catalog/setReg/" enctype="multipart/form-data"> <xsl:apply-templates select="." mode="settings.modify" /> </form> </xsl:template> <xsl:template match="group" mode="settings.modify"> <div class="panel"> <div class="header" onclick="panelSwitcher(this);"> <span> <xsl:value-of select="@label" /> </span> <div class="l" /><div class="r" /> </div> <div class="content"> <table class="tableContent"> <tbody> <xsl:apply-templates select="option" mode="settings.modify" /> <tr> <td class="eq-col"> <label for="custom_field">Кастомное поле</label> </td> <td> <xsl:variable name="custom_field" select="document('udata://catalog/getReg/custom_field')/udata" /> <input type="text" name="custom_field" value="{$custom_field}" /> </td> </tr> <tr> <td class="eq-col"> <label for="custom_field2">Второе кастомное поле</label> </td> <td> <xsl:variable name="custom_field2" select="document('udata://catalog/getReg/custom_field2')/udata" /> <input type="text" name="custom_field2" value="{$custom_field2}" /> </td> </tr> </tbody> </table> <xsl:call-template name="std-save-button" /> </div> </div> </xsl:template> </xsl:stylesheet>
в данном случае мы переназначаем логику двух шаблонов из файла: \styles\skins\mac\data\settings.modify.xsl.
В блоке:
<xsl:template match="data[@type = 'settings' and @action = 'modify']"> ... <xsl:template>
меняется action формы. В блок:
<xsl:template match="group" mode="settings.modify"> ... <xsl:template>
добавляются новые поля, т.е. новые кастомные настройки.
Далее, в папку \classes\modules\catalog\ необходимо добавить файл permissions.custom.php:
<?php $permissions = Array('tree' => Array('getReg', 'setReg')); ?>
И файл __custom_adm.php:
<?php abstract class __custom_adm_catalog { // получение значения реестра по ключу $name_key public function getReg($name_key){ $regedit = regedit::getInstance(); $path = "//modules/catalog/{$name_key}"; $value = $regedit->getVal($path); if($value) return $value; } // сохранение значений ключей реестра (per_page, custom_field, custom_field2) public function setReg(){ $regedit = regedit::getInstance(); // список обрабатываемых полей, с указанием типа поля $params = array( "config" => array( "int:per_page" => NULL, "string:custom_field" => NULL, "string:custom_field2" => NULL ) ); $params = $this->expectParams($params); $regedit->setVar("//modules/catalog/per_page", $params['config']['int:per_page']); $regedit->setVar("//modules/catalog/custom_field", $params['config']['string:custom_field']); $regedit->setVar("//modules/catalog/custom_field2", $params['config']['string:custom_field2']); $this->chooseRedirect(); } }; ?>
Визуальное представление кастомных полей вы можете оформить необходимым для вас образом, это может быть строка, выпадающий список, переключатель и т.п. После сохранения настроек в реестре системы, вы можете получить к ним доступ стандартным способом, т.е. подобными строками:
$regedit = regedit::getInstance(); $name_key = 'custom_field'; $path = "//modules/catalog/{$name_key}"; $value = $regedit->getVal($path);
в вашем кастомном методе. Если метод добавляется в файл __custom.php, модуля "Каталог", то в файл permissions.custom.php необходимо добавить права на этот метод, к примеру в группу view (для Гостей). В зависимости от настроек модуля на сайте можно менять визуальное представление какого-либо блока данных.
