Добавление кастомных настроек в модуле каталог
В настройках модуля каталог, а именно на данной странице:
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 = umitest;
$path = "//modules/catalog/{$name_key}";
$value = $regedit->getVal($path);
в вашем кастомном методе. Если метод добавляется в файл __custom.php, модуля "Каталог", то в файл permissions.custom.php необходимо добавить права на этот метод, к примеру в группу view (для Гостей). В зависимости от настроек модуля на сайте можно менять визуальное представление какого-либо блока данных.