Добавление кастомных настроек в модуле каталог

Материал из Umicms
Версия от 06:46, 29 сентября 2011; VITL' (обсуждение | вклад)
(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к:навигация, поиск

В настройках модуля каталог, а именно на данной странице:

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 (для Гостей). В зависимости от настроек модуля на сайте можно менять визуальное представление какого-либо блока данных.