<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="ru">
	<id>https://wiki.umisoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alexei</id>
	<title>Umicms - Вклад участника [ru]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.umisoft.ru/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Alexei"/>
	<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/%D0%A1%D0%BB%D1%83%D0%B6%D0%B5%D0%B1%D0%BD%D0%B0%D1%8F:%D0%92%D0%BA%D0%BB%D0%B0%D0%B4/Alexei"/>
	<updated>2026-04-07T02:38:48Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%BE%D0%B2_%D0%B8%D0%B7_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BF%D0%B0%D0%BD%D0%B5%D0%BB%D0%B8&amp;diff=8031</id>
		<title>Массовое удаление заказов из административной панели</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%BE%D0%B2_%D0%B8%D0%B7_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BF%D0%B0%D0%BD%D0%B5%D0%BB%D0%B8&amp;diff=8031"/>
		<updated>2016-08-29T13:18:04Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.14&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Если в административной панели, в модуле &amp;quot;Интернет-магазин&amp;quot;, скопилось большое количество заказов, то удалять их вручную по-одному будет довольно утомительно. Чтобы облегчить задачу, можно сделать выборку с помощью Selector, получить все заказы, у которых, к примеру, последний раз изменялся статус заказа больше года назад, и удалить эти заказы. Ниже приведен код, который это делает:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function deleteAllOrders () {		&lt;br /&gt;
	$orders = new selector(&amp;#039;objects&amp;#039;);&lt;br /&gt;
	$orders-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;name(&amp;#039;emarket&amp;#039;, &amp;#039;order&amp;#039;);&lt;br /&gt;
	$time = 1461888000; // 29.4.2016&lt;br /&gt;
	$orders-&amp;gt;where(&amp;#039;status_change_date&amp;#039;)-&amp;gt;eqless($time);&lt;br /&gt;
	$umiObjects = umiObjectsCollection::getInstance();&lt;br /&gt;
&lt;br /&gt;
	foreach ($orders as $order) {&lt;br /&gt;
		$id = $order-&amp;gt;getId();&lt;br /&gt;
		$umiObjects-&amp;gt;delObject($id);&lt;br /&gt;
		echo &amp;quot;удален заказ $id&amp;lt;br&amp;gt;&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разместите данный код в файле classes/modules/custom.php  после строки //TODO: Write your own macroses here.&lt;br /&gt;
&lt;br /&gt;
В переменную &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$time = 1328021732;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
мы передаем дату, с которой будем сравнивать дату изменения статуса заказа (т.е. если дата последнего изменения статуса заказа старше чем эта - заказ будет удален). В данный момент это 31 января 2012 года, вы можете установить сюда свое значение, воспользовавшись Unixtime конвертером. Данный конвертер можно найти в свободном доступе в интернете - например, здесь http://www.cy-pr.com/tools/time/&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B5_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%BE-%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5(tpl)&amp;diff=8030</id>
		<title>Добавление информации о заказе в письмо-уведомление(tpl)</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BE_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B5_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%BE-%D1%83%D0%B2%D0%B5%D0%B4%D0%BE%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5(tpl)&amp;diff=8030"/>
		<updated>2016-08-19T12:00:48Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Необходимо добавить в письмо, которое приходит клиенту и администратору сайта информацию о заказе.&lt;br /&gt;
&lt;br /&gt;
Задача решается на примере шаблона demoold (классический интернет магазин, версия 2.8.6).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Решение. Для реализации поставленной задачи нужно отредактировать шаблон, по которому формируется письмо-уведомление о заказе:&lt;br /&gt;
/tpls/emarket/mail/default.tpl&lt;br /&gt;
&lt;br /&gt;
в данный шаблон после всех трех блоков $FORMS&lt;br /&gt;
&lt;br /&gt;
добавляем макрос:&lt;br /&gt;
&lt;br /&gt;
%emarket order(%order_id%,&amp;#039;mail&amp;#039;)%[http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/internetmagazin/emarket_order/]&lt;br /&gt;
&lt;br /&gt;
Который возвращает информацию о заказе по шаблону mail.tpl, который должен лежать&lt;br /&gt;
&lt;br /&gt;
в &lt;br /&gt;
&amp;lt;ul&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;/tpls/emarket/customer/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;li&amp;gt;/tpls/ematket/&amp;lt;/li&amp;gt;&lt;br /&gt;
&amp;lt;/ul&amp;gt;&lt;br /&gt;
Теперь осталось сверстать данный шаблон, за основу можно взять шаблон /tpls/emarket/default.tpl.&lt;br /&gt;
&lt;br /&gt;
Если же Вам нужно будет добавить в шаблон дополнительные поля, которых нет на первом шаге оформления заказа(например адрес), Вам будет необходимо использовать макрос:&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
%data getPropertyGroupOfObject(%delivery_address%,&amp;#039;common&amp;#039;)%[http://dev.docs.umi-cms.ru/spravochnik_makrosov_umicms/shablony_dannyh/data_getpropertygroupofobject/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что изначально система пытается брать информацию из шаблона в папке /xslt/mail/emarket/default.xsl . Чтобы начал подгружаться Ваш tpl-шаблон, необходимо сначала закомментировать указанный файл default.xsl .&lt;br /&gt;
&lt;br /&gt;
[[Категория:Верстка в TPL]][[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=Phpinfo&amp;diff=8019</id>
		<title>Phpinfo</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=Phpinfo&amp;diff=8019"/>
		<updated>2016-06-01T10:54:46Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Phpinfo&amp;#039;&amp;#039;&amp;#039; - это php-скрипт, имеющий следующее содержание &lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php phpinfo(); ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Результатом работы этого скрипта является подробная информация о конфигурации PHP, установленном на сервере. Достаточно создать файл с названием &amp;#039;&amp;#039;&amp;#039;phpinfo.php&amp;#039;&amp;#039;&amp;#039;, и разместить данный файл в корневой папке системы. Внутри файла следует поместить указанное выше содержание, и после этого вызвать файл, набрав в адресной строке браузера &amp;#039;&amp;#039;&amp;#039;адрес_вашего_сайта/phpinfo.php&amp;#039;&amp;#039;&amp;#039; .&lt;br /&gt;
&lt;br /&gt;
В phpinfo должен присутствовать блок &amp;#039;&amp;#039;&amp;#039;mysql&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В переменной &amp;#039;&amp;#039;&amp;#039;session.save_path&amp;#039;&amp;#039;&amp;#039; должен быть прописан путь до каталога, в котором будут хранится сессии.&lt;br /&gt;
&lt;br /&gt;
Для решения проблем с закачкой фалов могут помочь следующие переменные:&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;max_execution_time&amp;#039;&amp;#039;&amp;#039; - максимальное время выполнение скрипта в секундах&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;memory_limit&amp;#039;&amp;#039;&amp;#039; - количество памяти, выделяемой под скрипты, в Mb&lt;br /&gt;
* &amp;#039;&amp;#039;&amp;#039;upload_max_filesize&amp;#039;&amp;#039;&amp;#039; - Максимальный размер файла для загрузки.&lt;br /&gt;
&lt;br /&gt;
Для решения проблем с [[Лицензионный ключ|лицензионным ключом]] типа [[Old Free]] пригодится переменная SERVER_ADDR - содержимое именно этой переменной записывается в поле IP Сервера обновлений&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы установки настройки и переноса]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%B2_%D0%BE%D0%B4%D0%B8%D0%BD_%D1%88%D0%B0%D0%B3_%E2%80%93_tpl_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80&amp;diff=8011</id>
		<title>Оформление заказа в один шаг – tpl шаблонизатор</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%B2_%D0%BE%D0%B4%D0%B8%D0%BD_%D1%88%D0%B0%D0%B3_%E2%80%93_tpl_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80&amp;diff=8011"/>
		<updated>2016-04-22T11:00:19Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для 2.11&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В данной статье будет описан принцип создания формы оформления заказа за один шаг, т.е. все необходимые данные, регистрационные данные покупателя, способ доставки, способ оплаты и т.д. представлены на одной страницы. Для использования информации в данной статье версия вашей системы должна быть не ниже 2.8.4.3, иначе код не будет нормально функционировать при наличии в модуле Интернет-магазин способа доставки Курьером, и способа оплаты &amp;quot;Курьером при получении&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Нам понадобятся дополнительные php-методы для реализации данной задачи, которые необходимо добавить внутри абстрактного класса файла &amp;#039;&amp;#039;&amp;#039;classes/modules/emarket/__custom.php&amp;#039;&amp;#039;&amp;#039;, сами методы следующие:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function deliveryAddressesListCustom($template = &amp;#039;onestep&amp;#039;) {&lt;br /&gt;
	$order = $this-&amp;gt;getBasketOrder(false);&lt;br /&gt;
	list($tpl_block, $tpl_item) = def_module::loadTemplates(&lt;br /&gt;
		&amp;quot;emarket/delivery/{$template}.tpl&amp;quot;,&lt;br /&gt;
		&amp;quot;delivery_address_block&amp;quot;,&lt;br /&gt;
		&amp;quot;delivery_address_item&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	$customer  = customer::get();&lt;br /&gt;
	$addresses = $customer-&amp;gt;delivery_addresses;&lt;br /&gt;
	$items_arr = array();&lt;br /&gt;
	$currentDeliveryId = $order-&amp;gt;getValue(&amp;#039;delivery_address&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$collection = umiObjectsCollection::getInstance();&lt;br /&gt;
&lt;br /&gt;
	if (is_array($addresses)) foreach($addresses as $address) {&lt;br /&gt;
		$addressObject = $collection-&amp;gt;getObject($address);&lt;br /&gt;
&lt;br /&gt;
		$item_arr = array(&lt;br /&gt;
			&amp;#039;attribute:id&amp;#039;		=&amp;gt; $address,&lt;br /&gt;
			&amp;#039;attribute:name&amp;#039;	=&amp;gt; $addressObject-&amp;gt;name&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
		if ($address == $currentDeliveryId) $item_arr[&amp;#039;attribute:active&amp;#039;] = &amp;#039;active&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		$items_arr[] = def_module::parseTemplate($tpl_item, $item_arr, false, $address);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$types  = umiObjectTypesCollection::getInstance();&lt;br /&gt;
	$typeId = $types-&amp;gt;getBaseType(&amp;quot;emarket&amp;quot;, &amp;quot;delivery_address&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	if ($tpl_block) {&lt;br /&gt;
		return def_module::parseTemplate($tpl_block, array(&amp;#039;items&amp;#039; =&amp;gt; $items_arr, &amp;#039;type_id&amp;#039; =&amp;gt; $typeId));&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function deliveryListCustom($template = &amp;#039;onestep&amp;#039;) {&lt;br /&gt;
	$order = $this-&amp;gt;getBasketOrder(false);&lt;br /&gt;
	list($tpl_block, $tpl_item_free, $tpl_item_priced) = def_module::loadTemplates(&lt;br /&gt;
		&amp;quot;emarket/delivery/{$template}.tpl&amp;quot;,&lt;br /&gt;
		&amp;#039;delivery_block&amp;#039;,&lt;br /&gt;
		&amp;#039;delivery_item_free&amp;#039;,&lt;br /&gt;
		&amp;#039;delivery_item_priced&amp;#039;&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	if (!isset($_SESSION[&amp;#039;emarket&amp;#039;])) $_SESSION[&amp;#039;emarket&amp;#039;] = array();&lt;br /&gt;
	if (!isset($_SESSION[&amp;#039;emarket&amp;#039;][&amp;#039;delivery&amp;#039;])) $_SESSION[&amp;#039;emarket&amp;#039;][&amp;#039;delivery&amp;#039;] = array();&lt;br /&gt;
&lt;br /&gt;
	$deliveryIds = delivery::getList();&lt;br /&gt;
	$items_arr = array();&lt;br /&gt;
	$currentDeliveryId = $order-&amp;gt;getValue(&amp;#039;delivery_id&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	foreach($deliveryIds as $delivery) {&lt;br /&gt;
		$delivery = delivery::get($delivery);&lt;br /&gt;
		if ($delivery-&amp;gt;validate($order) == false) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$deliveryObject = $delivery-&amp;gt;getObject();&lt;br /&gt;
		$deliveryPrice  = $delivery-&amp;gt;getDeliveryPrice($order);&lt;br /&gt;
		$_SESSION[&amp;#039;emarket&amp;#039;][&amp;#039;delivery&amp;#039;][$delivery-&amp;gt;id] = (float)$deliveryPrice;&lt;br /&gt;
&lt;br /&gt;
		$item_arr = array(&lt;br /&gt;
			&amp;#039;attribute:id&amp;#039;		=&amp;gt; $deliveryObject-&amp;gt;id,&lt;br /&gt;
			&amp;#039;attribute:name&amp;#039;	=&amp;gt; $deliveryObject-&amp;gt;name,&lt;br /&gt;
			&amp;#039;attribute:price&amp;#039;	=&amp;gt; $deliveryPrice.&amp;#039;&amp;#039;,&lt;br /&gt;
			&amp;#039;xlink:href&amp;#039;		=&amp;gt; $deliveryObject-&amp;gt;xlink&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
		if ($delivery-&amp;gt;id == $currentDeliveryId) $item_arr[&amp;#039;attribute:active&amp;#039;] = &amp;#039;active&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		$tpl_item = $deliveryPrice ? $tpl_item_priced : $tpl_item_free;&lt;br /&gt;
		$items_arr[] = def_module::parseTemplate($tpl_item, $item_arr, false, $deliveryObject-&amp;gt;id);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ($tpl_block) {&lt;br /&gt;
		return def_module::parseTemplate($tpl_block, array(&amp;#039;items&amp;#039; =&amp;gt; $items_arr));&lt;br /&gt;
	} else {&lt;br /&gt;
		return array(&amp;#039;items&amp;#039; =&amp;gt; array(&amp;#039;nodes:item&amp;#039;	=&amp;gt; $items_arr));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function paymentsListCustom($template = &amp;#039;onestep&amp;#039;) {&lt;br /&gt;
	$order = $this-&amp;gt;getBasketOrder(false);&lt;br /&gt;
	list($tpl_block, $tpl_item) = def_module::loadTemplates(&amp;quot;emarket/payment/{$template}.tpl&amp;quot;, &amp;#039;payment_block&amp;#039;, &amp;#039;payment_item&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$payments = payment::getList();&lt;br /&gt;
	$items = array();&lt;br /&gt;
	$currentPaymentId = $order-&amp;gt;getValue(&amp;#039;payment_id&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	foreach($payments as $paymentId) {&lt;br /&gt;
		$payment = payment::get($paymentId, $order);&lt;br /&gt;
		if($payment-&amp;gt;validate($order) == false) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		$paymentObject = $payment-&amp;gt;getObject();&lt;br /&gt;
		$paymentTypeId = $paymentObject-&amp;gt;getValue(&amp;#039;payment_type_id&amp;#039;);&lt;br /&gt;
		$paymentTypeName = umiObjectsCollection::getInstance()-&amp;gt;getObject($paymentTypeId)-&amp;gt;getValue(&amp;#039;class_name&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		if($paymentTypeName == &amp;#039;social&amp;#039;) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$item = array(&lt;br /&gt;
			&amp;#039;attribute:id&amp;#039;			=&amp;gt; $paymentObject-&amp;gt;id,&lt;br /&gt;
			&amp;#039;attribute:name&amp;#039;		=&amp;gt; $paymentObject-&amp;gt;name,&lt;br /&gt;
			&amp;#039;attribute:type-name&amp;#039;	=&amp;gt; $paymentTypeName,&lt;br /&gt;
			&amp;#039;xlink:href&amp;#039;			=&amp;gt; $paymentObject-&amp;gt;xlink&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
		if($paymentId == $currentPaymentId) {&lt;br /&gt;
			$item[&amp;#039;attribute:active&amp;#039;] = &amp;#039;active&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$items[] = def_module::parseTemplate($tpl_item, $item, false, $paymentObject-&amp;gt;id);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if($tpl_block &amp;amp;&amp;amp; !def_module::isXSLTResultMode()) {&lt;br /&gt;
		return def_module::parseTemplate($tpl_block, array(&amp;#039;items&amp;#039; =&amp;gt; $items));&lt;br /&gt;
	} else {&lt;br /&gt;
		return array(&amp;#039;items&amp;#039; =&amp;gt; array(&amp;#039;nodes:item&amp;#039;	=&amp;gt; $items));&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function personalInfoCustom($template = &amp;#039;onestep&amp;#039;) {&lt;br /&gt;
	if (!permissionsCollection::getInstance()-&amp;gt;isAuth()){&lt;br /&gt;
		$customerId = customer::get()-&amp;gt;id;&lt;br /&gt;
		$cmsController = cmsController::getInstance();&lt;br /&gt;
		$data = $cmsController-&amp;gt;getModule(&amp;#039;data&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		return $data-&amp;gt;getEditForm($customerId, $template);&lt;br /&gt;
	} else return &amp;#039;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function saveInfoCustom(){&lt;br /&gt;
	$order = $this-&amp;gt;getBasketOrder(false);&lt;br /&gt;
&lt;br /&gt;
	//сохранение регистрационных данных&lt;br /&gt;
	$cmsController = cmsController::getInstance();&lt;br /&gt;
	$data = $cmsController-&amp;gt;getModule(&amp;#039;data&amp;#039;);&lt;br /&gt;
	$data-&amp;gt;saveEditedObject(customer::get()-&amp;gt;id, false, true);&lt;br /&gt;
&lt;br /&gt;
	//сохранение адреса доставки&lt;br /&gt;
	$addressId = getRequest(&amp;#039;delivery-address&amp;#039;);&lt;br /&gt;
	if ($addressId == &amp;#039;new&amp;#039;) {&lt;br /&gt;
		$collection = umiObjectsCollection::getInstance();&lt;br /&gt;
		$types      = umiObjectTypesCollection::getInstance();&lt;br /&gt;
		$typeId     = $types-&amp;gt;getBaseType(&amp;quot;emarket&amp;quot;, &amp;quot;delivery_address&amp;quot;);&lt;br /&gt;
		$customer   = customer::get();&lt;br /&gt;
		$addressId  = $collection-&amp;gt;addObject(&amp;quot;Address for customer #&amp;quot;.$customer-&amp;gt;id, $typeId);&lt;br /&gt;
		$dataModule = $cmsController-&amp;gt;getModule(&amp;quot;data&amp;quot;);&lt;br /&gt;
		if ($dataModule) {&lt;br /&gt;
			if (!$dataModule-&amp;gt;saveEditedObject($addressId, true, true)) {&lt;br /&gt;
				$dataModule-&amp;gt;saveEditedObjectWithIgnorePermissions($addressId, true, true); // начиная с версии 2.9.5&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		$customer-&amp;gt;delivery_addresses = array_merge( $customer-&amp;gt;delivery_addresses, array($addressId) );&lt;br /&gt;
	}&lt;br /&gt;
	$order-&amp;gt;delivery_address = $addressId;&lt;br /&gt;
&lt;br /&gt;
	//сохранение способа доставки&lt;br /&gt;
	$deliveryId = getRequest(&amp;#039;delivery-id&amp;#039;);&lt;br /&gt;
	if ($deliveryId){&lt;br /&gt;
		$delivery = delivery::get($deliveryId);&lt;br /&gt;
		$deliveryPrice = (float) $delivery-&amp;gt;getDeliveryPrice($order);&lt;br /&gt;
		$order-&amp;gt;setValue(&amp;#039;delivery_id&amp;#039;, $deliveryId);&lt;br /&gt;
		$order-&amp;gt;setValue(&amp;#039;delivery_price&amp;#039;, $deliveryPrice);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//сохранение способа оплаты и редирект на итоговую страницу&lt;br /&gt;
	$order-&amp;gt;setValue(&amp;#039;payment_id&amp;#039;, getRequest(&amp;#039;payment-id&amp;#039;));&lt;br /&gt;
&lt;br /&gt;
	$order-&amp;gt;refresh();&lt;br /&gt;
&lt;br /&gt;
	$paymentId = getRequest(&amp;#039;payment-id&amp;#039;);&lt;br /&gt;
	if (!$paymentId) {&lt;br /&gt;
		$this-&amp;gt;errorNewMessage(getLabel(&amp;#039;error-emarket-choose-payment&amp;#039;));&lt;br /&gt;
		$this-&amp;gt;errorPanic();&lt;br /&gt;
	}&lt;br /&gt;
	$payment = payment::get($paymentId, $order);&lt;br /&gt;
&lt;br /&gt;
	if ($payment instanceof payment) {&lt;br /&gt;
		$paymentName = $payment-&amp;gt;getCodeName();&lt;br /&gt;
		$url = &amp;quot;{$this-&amp;gt;pre_lang}/&amp;quot;.cmsController::getInstance()-&amp;gt;getUrlPrefix().&amp;quot;emarket/purchase/payment/{$paymentName}/&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
		$url = &amp;quot;{$this-&amp;gt;pre_lang}/&amp;quot;.cmsController::getInstance()-&amp;gt;getUrlPrefix().&amp;quot;emarket/cart/&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	$this-&amp;gt;redirect($url);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
также в папку &amp;#039;&amp;#039;&amp;#039;classes/modules/emarket/&amp;#039;&amp;#039;&amp;#039; необходимо добавить файл &amp;#039;&amp;#039;&amp;#039;permissions.custom.php&amp;#039;&amp;#039;&amp;#039; следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$permissions = array(&amp;#039;purchasing&amp;#039; =&amp;gt; array(&amp;#039;deliveryListCustom&amp;#039;, &amp;#039;deliveryAddressesListCustom&amp;#039;, &amp;#039;paymentsListCustom&amp;#039;, &amp;#039;personalInfoCustom&amp;#039;, &amp;#039;saveInfoCustom&amp;#039;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо создать шаблон &amp;#039;&amp;#039;&amp;#039;tpls/emarket/delivery/onestep.tpl&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$FORMS = Array();&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;h3 class=&amp;quot;dost&amp;quot;&amp;gt;Выберите подходящий вам способ доставки:&amp;lt;/h3&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		%items%&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_item_free&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;delivery-id&amp;quot; value=&amp;quot;%id%&amp;quot; checked=&amp;quot;checked&amp;quot; /&amp;gt; %name% - бесплатно&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_item_priced&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;delivery-id&amp;quot; value=&amp;quot;%id%&amp;quot; /&amp;gt; %name% - %price%&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_address_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;div class=&amp;quot;adrest&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;h3 class=&amp;quot;dost&amp;quot;&amp;gt;Выберите подходящий вам адрес доставки:&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
			%items%&lt;br /&gt;
			&amp;lt;li&amp;gt;&lt;br /&gt;
				&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;delivery-address&amp;quot; value=&amp;quot;new&amp;quot; /&amp;gt; &amp;lt;b&amp;gt;Новый адрес доставки:&amp;lt;/b&amp;gt;&lt;br /&gt;
				&amp;lt;table cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
					%data getCreateForm(Здесь нужно подставить ид типа данных &amp;quot;Адрес доставки&amp;quot;, &amp;#039;onestep&amp;#039;)%&lt;br /&gt;
				&amp;lt;/table&amp;gt;&lt;br /&gt;
			&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_address_item&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;delivery-address&amp;quot; value=&amp;quot;%id%&amp;quot; /&amp;gt;%index%, %city%, %street%, д. %house%, кв. %flat%&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В макросе &amp;#039;&amp;#039;&amp;#039;data getCreateForm()&amp;#039;&amp;#039;&amp;#039;, первый параметр - это id типа данных &amp;quot;Адрес доставки&amp;quot; в модуле &amp;quot;Шаблоны данных&amp;quot;, первая вкладка, раздел &amp;quot;Справочники&amp;quot;, этот id вы должны для вашей системы определить самостоятельно и подставить в макрос data getCreateForm().&lt;br /&gt;
&lt;br /&gt;
Шаблон &amp;#039;&amp;#039;&amp;#039;tpls/emarket/payment/onestep.tpl&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$FORMS = Array();&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;payment_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	Выберите подходящий вам способ оплаты:&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		%items%&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;payment_item&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;payment-id&amp;quot; value=&amp;quot;%id%&amp;quot; /&amp;gt; %name%&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаблон &amp;#039;&amp;#039;&amp;#039;tpls/data/reflection/onestep.tpl&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$FORMS = Array();&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
%groups%&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_group&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;br/&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;b&amp;gt;%title%&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	%fields%&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_string&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			%title%%required_asteriks%:&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;%input_name%&amp;quot; value=&amp;quot;%value%&amp;quot; class=&amp;quot;textinputs&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_text&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			%title%%required_asteriks%:&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			&amp;lt;textarea name=&amp;quot;%input_name%&amp;quot; class=&amp;quot;textinputs&amp;quot;&amp;gt;%value%&amp;lt;/textarea&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_int&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			%title%%required_asteriks%:&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;%input_name%&amp;quot; value=&amp;quot;%value%&amp;quot; class=&amp;quot;textinputs&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_relation&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			%title%%required_asteriks%:&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			&amp;lt;select name=&amp;quot;%input_name%&amp;quot; style=&amp;quot;width: 205px&amp;quot; class=&amp;quot;textinputs&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;option /&amp;gt;&lt;br /&gt;
				%options%&lt;br /&gt;
			&amp;lt;/select&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_relation_option&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;option value=&amp;quot;%id%&amp;quot;&amp;gt;%name%&amp;lt;/option&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_relation_option_a&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;option value=&amp;quot;%id%&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;%name%&amp;lt;/option&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В шаблоне &amp;#039;&amp;#039;&amp;#039;tpls/emarket/default.tpl&amp;#039;&amp;#039;&amp;#039;, в блоке &amp;#039;&amp;#039;&amp;#039;order_block&amp;#039;&amp;#039;&amp;#039;, форма должна быть примерно следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;%pre_lang%/emarket/saveInfoCustom/&amp;quot;&amp;gt;&lt;br /&gt;
	%emarket deliveryListCustom(&amp;#039;onestep&amp;#039;)%&lt;br /&gt;
	%emarket deliveryAddressesListCustom(&amp;#039;onestep&amp;#039;)%&lt;br /&gt;
	&amp;lt;table cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;br/&amp;gt;&lt;br /&gt;
	%emarket paymentsListCustom(&amp;#039;onestep&amp;#039;)%&lt;br /&gt;
	&amp;lt;br/&amp;gt;&lt;br /&gt;
	&amp;lt;table cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
		%emarket personalInfoCustom(&amp;#039;onestep&amp;#039;)%&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;br/&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Оформить заказ&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Написание кастомных макросов]][[Категория:Верстка в TPL]]&lt;br /&gt;
[[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%90%D1%83%D0%B4%D0%B8%D1%82_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=8010</id>
		<title>Аудит безопасности системы</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%90%D1%83%D0%B4%D0%B8%D1%82_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=8010"/>
		<updated>2016-04-07T12:16:31Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Модуль Конфигурация]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.5&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В закладке &amp;quot;Безопасность&amp;quot; модуля &amp;quot;Конфигурация&amp;quot; есть инструмент проверки безопасности системы. Данный раздел проверяет насколько защищенная система и позволяет отслеживать доступ обычных пользователей к наиболее важным средствам работы с системой и сайтом в целом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так как в официальной документации находиться только описание каждого пункта но не оговаривается какие именно проверяются данные и где берется информация для теста мы рассмотрим их поподробнее, что бы можно было настроить все пункты на успешное прохождение теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. &amp;#039;&amp;#039;&amp;#039;Протокол UFS закрыт&amp;#039;&amp;#039;&amp;#039; - данный пункт проверяет на наличие в файле &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039; разрешения использовать через адресную строку протокол &amp;#039;&amp;#039;&amp;#039;UFS&amp;#039;&amp;#039;&amp;#039;. Данное разрешение прописывается строкой &amp;#039;&amp;#039;ufs.http.allow = &amp;#039;&amp;#039; в секции &amp;#039;&amp;#039;[streams]&amp;#039;&amp;#039;. Для удачного прохождения теста необходимо что бы ее значение было равно &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. &amp;#039;&amp;#039;&amp;#039;Протокол UObject закрыт&amp;#039;&amp;#039;&amp;#039; - данный пункт проверяет на наличие в файле &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039; разрешения использовать через адресную строку протокол &amp;#039;&amp;#039;&amp;#039;UObject&amp;#039;&amp;#039;&amp;#039;. Данное разрешение прописывается строкой &amp;#039;&amp;#039;&amp;quot;uobject.http.allow = &amp;quot;&amp;#039;&amp;#039; в секции &amp;#039;&amp;#039;[streams]&amp;#039;&amp;#039;. Для удачного прохождения теста необходимо что бы ее значение было равно &amp;#039;&amp;#039;&amp;quot;0&amp;quot;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. &amp;#039;&amp;#039;&amp;#039;Подключение к БД не под root-ом&amp;#039;&amp;#039;&amp;#039; - здесь проверяется какой логин используется для подключение к базе данных MySQL, стандартно у каждой базы данных есть главный пользователь который может полностью ей управлять, его логин &amp;#039;&amp;#039;root&amp;#039;&amp;#039;, но так как для работы сайта достаточно одной базы данных то создается отдельный пользователь со своими логином и паролем который может управлять только одной базой данных на сервере. Проверка делается по файлу &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039;, где в секции &amp;#039;&amp;#039;[connections]&amp;#039;&amp;#039; указываются данные для подключения к базе данных. Для успешного прохождения теста необходимо, что бы значение поля &amp;#039;&amp;#039;&amp;quot;login=&amp;quot;&amp;#039;&amp;#039; было отличным от значения &amp;#039;&amp;#039;root&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &amp;#039;&amp;#039;&amp;#039;Пароль для БД не пустой&amp;#039;&amp;#039;&amp;#039; - как можно понять из названия тут проверяется та же секция &amp;#039;&amp;#039;[connections]&amp;#039;&amp;#039; файла &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039;, где поле &amp;#039;&amp;#039;&amp;quot;password=&amp;quot;&amp;#039;&amp;#039; обязательно должно иметь какое либо значение кроме &amp;#039;&amp;#039;&amp;quot;&amp;quot;&amp;#039;&amp;#039;, то есть что бы был указан обязательно пароль для подключения к базе данных MySQL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. &amp;#039;&amp;#039;&amp;#039;Доступ к файлу конфигурации закрыт&amp;#039;&amp;#039;&amp;#039; - в данном пункте проверяется доступность файла &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039; через адресную строку браузера. То есть если файл &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039; можно открыть введя в адресной строке браузера &amp;#039;&amp;#039;http://domain.ru/config.ini&amp;#039;&amp;#039;, значит тест будет провален. Для успешного прохождения данного теста в файле &amp;#039;&amp;#039;&amp;quot;.htaccess&amp;quot;&amp;#039;&amp;#039; предусмотренно правило &amp;#039;&amp;#039;&amp;quot;RewriteRule ^config\.ini$ / [L,R]&amp;quot;&amp;#039;&amp;#039;, если этого правила нет или оно &amp;quot;закомментировано&amp;quot; (то есть перед строкой стоит символ &amp;quot;#&amp;quot;), то необходимо либо добавить эту строку перед строкой &amp;#039;&amp;#039;&amp;quot;RewriteRule ^install\.ini$ / [L,R]&amp;quot;&amp;#039;&amp;#039;, либо раскомментировать (то есть удалить символ &amp;quot;#&amp;quot; перед строкой).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. &amp;#039;&amp;#039;&amp;#039;Доступ к системным папкам закрыт&amp;#039;&amp;#039;&amp;#039; - в данном тесте система проверяет запрос к папке &amp;#039;&amp;#039;/classes&amp;#039;&amp;#039; через адресную строку браузера. Что бы тест прошел удачно необходимо в ответ присылать системе либо 403 ошибку сервера, либо ничего не должно приходить вообще. Стандартно это делается добавлением файла &amp;#039;&amp;#039;&amp;quot;.htaccess&amp;quot;&amp;#039;&amp;#039; в папку &amp;#039;&amp;#039;/classes&amp;#039;&amp;#039;. В самом файле находиться одна строка &amp;#039;&amp;#039;Deny from all&amp;#039;&amp;#039; которая закрывает всем доступ к этой папке через браузер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. &amp;#039;&amp;#039;&amp;#039;Выполнение php скриптов в /files/&amp;#039;&amp;#039;&amp;#039; - данный тест проверяет выполняются ли &amp;#039;&amp;#039;&amp;quot;.php&amp;quot;&amp;#039;&amp;#039; скрипты из папки &amp;#039;&amp;#039;/files/&amp;#039;&amp;#039;. Стандартно исполнение скриптов в папке &amp;#039;&amp;#039;/files/&amp;#039;&amp;#039; закрывается. Для того что бы тест проходил удачно необходимо наличие в папке &amp;#039;&amp;#039;/files/&amp;#039;&amp;#039; файла &amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039; где должна быть прописана строка &amp;#039;&amp;#039;php_flag engine off&amp;#039;&amp;#039; которая запрещает работу php-скриптов в папке и вложенных папках рекурсивно. Если же пройти данный тест не удается, хотя необходимый файл &amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039; есть - тогда нужно добавить в &amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039; следующий код:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RemoveHandler .php&lt;br /&gt;
RemoveType .php&lt;br /&gt;
AddType application/x-httpd-php-source .php&lt;br /&gt;
Options -ExecCGI -Indexes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. &amp;#039;&amp;#039;&amp;#039;Доступ к файлу php_for_del_connector.php&amp;#039;&amp;#039;&amp;#039; - данным тестом проверяется доступность системного файла &amp;#039;&amp;#039;php_for_del_connector.php&amp;#039;&amp;#039; в папке &amp;#039;&amp;#039;/styles/common/other/elfinder/php/&amp;#039;&amp;#039;. Тест проходит удачно при наличии в данной папке файла &amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039; в котором присутствует строка &amp;#039;&amp;#039;Deny from all&amp;#039;&amp;#039;.&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%90%D1%83%D0%B4%D0%B8%D1%82_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=8009</id>
		<title>Аудит безопасности системы</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%90%D1%83%D0%B4%D0%B8%D1%82_%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B&amp;diff=8009"/>
		<updated>2016-04-07T12:15:20Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Модуль Конфигурация]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.5&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В закладке &amp;quot;Безопасность&amp;quot; модуля &amp;quot;Конфигурация&amp;quot; есть инструмент проверки безопасности системы. Данный раздел проверяет насколько защищенная система и позволяет отслеживать доступ обычных пользователей к наиболее важным средствам работы с системой и сайтом в целом.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Так как в официальной документации находиться только описание каждого пункта но не оговаривается какие именно проверяются данные и где берется информация для теста мы рассмотрим их поподробнее, что бы можно было настроить все пункты на успешное прохождение теста.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1. &amp;#039;&amp;#039;&amp;#039;Протокол UFS закрыт&amp;#039;&amp;#039;&amp;#039; - данный пункт проверяет на наличие в файле &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039; разрешения использовать через адресную строку протокол &amp;#039;&amp;#039;&amp;#039;UFS&amp;#039;&amp;#039;&amp;#039;. Данное разрешение прописывается строкой &amp;#039;&amp;#039;ufs.http.allow = &amp;#039;&amp;#039; в секции &amp;#039;&amp;#039;[streams]&amp;#039;&amp;#039;. Для удачного прохождения теста необходимо что бы ее значение было равно &amp;quot;0&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2. &amp;#039;&amp;#039;&amp;#039;Протокол UObject закрыт&amp;#039;&amp;#039;&amp;#039; - данный пункт проверяет на наличие в файле &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039; разрешения использовать через адресную строку протокол &amp;#039;&amp;#039;&amp;#039;UObject&amp;#039;&amp;#039;&amp;#039;. Данное разрешение прописывается строкой &amp;#039;&amp;#039;&amp;quot;uobject.http.allow = &amp;quot;&amp;#039;&amp;#039; в секции &amp;#039;&amp;#039;[streams]&amp;#039;&amp;#039;. Для удачного прохождения теста необходимо что бы ее значение было равно &amp;#039;&amp;#039;&amp;quot;0&amp;quot;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3. &amp;#039;&amp;#039;&amp;#039;Подключение к БД не под root-ом&amp;#039;&amp;#039;&amp;#039; - здесь проверяется какой логин используется для подключение к базе данных MySQL, стандартно у каждой базы данных есть главный пользователь который может полностью ей управлять, его логин &amp;#039;&amp;#039;root&amp;#039;&amp;#039;, но так как для работы сайта достаточно одной базы данных то создается отдельный пользователь со своими логином и паролем который может управлять только одной базой данных на сервере. Проверка делается по файлу &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039;, где в секции &amp;#039;&amp;#039;[connections]&amp;#039;&amp;#039; указываются данные для подключения к базе данных. Для успешного прохождения теста необходимо, что бы значение поля &amp;#039;&amp;#039;&amp;quot;login=&amp;quot;&amp;#039;&amp;#039; было отличным от значения &amp;#039;&amp;#039;root&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4. &amp;#039;&amp;#039;&amp;#039;Пароль для БД не пустой&amp;#039;&amp;#039;&amp;#039; - как можно понять из названия тут проверяется та же секция &amp;#039;&amp;#039;[connections]&amp;#039;&amp;#039; файла &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039;, где поле &amp;#039;&amp;#039;&amp;quot;password=&amp;quot;&amp;#039;&amp;#039; обязательно должно иметь какое либо значение кроме &amp;#039;&amp;#039;&amp;quot;&amp;quot;&amp;#039;&amp;#039;, то есть что бы был указан обязательно пароль для подключения к базе данных MySQL.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5. &amp;#039;&amp;#039;&amp;#039;Доступ к файлу конфигурации закрыт&amp;#039;&amp;#039;&amp;#039; - в данном пункте проверяется доступность файла &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039; через адресную строку браузера. То есть если файл &amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039; можно открыть введя в адресной строке браузера &amp;#039;&amp;#039;http://domain.ru/config.ini&amp;#039;&amp;#039;, значит тест будет провален. Для успешного прохождения данного теста в файле &amp;#039;&amp;#039;&amp;quot;.htaccess&amp;quot;&amp;#039;&amp;#039; предусмотренно правило &amp;#039;&amp;#039;&amp;quot;RewriteRule ^config\.ini$ / [L,R]&amp;quot;&amp;#039;&amp;#039;, если этого правила нет или оно &amp;quot;закомментировано&amp;quot; (то есть перед строкой стоит символ &amp;quot;#&amp;quot;), то необходимо либо добавить эту строку перед строкой &amp;#039;&amp;#039;&amp;quot;RewriteRule ^install\.ini$ / [L,R]&amp;quot;&amp;#039;&amp;#039;, либо раскомментировать (то есть удалить символ &amp;quot;#&amp;quot; перед строкой).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6. &amp;#039;&amp;#039;&amp;#039;Доступ к системным папкам закрыт&amp;#039;&amp;#039;&amp;#039; - в данном тесте система проверяет запрос к папке &amp;#039;&amp;#039;/classes&amp;#039;&amp;#039; через адресную строку браузера. Что бы тест прошел удачно необходимо в ответ присылать системе либо 403 ошибку сервера, либо ничего не должно приходить вообще. Стандартно это делается добавлением файла &amp;#039;&amp;#039;&amp;quot;.htaccess&amp;quot;&amp;#039;&amp;#039; в папку &amp;#039;&amp;#039;/classes&amp;#039;&amp;#039;. В самом файле находиться одна строка &amp;#039;&amp;#039;Deny from all&amp;#039;&amp;#039; которая закрывает всем доступ к этой папке через браузер.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
7. &amp;#039;&amp;#039;&amp;#039;Выполнение php скриптов в /files/&amp;#039;&amp;#039;&amp;#039; - данный тест проверяет выполняются ли &amp;lt;tt&amp;gt;&amp;quot;.php&amp;quot;&amp;lt;/tt&amp;gt; скрипты из папки &amp;lt;tt&amp;gt;/files/&amp;lt;/tt&amp;gt;. Стандартно исполнение скриптов в папке &amp;lt;tt&amp;gt;/files/&amp;lt;/tt&amp;gt; закрывается. Для того что бы тест проходил удачно необходимо наличие в папке &amp;lt;tt&amp;gt;/files/&amp;lt;/tt&amp;gt; файла &amp;lt;tt&amp;gt;.htaccess&amp;lt;/tt&amp;gt; где должна быть прописана строка &amp;lt;tt&amp;gt;php_flag engine off&amp;lt;/tt&amp;gt; которая запрещает работу php-скриптов в папке и вложенных папках рекурсивно. Если же пройти данный тест не удается, хотя необходимый файл &amp;lt;tt&amp;gt;.htaccess&amp;lt;/tt&amp;gt; есть - тогда нужно добавить в &amp;lt;tt&amp;gt;.htaccess&amp;lt;/tt&amp;gt; следующий код:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
RemoveHandler .php&lt;br /&gt;
RemoveType .php&lt;br /&gt;
AddType application/x-httpd-php-source .php&lt;br /&gt;
Options -ExecCGI -Indexes &amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
8. &amp;#039;&amp;#039;&amp;#039;Доступ к файлу php_for_del_connector.php&amp;#039;&amp;#039;&amp;#039; - данным тестом проверяется доступность системного файла &amp;#039;&amp;#039;php_for_del_connector.php&amp;#039;&amp;#039; в папке &amp;#039;&amp;#039;/styles/common/other/elfinder/php/&amp;#039;&amp;#039;. Тест проходит удачно при наличии в данной папке файла &amp;#039;&amp;#039;.htaccess&amp;#039;&amp;#039; в котором присутствует строка &amp;#039;&amp;#039;Deny from all&amp;#039;&amp;#039;.&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D1%8C&amp;diff=8008</id>
		<title>Мультисайтовость</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D1%8C&amp;diff=8008"/>
		<updated>2016-03-29T11:33:29Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Система UMI.CMS поддерживает мультидоменность. Что это значит? Это значит, что под управлением одной системы UMI.CMS может работать сразу несколько сайтов на разных доменах*, что особенно удобно при организации бизнес порталов, много язычных сайтов, расположенных в разных доменных зонах, или больших интернет магазинов. Кроме того, Вы получаете единый центр управления всеми сайтами, а гибкая система настройки прав пользователей, позволяет назначить каждому порталу своих, независимых, контент менеджеров. Не менее важным преимуществом является возможность использования, на этапах разработки и сопровождения, общего программного кода (шаблонов дизайна и шаблонов макросов) и материалов, централизованное обновление и разработка дополнительного кастомного функционала.&lt;br /&gt;
Как организовать мультидоменность на UMI.CMS? Очень просто!&lt;br /&gt;
# 	Для начала, необходимо зарегистрировать новый домен. &lt;br /&gt;
# 	В &amp;#039;&amp;#039;&amp;#039;панели управления доменом&amp;#039;&amp;#039;&amp;#039; прописываете Name Server (NS) хостинга. Обратите внимание, что должен быть прописан NS того хостинга, на котором уже установлена и работает система UMI.CMS**&lt;br /&gt;
# 	В &amp;#039;&amp;#039;&amp;#039;панели управления хостингом&amp;#039;&amp;#039;&amp;#039; прописываете, чтобы сервер, при запросе нового домена, &amp;quot;смотрел&amp;quot; в ту же папку, где уже стоит и работает UMI.CMS. Другими словами - делаете новый домен зеркалом уже работающего(т.е. новый домен делаете алиасом уже работающего).&lt;br /&gt;
# 	Заходите в административную панель системы UMI.CMS и, в модуле &amp;quot;Конфигурация&amp;quot;, на вкладке &amp;quot;Домены&amp;quot;, прописываете новый домен***. Можно прописывать как с “www” так и без “www”. Нажмите «Сохранить».****&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
С этого момента, система будет считать, что на ней установлено и работает уже два домена. В этом можно убедиться, если перейти в модуль «Структура». Под корневым деревом основного домена, появилось новое дерево структуры, с названием домена, который Вы только что создали. Система сама будет решать, какой контент необходимо возвращать.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Вернитесь в модуль «Конфигурация» вкладка «Домены». Рядом с записью нового домена, после того, как Вы сохраняли изменения, в пункте 4, появилась иконка редактирования. Нажмите на неё. Откроется раздел, в котором Вы можете дописать зеркала, для только что созданного домена. К примеру, если Вы решили дописать на предыдущей странице домен без «www» то здесь можно указать с “www”. Это необходимо, чтобы Ваша страница открывалась на запрос в адресной строке браузера как вида &amp;#039;&amp;#039;www.my-site.com&amp;#039;&amp;#039; так и &amp;#039;&amp;#039;my-site.com&amp;#039;&amp;#039;. Так же, Вы можете указать здесь другие домены, которые являются зеркалом только что добавленного Вами домена.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;em&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; При условии соблюдения лицензионного соглашения, скачать и ознакомитьс с которым Вы можете здесь  http://www.umi-cms.ru/buy/licence_agreement/ &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;Заметим, что, на момент написания этой статьи, редакции Free, Start и Shop не поддерживают возможность мультидоменности.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;***&amp;lt;/nowiki&amp;gt; Если Вам необходимо сменить привязку Вашего лицензионного ключа с одного домена, зарегестрированного в системе UMI.CMS, на другой, то Вам необходимо ознакомиться со следующей статьёй http://wiki.umisoft.ru/Переактивация&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;****&amp;lt;/nowiki&amp;gt; Более подробное описание модуля «Конфигурация», и вкладки «Домены» в том числе, Вы можете найти здесь http://help.umi-cms.ru/&amp;lt;br/&amp;gt;&amp;lt;/em&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Обратите внимание!!!&amp;lt;/b&amp;gt; Все домены должны располагаться на одном хостинге аккаунте и одном IP. (http://www.umi-cms.ru/buy/licence_agreement/).&lt;br /&gt;
&lt;br /&gt;
При подключении кириллических доменов, необходимо использовать информацию в данной статье: [[Подключение кириллических доменов рф]]&lt;br /&gt;
[[Категория:Вопросы установки настройки и переноса]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82&amp;diff=8007</id>
		<title>Редирект</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B5%D0%B4%D0%B8%D1%80%D0%B5%D0%BA%D1%82&amp;diff=8007"/>
		<updated>2016-03-17T07:59:09Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Для создания перенаправления пользователя существует множество способов, некоторые из них легко применить и в UMI.CMS. Ниже приведем некоторые примеры:&amp;lt;br /&amp;gt;&lt;br /&gt;
Самый основной способ создания перенаправления, это добавление записи в Базу данных в таблицу cms3_redirects.&amp;lt;br /&amp;gt;&lt;br /&gt;
В таблице вам следует заполнить три поля:&amp;lt;br /&amp;gt;&lt;br /&gt;
1. source - относительный адрес откуда производить перенаправление.&amp;lt;br /&amp;gt;&lt;br /&gt;
2. target - соответственно куда.&amp;lt;br /&amp;gt;&lt;br /&gt;
3. status - с каким статусом. Если вы не знаете какой вам нужен, используйте 301.&amp;lt;br /&amp;gt;&lt;br /&gt;
Так же можно воспользоваться статьей [[Redirect_в_системе,_перенос_сайта_на_umi.cms,_ч.1]] и написать себе скрипт для удобства.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Помимо этого в системе есть предназначенный для той же цели макрос %content redirect(&amp;#039;http://www.umi-cms.ru&amp;#039;)%. Его можно использовать в шаблонах или непосредственно в контенте определенной страницы.&amp;lt;br /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В добавок к стандартным для UMI.CMS способам, есть стандартные HTML средства. Следующий meta тег, позволяет произвести необходимое перенаправление, но использоваться он может только в секции HEAD, HMTL документа. Атрибут CONTENT позволяет перенаправить на указанную после URL= страницу, а первое значение обозначает задержку в секундах.&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;META HTTP-EQUIV=&amp;quot;REFRESH&amp;quot; CONTENT=&amp;quot;5; URL=http://ya.ru&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
На этом изобилие способов ещё не кончается. Так же мы можем использовать JavaScript или файл дополнительной настройки сервера .htaccess.&amp;lt;br /&amp;gt;&lt;br /&gt;
В первом, скрипт для перенаправления может быть записан как минимум четырьмя способами:&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
#1:&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    location=&amp;quot;http://www.newdomain.com&amp;quot;;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
#2:&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    document.location.href=&amp;quot;http://www.newdomain.com&amp;quot;;&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
#3:&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    window.location.reload(&amp;quot;http://www.newdomain.com&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
#4:&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    document.location.replace(&amp;quot;http://www.newdomain.com&amp;quot;);&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Во втором случае бесконечное множество вариантов. Самые простые из них:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
#1: RewriteRule / shop [R=301] &lt;br /&gt;
#2: Redirect 301 ^index.html$ /&lt;br /&gt;
#3: RedirectPermanent ^shop$ ^catalog$&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Разделителем здесь является пробел, принцип старый: первое значение - откуда, второе - куда.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если нужно добавить перенаправление, чтобы убирался слэш на конце адреса страницы, то для решения задачи нужно вставить такой код в файл /.htaccess в корне сайта после строчки &amp;quot;RewriteEngine On&amp;quot;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteCond %{REQUEST_FILENAME} !-d&lt;br /&gt;
RewriteCond %{REQUEST_URI} !^/admin/.*&lt;br /&gt;
RewriteRule ^(.*)/$ /$1 [L,R=301]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и выключить опцию url-suffix.add в файле config.ini.&lt;br /&gt;
Все страницы, кроме админки, будут перенаправлятся на адрес без слэша. Админка с перенаправлением не будет работать.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D0%B5%D0%B1%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BD%D0%B0_ajax_tpl&amp;diff=8006</id>
		<title>Вебформы на ajax tpl</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%92%D0%B5%D0%B1%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BD%D0%B0_ajax_tpl&amp;diff=8006"/>
		<updated>2016-02-17T11:33:07Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Сейчас мы в несколько довольно несложных действий заставим нашу вебформу, добавленную с помощью модуля обратная связь работать без перезагрузки страницы.&lt;br /&gt;
В этом нам поможет jquery плагин Form.&lt;br /&gt;
Для начала открываем шаблон, где размещается шапка необходимой нам страницы и между тэгами head, в самом низу добавляем строчки&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- ajax jquery Forms --&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://malsup.github.com/jquery.form.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!-- end ajax jquery forms --&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Внимание строчка обязательно должна быть ниже макросов&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%system includeQuickEditJs()%&lt;br /&gt;
%system includeEditInPlaceJs()%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Всё, с шапкой закончили, так как сам jquery у нас уже подключен, макросами&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%system includeQuickEditJs()%&lt;br /&gt;
%system includeEditInPlaceJs()%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь переходим к шаблону вебформ.&lt;br /&gt;
Открываем его.(если вы ничего не меняли, то он находиться по адресу /tpls/data/reflection/webforms.tpl)&lt;br /&gt;
и имеющийся код&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;%pre_lang%/webforms/send/&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;system_form_id&amp;quot; value=&amp;quot;%form_id%&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;system_template&amp;quot; value=&amp;quot;%template%&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; value=&amp;quot;%pre_lang%/webforms/posted/&amp;quot; name=&amp;quot;ref_onsuccess&amp;quot;&amp;gt;&lt;br /&gt;
	%address_select%&lt;br /&gt;
	%groups%&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
заменяем на вот такой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form id=&amp;quot;umi_the_best&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;%pre_lang%/webforms/send/&amp;quot;&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;system_form_id&amp;quot; value=&amp;quot;%form_id%&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;system_template&amp;quot; value=&amp;quot;%template%&amp;quot; /&amp;gt;&lt;br /&gt;
    &amp;lt;input type=&amp;quot;hidden&amp;quot; value=&amp;quot;%pre_lang%/webforms/posted/&amp;quot; name=&amp;quot;ref_onsuccess&amp;quot;&amp;gt;&lt;br /&gt;
    %address_select%&lt;br /&gt;
    %groups%&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    $(document).ready(function(){&lt;br /&gt;
        $(&amp;quot;#umi_the_best&amp;quot;).ajaxForm(function() {&lt;br /&gt;
            alert(&amp;quot;Спасибо за ваш отзыв!&amp;quot;);&lt;br /&gt;
            jQuery(&amp;quot;#umi_the_best&amp;quot;).trigger(&amp;quot;reset&amp;quot;);&lt;br /&gt;
        });&lt;br /&gt;
    });&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Всё, теперь форма у нас работает без перезагрузки страницы.&lt;br /&gt;
&lt;br /&gt;
Внимание, работа данного метода проверена на версии 2.8.5.3, если ваша версия ниже, работа этого метода не гарантирована.&lt;br /&gt;
&lt;br /&gt;
Инструкцию для xslt шаблонизатора вы можете найти по адресу [http://wiki.umisoft.ru/Вебформы_на_ajax_xslt Вебформы на ajax xslt ]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Верстка в TPL]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D0%B5%D0%B1%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BD%D0%B0_ajax_xslt&amp;diff=8005</id>
		<title>Вебформы на ajax xslt</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%92%D0%B5%D0%B1%D1%84%D0%BE%D1%80%D0%BC%D1%8B_%D0%BD%D0%B0_ajax_xslt&amp;diff=8005"/>
		<updated>2016-02-17T11:30:13Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Сейчас мы в несколько довольно несложных действий заставим нашу вебформу, добавленную с помощью модуля обратная связь работать без перезагрузки страницы.&lt;br /&gt;
В этом нам поможет jquery плагин Form.&lt;br /&gt;
Для начала открываем шаблон, где размещается шапка необходимой нам страницы и между тэгами head, в самом низу добавляем строчки&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;!-- ajax jquery Forms --&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;http://malsup.github.com/jquery.form.js&amp;quot; type=&amp;quot;text/javascript&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;!-- end ajax jquery forms --&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Внимание строчка обязательно должна быть ниже макроса&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:value-of select=&amp;quot;document(&amp;#039;udata://system/includeQuickEditJs&amp;#039;)/udata&amp;quot; disable-output-escaping=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Всё, с шапкой закончили, так как сам jquery у нас уже подключен, макросом&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:value-of select=&amp;quot;document(&amp;#039;udata://system/includeQuickEditJs&amp;#039;)/udata&amp;quot; disable-output-escaping=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Теперь переходим к шаблону вебформ.&lt;br /&gt;
Открываем его.(если у вас шаблон demodizzy, то он находиться по адресу /xsltTpls/modules/webforms/add.xsl)&lt;br /&gt;
и фрагмент кода&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;udata[@module = &amp;#039;webforms&amp;#039;][@method = &amp;#039;add&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;form method=&amp;quot;post&amp;quot; action=&amp;quot;{$lang-prefix}/webforms/send/&amp;quot; onsubmit=&amp;quot;site.forms.data.save(this); return site.forms.data.check(this);&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;items&amp;quot; mode=&amp;quot;address&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;groups/group&amp;quot; mode=&amp;quot;webforms&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;system_form_id&amp;quot; value=&amp;quot;{/udata/@form_id}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;ref_onsuccess&amp;quot; value=&amp;quot;{$lang-prefix}/webforms/posted/{/udata/@form_id}/&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;form_element&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:apply-templates select=&amp;quot;document(&amp;#039;udata://system/captcha/&amp;#039;)/udata&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;form_element&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;input type=&amp;quot;submit&amp;quot; class=&amp;quot;button&amp;quot; value=&amp;quot;Отправить&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
заменяем на вот такой&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;udata[@module = &amp;#039;webforms&amp;#039;][@method = &amp;#039;add&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;form id=&amp;quot;umi_the_best&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;{$lang-prefix}/webforms/send/&amp;quot; onsubmit=&amp;quot;site.forms.data.save(this); return site.forms.data.check(this);&amp;quot; enctype=&amp;quot;multipart/form-data&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;items&amp;quot; mode=&amp;quot;address&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;groups/group&amp;quot; mode=&amp;quot;webforms&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;system_form_id&amp;quot; value=&amp;quot;{/udata/@form_id}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;ref_onsuccess&amp;quot; value=&amp;quot;{$lang-prefix}/webforms/posted/{/udata/@form_id}/&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;form_element&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:apply-templates select=&amp;quot;document(&amp;#039;udata://system/captcha/&amp;#039;)/udata&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;form_element&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;input type=&amp;quot;submit&amp;quot; class=&amp;quot;button&amp;quot; value=&amp;quot;Отправить&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
		&amp;lt;/form&amp;gt;&lt;br /&gt;
		&lt;br /&gt;
		&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
                    $(document).ready(function(){&lt;br /&gt;
                        $(&amp;quot;#umi_the_best&amp;quot;).ajaxForm(function() {&lt;br /&gt;
                            alert(&amp;quot;Спасибо за ваш отзыв!&amp;quot;);&lt;br /&gt;
                            jQuery(&amp;quot;#umi_the_best&amp;quot;).trigger(&amp;quot;reset&amp;quot;);&lt;br /&gt;
                        });&lt;br /&gt;
                    });&lt;br /&gt;
                &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Всё, теперь форма у нас работает без перезагрузки страницы.&lt;br /&gt;
&lt;br /&gt;
Внимание, работа данного метода проверена на версии 2.8.5.3, если ваша версия ниже, работа этого метода не гарантирована.&lt;br /&gt;
&lt;br /&gt;
Инструкцию для tpl шаблонизатора вы можете найти по адресу [http://wiki.umisoft.ru/Вебформы_на_ajax_tpl Вебформы на ajax tpl]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория: Верстка в XSLT]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D0%BC_%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B9_WYSIWYG-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BF%D0%B0%D0%BD%D0%B5%D0%BB%D0%B8&amp;diff=8004</id>
		<title>Подключаем кастомный WYSIWYG-редактор для административной панели</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BA%D0%BB%D1%8E%D1%87%D0%B0%D0%B5%D0%BC_%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D1%8B%D0%B9_WYSIWYG-%D1%80%D0%B5%D0%B4%D0%B0%D0%BA%D1%82%D0%BE%D1%80_%D0%B4%D0%BB%D1%8F_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D0%B9_%D0%BF%D0%B0%D0%BD%D0%B5%D0%BB%D0%B8&amp;diff=8004"/>
		<updated>2016-02-15T09:56:22Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;br /&gt;
&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;#039;&amp;#039;&amp;#039;Задача:&amp;#039;&amp;#039;&amp;#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Подключить любой отличный от tinyMCE WYSIWYG-редактор для административной панели.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;#039;&amp;#039;&amp;#039;Решение:&amp;#039;&amp;#039;&amp;#039;&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Чтобы можно было изменить WYSIWYG-редактор по умолчанию, необходимо подредактировать скин используемый для административной панели и подключить его с помощью файла настроек &amp;quot;config.ini&amp;quot;. В данный момент используется скин &amp;quot;mac&amp;quot;. Папка со скином находится по адресу: &amp;quot;/styles/skins/mac&amp;quot;. Делаем вторую копию папки &amp;quot;mac&amp;quot; и присваиваем ей название, например - &amp;quot;mac-with-redactor&amp;quot;, поскольку для примера был выбрал WYSIWYG-редактор &amp;quot;Redactor&amp;quot;. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Скачиваем Redactor по адресу: [http://redactorjs.com/download/ http://redactorjs.com/download]. Распаковываем скачанный архив в папку &amp;quot;/js/redactor&amp;quot;. &lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Первым делом редактируем файл &amp;quot;/styles/skins/mac-with-redactor/design/js/scripts.js&amp;quot;. Удаляем код инициализации TinyMCE для WYSIWYG-полей. Необходимо найти на ~424 строчке текст:&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
// WYSIWYG&lt;br /&gt;
jQuery(&amp;quot;textarea.wysiwyg&amp;quot;).each(function (i, n) {&lt;br /&gt;
  tinyMCE.execCommand(&amp;#039;mceAddControl&amp;#039;, false, jQuery(n).attr(&amp;#039;id&amp;#039;));&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
и закоментировать или удалить его.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
Открываем файл &amp;quot;/styles/skins/mac-with-redactor/interface/ui/controls.xsl&amp;quot; и добавляем шаблон для инициализации Redactor:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template name=&amp;quot;redactor&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;/js/redactor/css/redactor.css&amp;quot; /&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/js/redactor/redactor.min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
  &amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
    $(document).ready(function() {&lt;br /&gt;
      $(&amp;#039;textarea.wysiwyg&amp;#039;).redactor();&lt;br /&gt;
    });&lt;br /&gt;
  &amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Далее редактируем файл &amp;quot;/styles/skins/mac-with-redactor/interface/layout.xsl&amp;quot;. Необходимо заменить все пути вида &amp;quot;/styles/skins/mac/...&amp;quot; на &amp;quot;/styles/skins/mac-with-redactor/...&amp;quot; и добавить вызов шаблона, прописав &amp;quot;&amp;#039;&amp;#039;&amp;#039;&amp;lt;xsl:call-template name=&amp;#039;redactor&amp;#039; /&amp;gt;&amp;#039;&amp;#039;&amp;#039;&amp;quot;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Теперь осталось только прописать настройки скина в файле &amp;quot;config.ini&amp;quot;, который находится в корне сайта. Открываем &amp;quot;config.ini&amp;quot;, ищем секцию &amp;quot;system&amp;quot; и изменяем значение параметра &amp;quot;default-skin&amp;quot; на &amp;quot;mac-with-redactor&amp;quot;. Также необходимо прописать наш скин в массив &amp;quot;skins&amp;quot;. Для этого также в секцию &amp;quot;system&amp;quot; добавляем строку: &amp;quot;skins[] = &amp;#039;mac-with-redactor&amp;#039;&amp;quot;.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border: 1px solid black; padding: 5px;&amp;quot;&amp;gt;&lt;br /&gt;
[[Файл:redactor.png]]&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;font-color: darkblue; font-weight: bold; text-align: center;&amp;quot;&amp;gt;&lt;br /&gt;
Админ-панель с подключённым Redactor.&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;table align=&amp;quot;center&amp;quot; width=&amp;quot;100%&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;tr&amp;gt;&lt;br /&gt;
&amp;lt;td style=&amp;quot;border: 1px dotted black; padding: 20px;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Важно&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Обращаем Ваше внимание, что обновление системы не затрагивает пользовательский скин. Поэтому его обновление нужно будет производить вручную.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
&amp;lt;/td&amp;gt;&lt;br /&gt;
&amp;lt;/tr&amp;gt;&lt;br /&gt;
&amp;lt;/table&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=Http_basic_Authorization&amp;diff=8003</id>
		<title>Http basic Authorization</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=Http_basic_Authorization&amp;diff=8003"/>
		<updated>2016-02-12T15:51:55Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.5&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Закрыть страницу /admin дополнительной http авторизацией.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Для решения задачи в .htaccess добавьте строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteCond %{REQUEST_URI} ^(/admin)$&lt;br /&gt;
RewriteRule ^(.) /security/check.php [L,R]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Потом создайте в корневой директории папку &amp;quot;security&amp;quot; и положите в нее:&lt;br /&gt;
&lt;br /&gt;
1) файл .htpasswd, о том как его получить и заполнить данными можно прочитать, например, вот [http://ru.wikipedia.org/wiki/Htpasswd здесь].&lt;br /&gt;
&lt;br /&gt;
2) файл .htaccess следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthName &amp;quot;private area&amp;quot;&lt;br /&gt;
AuthUserFile /home/domains/c-cmac/htdocs/security/.htpasswd&lt;br /&gt;
require valid-user&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*в AuthName укажите желаемое сообщение в форме авторизации.&lt;br /&gt;
*в AuthUserFile укажите абсолютный путь до файла .htpasswd, см. 1).&lt;br /&gt;
&lt;br /&gt;
3) php файл check.php следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$buffer = new HTTPOutputBuffer;&lt;br /&gt;
$buffer-&amp;gt;redirect(&amp;quot;/admin/news/lists/&amp;quot;, &amp;#039;301 Moved Permanently&amp;#039;, 301);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, при запросе имя_вашего_сайта/admin, браузер затребует ввести авторизационные данные, если они будут введены верно, то произойдет редирект на стандартную форму авторизации в административную панель UMI.CMS.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Basic_http_auth.png]]&lt;br /&gt;
&lt;br /&gt;
Если Вы не хотите, еще раз вводить те же данные, то можете внести правки в файл check.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
$login = $_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;];&lt;br /&gt;
$pass = $_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;];&lt;br /&gt;
 &lt;br /&gt;
$buffer = new HTTPOutputBuffer;&lt;br /&gt;
$buffer-&amp;gt;redirect(&amp;quot;/admin/news/lists/?u-login=$login&amp;amp;u-password=$pass&amp;quot;, &amp;#039;301 Moved Permanently&amp;#039;, 301);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Из-за особенностей архитектуры UMI.CMS второй версии полноценно закрыть всю административную панель этим способом не получится, но можно хотя бы закрыть самый очевидный адрес /admin.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Иногда из-за особенностей хостинга данный способ может не сработать, тогда можно дополнительно закрыть административную панель паролем, заменив код в файле check.php на следующий:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
	&lt;br /&gt;
    $login = &amp;#039;admin&amp;#039;;&lt;br /&gt;
    $pass = &amp;#039;4297f44b13955235245b2497399d7a93&amp;#039;;  // md5 123123&lt;br /&gt;
&lt;br /&gt;
    if (!isset($_COOKIE[&amp;#039;test_umi&amp;#039;])){&lt;br /&gt;
        if (!isset($_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;]) || !isset($_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;])) {&lt;br /&gt;
            // Имя пользователя и/или пароль не были введены, поэтому отправляются заголовки аутентификации&lt;br /&gt;
            header(&amp;#039;HTTP/1.1 401 Unauthorized&amp;#039;);&lt;br /&gt;
            header(&amp;#039;WWW-Authenticate: Basic Realm=&amp;quot;test-umi&amp;quot;&amp;#039;);&lt;br /&gt;
            exit(&amp;#039;Вам необходимо ввести правильные имя пользователя и пароль, &amp;#039;.&lt;br /&gt;
            &amp;#039;иначе вы не получите доступ к этой странице&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
		&lt;br /&gt;
        // Получение введенных пользователем данных для аутентификации&lt;br /&gt;
        $user_userlogin = trim($_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;]);&lt;br /&gt;
        $user_password = md5(trim($_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;]));&lt;br /&gt;
&lt;br /&gt;
        if ($login == $user_userlogin &amp;amp;&amp;amp; $pass == $user_password ) {&lt;br /&gt;
            // Процедура входа прошла нормально, дальше что-то делаем.&lt;br /&gt;
            $sessionId = md5(time());&lt;br /&gt;
            setcookie(&amp;#039;test_umi&amp;#039;, $sessionId, time() + (60 * 60 * 24 * 30));&lt;br /&gt;
            $_COOKIE[&amp;#039;test_umi&amp;#039;] = $sessionId;	 &lt;br /&gt;
        } else {&lt;br /&gt;
            // Имя пользователя и/или пароль введены неверно, поэтому отправляются заголовки аутентификации&lt;br /&gt;
            header(&amp;#039;HTTP/1.1 401 Unauthorized&amp;#039;);&lt;br /&gt;
            header(&amp;#039;WWW-Authenticate: Basic Realm=&amp;quot;test-umi&amp;quot;&amp;#039;);&lt;br /&gt;
            exit(&amp;#039;Вам необходимо ввести правильные имя пользователя и пароль, &amp;#039;.&lt;br /&gt;
            &amp;#039;иначе вы не получите доступ к этой странице&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    header(&amp;quot;Location: http://domain.ru/admin/news/lists&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;#039;admin&amp;#039; - это нужный пароль, &amp;#039;4297f44b13955235245b2497399d7a93&amp;#039; - пароль зашифрованный в md5, &amp;#039;domain.ru&amp;#039; - адрес Вашего сайта.&lt;br /&gt;
&lt;br /&gt;
 [[category:.htaccess]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=Http_basic_Authorization&amp;diff=8002</id>
		<title>Http basic Authorization</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=Http_basic_Authorization&amp;diff=8002"/>
		<updated>2016-02-12T15:51:31Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.5&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Закрыть страницу /admin дополнительной http авторизацией.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Для решения задачи в .htaccess добавьте строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteCond %{REQUEST_URI} ^(/admin)$&lt;br /&gt;
RewriteRule ^(.) /security/check.php [L,R]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Потом создайте в корневой директории папку &amp;quot;security&amp;quot; и положите в нее:&lt;br /&gt;
&lt;br /&gt;
1) файл .htpasswd, о том как его получить и заполнить данными можно прочитать, например, вот [http://ru.wikipedia.org/wiki/Htpasswd здесь].&lt;br /&gt;
&lt;br /&gt;
2) файл .htaccess следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthName &amp;quot;private area&amp;quot;&lt;br /&gt;
AuthUserFile /home/domains/c-cmac/htdocs/security/.htpasswd&lt;br /&gt;
require valid-user&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*в AuthName укажите желаемое сообщение в форме авторизации.&lt;br /&gt;
*в AuthUserFile укажите абсолютный путь до файла .htpasswd, см. 1).&lt;br /&gt;
&lt;br /&gt;
3) php файл check.php следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$buffer = new HTTPOutputBuffer;&lt;br /&gt;
$buffer-&amp;gt;redirect(&amp;quot;/admin/news/lists/&amp;quot;, &amp;#039;301 Moved Permanently&amp;#039;, 301);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, при запросе имя_вашего_сайта/admin, браузер затребует ввести авторизационные данные, если они будут введены верно, то произойдет редирект на стандартную форму авторизации в административную панель UMI.CMS.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Basic_http_auth.png]]&lt;br /&gt;
&lt;br /&gt;
Если Вы не хотите, еще раз вводить те же данные, то можете внести правки в файл check.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
$login = $_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;];&lt;br /&gt;
$pass = $_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;];&lt;br /&gt;
 &lt;br /&gt;
$buffer = new HTTPOutputBuffer;&lt;br /&gt;
$buffer-&amp;gt;redirect(&amp;quot;/admin/news/lists/?u-login=$login&amp;amp;u-password=$pass&amp;quot;, &amp;#039;301 Moved Permanently&amp;#039;, 301);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Из-за особенностей архитектуры UMI.CMS второй версии полноценно закрыть всю административную панель этим способом не получится, но можно хотя бы закрыть самый очевидный адрес /admin.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Иногда из-за особенностей хостинга данный способ может не сработать, тогда можно дополнительно закрыть административную панель паролем, заменив код в файле check.php на следующий:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
	&lt;br /&gt;
    $login = &amp;#039;admin&amp;#039;;&lt;br /&gt;
    $pass = &amp;#039;4297f44b13955235245b2497399d7a93&amp;#039;;  // md5 123123&lt;br /&gt;
&lt;br /&gt;
    if (!isset($_COOKIE[&amp;#039;test_umi&amp;#039;])){&lt;br /&gt;
        if (!isset($_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;]) || !isset($_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;])) {&lt;br /&gt;
            // Имя пользователя и/или пароль не были введены, поэтому отправляются заголовки аутентификации&lt;br /&gt;
            header(&amp;#039;HTTP/1.1 401 Unauthorized&amp;#039;);&lt;br /&gt;
            header(&amp;#039;WWW-Authenticate: Basic Realm=&amp;quot;test-umi&amp;quot;&amp;#039;);&lt;br /&gt;
            exit(&amp;#039;Вам необходимо ввести правильные имя пользователя и пароль, &amp;#039;.&lt;br /&gt;
            &amp;#039;иначе вы не получите доступ к этой странице&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
		&lt;br /&gt;
        // Получение введенных пользователем данных для аутентификации&lt;br /&gt;
        $user_userlogin = trim($_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;]);&lt;br /&gt;
        $user_password = md5(trim($_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;]));&lt;br /&gt;
&lt;br /&gt;
        if ($login == $user_userlogin &amp;amp;&amp;amp; $pass == $user_password ) {&lt;br /&gt;
            // Процедура входа прошла нормально, дальше что-то делаем.&lt;br /&gt;
            $sessionId = md5(time());&lt;br /&gt;
            setcookie(&amp;#039;test_umi&amp;#039;, $sessionId, time() + (60 * 60 * 24 * 30));&lt;br /&gt;
            $_COOKIE[&amp;#039;test_umi&amp;#039;] = $sessionId;	 &lt;br /&gt;
        } else {&lt;br /&gt;
            // Имя пользователя и/или пароль введены неверно, поэтому отправляются заголовки аутентификации&lt;br /&gt;
            header(&amp;#039;HTTP/1.1 401 Unauthorized&amp;#039;);&lt;br /&gt;
            header(&amp;#039;WWW-Authenticate: Basic Realm=&amp;quot;test-umi&amp;quot;&amp;#039;);&lt;br /&gt;
            exit(&amp;#039;Вам необходимо ввести правильные имя пользователя и пароль, &amp;#039;.&lt;br /&gt;
            &amp;#039;иначе вы не получите доступ к этой странице&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    header(&amp;quot;Location: http://domain.ru/admin/news/lists&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;#039;admin&amp;#039; - это нужный пароль, &amp;#039;4297f44b13955235245b2497399d7a93&amp;#039; - пароль зашифрованный в md5, &amp;#039;domain.ru&amp;#039; - адрес Вашего сайта.&lt;br /&gt;
&lt;br /&gt;
 [[category:.htaccess]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=Http_basic_Authorization&amp;diff=8001</id>
		<title>Http basic Authorization</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=Http_basic_Authorization&amp;diff=8001"/>
		<updated>2016-02-12T15:49:52Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.5&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Закрыть страницу /admin дополнительной http авторизацией.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Для решения задачи в .htaccess добавьте строку:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
RewriteCond %{REQUEST_URI} ^(/admin)$&lt;br /&gt;
RewriteRule ^(.) /security/check.php [L,R]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Потом создайте в корневой директории папку &amp;quot;security&amp;quot; и положите в нее:&lt;br /&gt;
&lt;br /&gt;
1) файл .htpasswd, о том как его получить и заполнить данными можно прочитать, например, вот [http://ru.wikipedia.org/wiki/Htpasswd здесь].&lt;br /&gt;
&lt;br /&gt;
2) файл .htaccess следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
AuthType Basic&lt;br /&gt;
AuthName &amp;quot;private area&amp;quot;&lt;br /&gt;
AuthUserFile /home/domains/c-cmac/htdocs/security/.htpasswd&lt;br /&gt;
require valid-user&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*в AuthName укажите желаемое сообщение в форме авторизации.&lt;br /&gt;
*в AuthUserFile укажите абсолютный путь до файла .htpasswd, см. 1).&lt;br /&gt;
&lt;br /&gt;
3) php файл check.php следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
$buffer = new HTTPOutputBuffer;&lt;br /&gt;
$buffer-&amp;gt;redirect(&amp;quot;/admin/news/lists/&amp;quot;, &amp;#039;301 Moved Permanently&amp;#039;, 301);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тогда, при запросе имя_вашего_сайта/admin, браузер затребует ввести авторизационные данные, если они будут введены верно, то произойдет редирект на стандартную форму авторизации в административную панель UMI.CMS.&lt;br /&gt;
&lt;br /&gt;
[[Файл:Basic_http_auth.png]]&lt;br /&gt;
&lt;br /&gt;
Если Вы не хотите, еще раз вводить те же данные, то можете внести правки в файл check.php:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
 &lt;br /&gt;
$login = $_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;];&lt;br /&gt;
$pass = $_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;];&lt;br /&gt;
 &lt;br /&gt;
$buffer = new HTTPOutputBuffer;&lt;br /&gt;
$buffer-&amp;gt;redirect(&amp;quot;/admin/news/lists/?u-login=$login&amp;amp;u-password=$pass&amp;quot;, &amp;#039;301 Moved Permanently&amp;#039;, 301);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
*Из-за особенностей архитектуры UMI.CMS второй версии полноценно закрыть всю административную панель этим способом не получится, но можно хотя бы закрыть самый очевидный адрес /admin.&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Иногда из-за особенностей хостинга данный способ может не сработать, тогда можно дополнительно закрыть административную панель паролем, заменив код в файле check.php на следующий:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    include &amp;#039;../standalone.php&amp;#039;;&lt;br /&gt;
	&lt;br /&gt;
    $login = &amp;#039;admin&amp;#039;;&lt;br /&gt;
    $pass = &amp;#039;4297f44b13955235245b2497399d7a93&amp;#039;;  // md5 123123&lt;br /&gt;
&lt;br /&gt;
    if (!isset($_COOKIE[&amp;#039;test_umi&amp;#039;])){&lt;br /&gt;
        if (!isset($_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;]) || !isset($_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;])) {&lt;br /&gt;
            // Имя пользователя и/или пароль не были введены, поэтому отправляются заголовки аутентификации&lt;br /&gt;
            header(&amp;#039;HTTP/1.1 401 Unauthorized&amp;#039;);&lt;br /&gt;
            header(&amp;#039;WWW-Authenticate: Basic Realm=&amp;quot;test-umi&amp;quot;&amp;#039;);&lt;br /&gt;
            exit(&amp;#039;Вам необходимо ввести правильные имя пользователя и пароль, &amp;#039;.&lt;br /&gt;
            &amp;#039;иначе вы не получите доступ к этой странице&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
		&lt;br /&gt;
        // Получение введенных пользователем данных для аутентификации&lt;br /&gt;
        $user_userlogin = trim($_SERVER[&amp;#039;PHP_AUTH_USER&amp;#039;]);&lt;br /&gt;
        $user_password = md5(trim($_SERVER[&amp;#039;PHP_AUTH_PW&amp;#039;]));&lt;br /&gt;
&lt;br /&gt;
        if ($login == $user_userlogin &amp;amp;&amp;amp; $pass == $user_password ) {&lt;br /&gt;
            // Процедура входа прошла нормально, дальше что-то делаем.&lt;br /&gt;
            $sessionId = md5(time());&lt;br /&gt;
            setcookie(&amp;#039;test_umi&amp;#039;, $sessionId, time() + (60 * 60 * 24 * 30));&lt;br /&gt;
            $_COOKIE[&amp;#039;test_umi&amp;#039;] = $sessionId;	 &lt;br /&gt;
        } else {&lt;br /&gt;
            // Имя пользователя и/или пароль введены неверно, поэтому отправляются заголовки аутентификации&lt;br /&gt;
            header(&amp;#039;HTTP/1.1 401 Unauthorized&amp;#039;);&lt;br /&gt;
            header(&amp;#039;WWW-Authenticate: Basic Realm=&amp;quot;test-umi&amp;quot;&amp;#039;);&lt;br /&gt;
            exit(&amp;#039;Вам необходимо ввести правильные имя пользователя и пароль, &amp;#039;.&lt;br /&gt;
            &amp;#039;иначе вы не получите доступ к этой странице&amp;#039;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
    header(&amp;quot;Location: http://shpatler.ru/admin/news/lists&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
где &amp;#039;admin&amp;#039; - это нужный пароль, &amp;#039;4297f44b13955235245b2497399d7a93&amp;#039; - пароль зашифрованный в md5, &amp;#039;domain.ru&amp;#039; - адрес Вашего сайта.&lt;br /&gt;
&lt;br /&gt;
 [[category:.htaccess]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC%D0%B8_%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B&amp;diff=8000</id>
		<title>Как сделать активными только импортируемые товары</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC%D0%B8_%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B&amp;diff=8000"/>
		<updated>2016-02-08T13:46:31Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.11&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Задача&amp;#039;&amp;#039;&amp;#039;: Сделать активными только импортируемые товары, все остальные товары в каталоге должны стать неактивными.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Реализация&amp;#039;&amp;#039;&amp;#039;: В директорию \classes\modules\exchange\ нужно добавить файл custom_events.php со следующим содержанием:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnAddElement&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onExchangeDisactivateElements&amp;quot;);&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnUpdateElement&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onExchangeDisactivateElements&amp;quot;);&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnImportFinish&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onImportFinishUnsetFlag&amp;quot;);&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnAutoFinish&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onImportFinishUnsetFlag&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этой же директории в файл __custom.php нужно добавить следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
    abstract class __custom_exchange {&lt;br /&gt;
        public function onExchangeDisactivateElements(iUmiEventPoint $e) {&lt;br /&gt;
            if ($e-&amp;gt;getMode() === &amp;#039;after&amp;#039;) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            $element = $e-&amp;gt;getRef(&amp;#039;element&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
            if ($element-&amp;gt;getMethod() == &amp;#039;category&amp;#039;) {&lt;br /&gt;
                return;&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
            // начало импорта, деактивируем все товары&lt;br /&gt;
            if (!file_exists(&amp;quot;onExchangeDisactivateElementsFlag&amp;quot;)) {&lt;br /&gt;
                $pages = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
                $pages-&amp;gt;types(&amp;#039;hierarchy-type&amp;#039;)-&amp;gt;name(&amp;#039;catalog&amp;#039;, &amp;#039;object&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
                foreach ($pages as $p) {&lt;br /&gt;
                    $p-&amp;gt;setIsActive(false);&lt;br /&gt;
                }&lt;br /&gt;
&lt;br /&gt;
                file_put_contents(&amp;quot;onExchangeDisactivateElementsFlag&amp;quot;, &amp;quot;done&amp;quot;);&lt;br /&gt;
            }&lt;br /&gt;
&lt;br /&gt;
			$element-&amp;gt;setIsActive(true);&lt;br /&gt;
        }&lt;br /&gt;
&lt;br /&gt;
        public function onImportFinishUnsetFlag(iUmiEventPoint $e) {&lt;br /&gt;
            unlink(&amp;quot;onExchangeDisactivateElementsFlag&amp;quot;);&lt;br /&gt;
        }&lt;br /&gt;
    }&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы добавили обработчик событий добавления и обновления элемента механизмом импорта, в котором все объекты каталога становятся неактивными, а импортируемые элементы - активными. Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* В процессе импорта в корне сайта будет создан файл onExchangeDisactivateElementsFlag. Это значит, что у umi.cms должны быть права на запись этой директории. После завершения импорта файл удалится. Если импорт по каким-то причинам прервется, то нужно будет вручную удалить файл.&lt;br /&gt;
* В нашей реализации селектор находит ВСЕ объекты каталога и делает их неактивными. Если у Вас очень много товаров на сайте, этот метод может быть неприемлемым из-за большого потребления оперативной памяти/ресурсов сервера. Если в процессе импорта Вы увидите сообщение &amp;quot;Ошибка разбора данных&amp;quot;, это может означать, что сервер не успел деактивировать все объекты. В таком случае Вам нужно будет доработать скрипт, чтобы деактивация происходила поэтапно или каким-либо другим способом.Если Вам потребуется помощь в доработке скрипта, рекомендуем обратиться к нашим [http://www.umi-cms.ru/buy_now/find_webdevs/ партнерам:]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC%D0%B8_%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B&amp;diff=7999</id>
		<title>Как сделать активными только импортируемые товары</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC%D0%B8_%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B&amp;diff=7999"/>
		<updated>2016-02-08T13:15:32Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.11&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Задача&amp;#039;&amp;#039;&amp;#039;: Сделать активными только импортируемые товары, все остальные товары в каталоге должны стать неактивными.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Реализация&amp;#039;&amp;#039;&amp;#039;: В директорию \classes\modules\exchange\ нужно добавить файл custom_events.php со следующим содержанием:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnAddElement&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onExchangeDisactivateElements&amp;quot;);&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnUpdateElement&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onExchangeDisactivateElements&amp;quot;);&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnImportFinish&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onImportFinishUnsetFlag&amp;quot;);&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnAutoFinish&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onImportFinishUnsetFlag&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этой же директории в файл __custom.php нужно добавить следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	abstract class __custom_exchange {&lt;br /&gt;
		public function onExchangeDisactivateElements(iUmiEventPoint $e) {&lt;br /&gt;
			if ($e-&amp;gt;getMode() === &amp;#039;after&amp;#039;) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$element = $e-&amp;gt;getRef(&amp;#039;element&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
			if ($element-&amp;gt;getMethod() == &amp;#039;category&amp;#039;) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			// начало импорта, деактивируем все товары&lt;br /&gt;
			if (!file_exists(&amp;quot;onExchangeDisactivateElementsFlag&amp;quot;)) {&lt;br /&gt;
				$pages = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
				$pages-&amp;gt;types(&amp;#039;hierarchy-type&amp;#039;)-&amp;gt;name(&amp;#039;catalog&amp;#039;, &amp;#039;object&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
				foreach ($pages as $p) {&lt;br /&gt;
					$p-&amp;gt;setIsActive(false);&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				file_put_contents(&amp;quot;onExchangeDisactivateElementsFlag&amp;quot;, &amp;quot;done&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$element-&amp;gt;setIsActive(true);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		public function onImportFinishUnsetFlag(iUmiEventPoint $e) {&lt;br /&gt;
			unlink(&amp;quot;onExchangeDisactivateElementsFlag&amp;quot;);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы добавили обработчик событий добавления и обновления элемента механизмом импорта, в котором все объекты каталога становятся неактивными, а импортируемые элементы - активными. Несколько замечаний:&lt;br /&gt;
&lt;br /&gt;
* В процессе импорта в корне сайта будет создан файл onExchangeDisactivateElementsFlag. Это значит, что у umi.cms должны быть права на запись этой директории. После завершения импорта файл удалится. Если импорт по каким-то причинам прервется, то нужно будет вручную удалить файл.&lt;br /&gt;
* В нашей реализации селектор находит ВСЕ объекты каталога и делает их неактивными. Если у Вас очень много товаров на сайте, этот метод может быть неприемлемым из-за большого потребления оперативной памяти/ресурсов сервера. Если в процессе импорта Вы увидите сообщение &amp;quot;Ошибка разбора данных&amp;quot;, это может означать, что сервер не успел деактивировать все объекты. В таком случае Вам нужно будет доработать скрипт, чтобы деактивация происходила поэтапно или каким-либо другим способом.Если Вам потребуется помощь в доработке скрипта, рекомендуем обратиться к нашим [http://www.umi-cms.ru/buy_now/find_webdevs/ партнерам:]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B5%D0%B2&amp;diff=7998</id>
		<title>Массовое удаление комментариев</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D1%81%D1%81%D0%BE%D0%B2%D0%BE%D0%B5_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D0%BD%D1%82%D0%B0%D1%80%D0%B8%D0%B5%D0%B2&amp;diff=7998"/>
		<updated>2016-02-08T08:54:20Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.6&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Можем возникнуть ситуация, когда на сайте не была включена captcha, и было оставлено большое количество спам-комментариев. Удалять их по-одному из административной панели будет очень долго, вместо этого для удаления мы будем использовать следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function deleteComments() {&lt;br /&gt;
			&lt;br /&gt;
    $amount = 100;&lt;br /&gt;
    $pages = new selector(&amp;#039;objects&amp;#039;);	&lt;br /&gt;
    $pages-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;id(66);&lt;br /&gt;
    $pages-&amp;gt;limit(0, $amount);&lt;br /&gt;
    $ObjectsCollection = umiObjectsCollection::getInstance();&lt;br /&gt;
&lt;br /&gt;
    foreach($pages as $page)&lt;br /&gt;
        $ObjectsCollection-&amp;gt;delObject($page-&amp;gt;getId());&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Разместите данный код в файле classes/modules/custom.php  после строки //TODO: Write your own macroses here. В строке &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$pages-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;id(66);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
мы задаем id типа данных &amp;quot;Комментарии&amp;quot;, если у Вас id типа данных &amp;quot;Комментарии&amp;quot; другой - тогда подставьте соответствующее значение. &lt;br /&gt;
&lt;br /&gt;
В переменную &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$amount = 100;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
мы передаем количество комментариев, которое будет удалено за один раз. Если количество комментариев, необходимое для удаления, велико, то при указании большего числа сайт может перестать функционировать на время. Данное число необходимо подбирать опытным путем, чтобы удалялось максимально возможное количество комментариев за раз, и при этом сайт продолжал корректно функционировать.&lt;br /&gt;
&lt;br /&gt;
Для запуска макроса нужно в адресной строке браузера написать&lt;br /&gt;
&amp;lt;b&amp;gt;domain.ru/udata/custom/deleteComments&amp;lt;/b&amp;gt;,&lt;br /&gt;
где &amp;lt;b&amp;gt;domain.ru&amp;lt;/b&amp;gt; - это адрес вашего сайта&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B5%D0%B9_%D0%BF%D0%BE_%D1%81%D1%8E%D0%B6%D0%B5%D1%82%D1%83&amp;diff=7997</id>
		<title>Вывод новостей по сюжету</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B5%D0%B9_%D0%BF%D0%BE_%D1%81%D1%8E%D0%B6%D0%B5%D1%82%D1%83&amp;diff=7997"/>
		<updated>2016-02-02T08:21:35Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Написание кастомных макросов]][[Категория:API]][[Категория:Модуль_Новости]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.11&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Стандартно в UMI.CMS у типа данных &amp;quot;Новость&amp;quot; есть поле &amp;quot;Сюжеты&amp;quot;, также есть одноименный тип данных.&lt;br /&gt;
У любой новости можно выбрать некоторое количество сюжетов:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject1.png]]&lt;br /&gt;
&lt;br /&gt;
Есть макрос %news related_links()%, который выводит список последних новостей, связанных по сюжету с указанной новостью.&lt;br /&gt;
А если мы просто захотим вывести все новости, у которых указан определенный сюжеты или сюжеты, то такого макрос в системе нет.&lt;br /&gt;
Можно конечно указать у новости тег и вывести все страницы с указанным тегом, но это не самое красивое и удобное решение,&lt;br /&gt;
особенно, если используете теги для других нужд.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
В этой статье будет приведен макрос, решающий нашу задачу, но сначала нужно будет внести некоторые изменения в тип данных&lt;br /&gt;
&amp;quot;Сюжет публикации&amp;quot;, добавим в этот тип данных следующую группу полей и поле, обязательно с теми же идентификаторами:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject2.png]]&lt;br /&gt;
&lt;br /&gt;
Для использования, приведённого ниже, макроса, нам нужно будет заполнить созданное поле у элементов справочника &amp;quot;Сюжет публикации&amp;quot;,&lt;br /&gt;
обязательно латинскими буквами, например так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject3.png]]&lt;br /&gt;
&lt;br /&gt;
А потом можно будет выбрать эти значения у новостей:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject4.png]]&lt;br /&gt;
&lt;br /&gt;
== Описание макроса ==&lt;br /&gt;
&lt;br /&gt;
%news subjectsList()% — выводит новости, относящиеся к выбранн(ому)ым сюже(ту)там.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Параметры: news subjectsList($id, [$template = &amp;#039;default&amp;#039;, $mode = &amp;#039;and&amp;#039;, $per_page = 0, $ignore_paging = false])&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$id&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает идентификатор сюжета, поле, которое мы создали ранее. Можно указать несколько идентификатором через знак &amp;quot;;&amp;quot;.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$template &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает имя шаблона, по которому выводится результат макроса, если его не указать, то он принимает значение &amp;#039;default&amp;#039; В XSLT-шаблонизаторе игнорируется.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$mode&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимаем два значения &amp;#039;and&amp;#039; и &amp;#039;or&amp;#039;, когда выбрано &amp;#039;and&amp;#039;, макрос возвращает новости, среди сюжетов которых присутствуют указанные в параметре $id сюжеты,&lt;br /&gt;
   когда выбрано &amp;#039;or&amp;#039;, макрос возвращаем новости, у которых сюжеты полностью совпадают с указанными в параметре $id сюжетами. Если параметр не указать, то&lt;br /&gt;
   будет по-умолчанию равен &amp;#039;and&amp;#039;.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$per_page &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает число, которое обозначает максимальное количество новостей. Если этот параметр не указывать, будет взято значение, указанное в настройках модуля «Новости».&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$ignore_paging &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимаем булево значение («1» или «0»), указывающее макросу игнорировать значение текущей страницы списка вывода (параметр http-запроса p). То есть, если указать «1»,&lt;br /&gt;
   макрос будет всегда выводить только первую страницу списка новостей.&lt;br /&gt;
&lt;br /&gt;
Для применения этого макроса скопируйте содержимое листинга макроса в файл /classes/modules/news/__custom.php, и не забудьте указать имя метода в permissions.custom.php, то&lt;br /&gt;
есть создать такой файл в директории /classes/modules/news/ со следующим содержимым:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   $permissions = array(&lt;br /&gt;
	&amp;#039;view&amp;#039; =&amp;gt; array(&lt;br /&gt;
			&amp;#039;subjectsList&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Листинг макроса ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function subjectsList($id = &amp;#039;&amp;#039;, $template = &amp;#039;&amp;#039;, $mode = &amp;#039;&amp;#039;, $per_page = 0, $ignore_paging = false){&lt;br /&gt;
	if(!$id){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макросе news subjectsList() необходимо указать первый параметр $id&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$id = preg_replace(&amp;#039;/\s/&amp;#039;, &amp;#039;&amp;#039;, $id);&lt;br /&gt;
	$parsId = array();&lt;br /&gt;
	$parsId = explode(&amp;#039;;&amp;#039;,$id);&lt;br /&gt;
	unset($id);&lt;br /&gt;
&lt;br /&gt;
	if(!$template){&lt;br /&gt;
		$template = &amp;#039;default&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!$mode){&lt;br /&gt;
		$mode = &amp;#039;and&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!$per_page){&lt;br /&gt;
		(int) $per_page = $this-&amp;gt;per_page;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!is_numeric($per_page)){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макрос news subjectsList() передано некорректно значение номера страницы&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	list($template_block, $template_block_empty, $template_line) = def_module::loadTemplates(&amp;quot;news/&amp;quot;.$template, &amp;quot;items_block&amp;quot;, &amp;quot;items_block_empty&amp;quot;, &amp;quot;item_block&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	$currPageNum = getRequest(&amp;#039;p&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$resultSubjects = array();&lt;br /&gt;
	$subjectsQuery = new selector(&amp;#039;objects&amp;#039;);&lt;br /&gt;
	$subjectsQuery-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;name(&amp;#039;news&amp;#039;, &amp;#039;subject&amp;#039;);&lt;br /&gt;
	$subjectsQuery-&amp;gt;where(&amp;#039;subject-id&amp;#039;)-&amp;gt;equals($parsId);&lt;br /&gt;
	$resultSubjects = $subjectsQuery-&amp;gt;result();&lt;br /&gt;
	unset($subjectsQuery, $parsId);&lt;br /&gt;
&lt;br /&gt;
	(int) $countSubject = count($resultSubjects);&lt;br /&gt;
&lt;br /&gt;
	if($countSubject === 0){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;Сюжеты с переданными id не найдены&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$resultItems = array();&lt;br /&gt;
	$itemsQuery = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;name(&amp;#039;news&amp;#039;, &amp;#039;item&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;option(&amp;#039;or-mode&amp;#039;)-&amp;gt;field(&amp;#039;subjects&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;where(&amp;#039;subjects&amp;#039;)-&amp;gt;equals($resultSubjects);&lt;br /&gt;
&lt;br /&gt;
	switch ($mode){&lt;br /&gt;
		case &amp;#039;or&amp;#039;:&lt;br /&gt;
			$allItems = array();&lt;br /&gt;
			$allItems = $itemsQuery-&amp;gt;result();&lt;br /&gt;
&lt;br /&gt;
			if(count($allItems) === 0){&lt;br /&gt;
				return $template_block_empty;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			foreach($allItems as $oneItem){&lt;br /&gt;
				$items = array();&lt;br /&gt;
				$items[] = $oneItem-&amp;gt;getValue(&amp;#039;subjects&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
				foreach($items as $item){&lt;br /&gt;
					$test = array();&lt;br /&gt;
					$test = array_diff($resultSubjects, $item);&lt;br /&gt;
&lt;br /&gt;
					if (count($test) === 0){&lt;br /&gt;
&lt;br /&gt;
						if($countSubject &amp;gt; 1){&lt;br /&gt;
							$resultItems[] = $oneItem;&lt;br /&gt;
&lt;br /&gt;
						}elseif(count($item) === 1){&lt;br /&gt;
							$resultItems[] = $oneItem;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			unset($itemsQuery, $allItems, $oneItem, $items, $item, $test, $resultSubjects, $countSubject);&lt;br /&gt;
&lt;br /&gt;
			usort($resultItems, function($a, $b){&lt;br /&gt;
&lt;br /&gt;
				$a_publishTime = $a-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;);&lt;br /&gt;
				$b_publishTime = $b-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
				if ($a_publishTime == $b_publishTime) {&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				return ($a_publishTime &amp;gt; $b_publishTime) ? -1 : 1;&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			if(intval($ignore_paging) === 0){&lt;br /&gt;
				$offset = 0;&lt;br /&gt;
				$offset = intval($currPageNum) * intval($per_page);&lt;br /&gt;
&lt;br /&gt;
				$resultItems = array_slice($resultItems, $offset, $per_page);&lt;br /&gt;
				unset($offset);&lt;br /&gt;
			}&lt;br /&gt;
			$total = 0;&lt;br /&gt;
			$total = count($resultItems);&lt;br /&gt;
&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
		case &amp;#039;and&amp;#039;:&lt;br /&gt;
			unset($resultSubjects, $countSubject);&lt;br /&gt;
&lt;br /&gt;
			$itemsQuery-&amp;gt;order(&amp;#039;publish_time&amp;#039;)-&amp;gt;desc();&lt;br /&gt;
&lt;br /&gt;
			if(intval($ignore_paging) === 0){&lt;br /&gt;
				$offset  = 0;&lt;br /&gt;
				$offset  = intval($currPageNum) * intval($per_page);&lt;br /&gt;
				$itemsQuery-&amp;gt;limit($offset , intval($per_page));&lt;br /&gt;
			}&lt;br /&gt;
			$total = 0;&lt;br /&gt;
			$total = $itemsQuery-&amp;gt;length();&lt;br /&gt;
			$resultItems = $itemsQuery-&amp;gt;result();&lt;br /&gt;
			unset($itemsQuery, $offset);&lt;br /&gt;
&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
		default:&lt;br /&gt;
			throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макросе news subjectsList() необходимо указать корректное значение параметра $mode (or или and)&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
	if($total === 0){&lt;br /&gt;
		return $template_block_empty;&lt;br /&gt;
	}else{&lt;br /&gt;
		$lines = Array();&lt;br /&gt;
		$block_arr = Array();&lt;br /&gt;
&lt;br /&gt;
		foreach ($resultItems as $resultItem){&lt;br /&gt;
			$line_arr = array();&lt;br /&gt;
&lt;br /&gt;
			$itemId = $resultItem-&amp;gt;id;&lt;br /&gt;
			$line_arr[&amp;#039;attribute:id&amp;#039;] = $itemId;&lt;br /&gt;
			$line_arr[&amp;#039;attribute:link&amp;#039;] = $resultItem-&amp;gt;link;&lt;br /&gt;
			$line_arr[&amp;#039;xlink:href&amp;#039;] = &amp;quot;upage://&amp;quot; . $itemId;&lt;br /&gt;
			$line_arr[&amp;#039;void:header&amp;#039;] = $lines_arr[&amp;#039;name&amp;#039;] = $resultItem-&amp;gt;getName();&lt;br /&gt;
			$line_arr[&amp;#039;node:name&amp;#039;] =  $resultItem-&amp;gt;getName();&lt;br /&gt;
&lt;br /&gt;
			if($publish_time = $resultItem-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;)){&lt;br /&gt;
				$line_arr[&amp;#039;attribute:publish_time&amp;#039;] = $publish_time-&amp;gt;getFormattedDate(&amp;quot;U&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			unset($resultItems, $resultItem);&lt;br /&gt;
&lt;br /&gt;
			$lines[] = def_module::parseTemplate($template_line, $line_arr, $itemId);&lt;br /&gt;
			unset($line_arr);&lt;br /&gt;
&lt;br /&gt;
			$this-&amp;gt;pushEditable(&amp;quot;news&amp;quot;, &amp;quot;item&amp;quot;, $itemId);&lt;br /&gt;
			unset($itemId);&lt;br /&gt;
		}&lt;br /&gt;
		$block_arr[&amp;#039;subnodes:items&amp;#039;] = $block_arr[&amp;#039;void:lines&amp;#039;] = $lines;&lt;br /&gt;
		unset($lines);&lt;br /&gt;
&lt;br /&gt;
		$block_arr[&amp;#039;total&amp;#039;] = $total;&lt;br /&gt;
		$block_arr[&amp;#039;per_page&amp;#039;] = $per_page;&lt;br /&gt;
		unset($total, $per_page);&lt;br /&gt;
&lt;br /&gt;
		return def_module::parseTemplate($template_block, $block_arr);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Применение в xslt ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример вызова&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
udata/news/subjectsList/(eco;pol)//or/3/1/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XML-ответ UData&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;udata xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; module=&amp;quot;news&amp;quot; method=&amp;quot;subjectsList&amp;quot; generation-time=&amp;quot;0.075129&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;items&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;191&amp;quot; link=&amp;quot;/novosti3/novost7/&amp;quot; xlink:href=&amp;quot;upage://191&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость7&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;190&amp;quot; link=&amp;quot;/novosti3/novost6/&amp;quot; xlink:href=&amp;quot;upage://190&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость6&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;189&amp;quot; link=&amp;quot;/novosti3/novost5/&amp;quot; xlink:href=&amp;quot;upage://189&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость5&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;187&amp;quot; link=&amp;quot;/novosti2/novost4/&amp;quot; xlink:href=&amp;quot;upage://187&amp;quot; publish_time=&amp;quot;1382001240&amp;quot;&amp;gt;Новость4&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;185&amp;quot; link=&amp;quot;/novosti2/novost2/&amp;quot; xlink:href=&amp;quot;upage://185&amp;quot; publish_time=&amp;quot;1381913100&amp;quot;&amp;gt;Новость2&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;184&amp;quot; link=&amp;quot;/novosti2/novost1/&amp;quot; xlink:href=&amp;quot;upage://184&amp;quot; publish_time=&amp;quot;1381826640&amp;quot;&amp;gt;Новость1&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;186&amp;quot; link=&amp;quot;/news1/novost3/&amp;quot; xlink:href=&amp;quot;upage://186&amp;quot; publish_time=&amp;quot;1381742040&amp;quot;&amp;gt;Новость3&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;78&amp;quot; link=&amp;quot;/news1/speshite_akciya/&amp;quot; xlink:href=&amp;quot;upage://78&amp;quot; publish_time=&amp;quot;1261279500&amp;quot;&amp;gt;Новость9&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;79&amp;quot; link=&amp;quot;/news1/ne_speshite_ona_zakonchilas/&amp;quot; xlink:href=&amp;quot;upage://79&amp;quot; publish_time=&amp;quot;1259020800&amp;quot;&amp;gt;Новость8&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/items&amp;gt;&lt;br /&gt;
   &amp;lt;total&amp;gt;9&amp;lt;/total&amp;gt;&lt;br /&gt;
   &amp;lt;per_page&amp;gt;3&amp;lt;/per_page&amp;gt;&lt;br /&gt;
&amp;lt;/udata&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Элементы и атрибуты&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;items&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Ветвь, содержащая элементы item — новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;item&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Элемент, описывающий отдельную новость. Значение элемента — название страницы новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@id&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Идентификатор страницы новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@link&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Ссылка на страницу полного текста новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@xlink:href&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Ссылка UPage на страницу полного текста новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@publish_time&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Время публикации новости в UNIX TIMESTAMP.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;total&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Общее количество полученных новостей.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;per_page&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Количество новостей, отображаемых на странице.&lt;br /&gt;
&lt;br /&gt;
== Применение в tpl ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример вызова макроса&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%news subjectsList(&amp;#039;eco;pol&amp;#039;, &amp;#039;subjects&amp;#039;, &amp;#039;or&amp;#039;, &amp;#039;10&amp;#039;, &amp;#039;1&amp;#039;)%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы вызов сработал, нужно создать файл /tpls/news/subjects.tpl с таким содержимым:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$FORMS = Array();&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;item_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;Новость&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;items_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;ul&amp;gt;%items%&amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;items_block_empty&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;Нет таких новостей.&amp;lt;/p&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Используемые шаблоны&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Макрос оперирует шаблонами, находящимися в каталоге /tpls/news/. Вывод макроса осуществляется по шаблону, указанному в параметре template.&lt;br /&gt;
Вы можете не указывать этот параметр, тогда для вывода будет использован шаблон по умолчанию — default.tpl.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Используемые блоки шаблона&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;items_block&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Выводит обрамляющий блок для вывода результатов работы макроса, куда будут подставляться результирующие элементы. Отдельные новости будут отрисованы по блоку item.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%items%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит список страниц, отрисованных с помощью блока item_block.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;item_block&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Отвечает за вывод отдельной новости, полученной в результате работы макроса.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%id%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит id новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%link%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит uri новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%value%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит название новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%publish_time%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит время публикации новости в UNIX TIMESTAMP.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%total%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Общее количество полученных новостей.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%per_page%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит количество новостей, отображаемых на странице.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;items_block_empty&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Используется вместо блока items_block в том случае, если новостей, которые необходимо вывести нет.&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B5%D0%B9_%D0%BF%D0%BE_%D1%81%D1%8E%D0%B6%D0%B5%D1%82%D1%83&amp;diff=7996</id>
		<title>Вывод новостей по сюжету</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B5%D0%B9_%D0%BF%D0%BE_%D1%81%D1%8E%D0%B6%D0%B5%D1%82%D1%83&amp;diff=7996"/>
		<updated>2016-02-02T08:20:10Z</updated>

		<summary type="html">&lt;p&gt;Alexei: Правки Alexei (обсуждение) откачены к версии Mad grant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Написание кастомных макросов]][[Категория:API]][[Категория:Модуль_Новости]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.1&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Стандартно в UMI.CMS у типа данных &amp;quot;Новость&amp;quot; есть поле &amp;quot;Сюжеты&amp;quot;, также есть одноименный тип данных.&lt;br /&gt;
У любой новости можно выбрать некоторое количество сюжетов:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject1.png]]&lt;br /&gt;
&lt;br /&gt;
Есть макрос %news related_links()%, который выводит список последних новостей, связанных по сюжету с указанной новостью.&lt;br /&gt;
А если мы просто захотим вывести все новости, у которых указан определенный сюжеты или сюжеты, то такого макрос в системе нет.&lt;br /&gt;
Можно конечно указать у новости тег и вывести все страницы с указанным тегом, но это не самое красивое и удобное решение, &lt;br /&gt;
особенно, если используете теги для других нужд.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
В этой статье будет приведен макрос, решающий нашу задачу, но сначала нужно будет внести некоторые изменения в тип данных&lt;br /&gt;
&amp;quot;Сюжет публикации&amp;quot;, добавим в этот тип данных следующую группу полей и поле, обязательно с теми же идентификаторами:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject2.png]]&lt;br /&gt;
&lt;br /&gt;
Для использования, приведённого ниже, макроса, нам нужно будет заполнить созданное поле у элементов справочника &amp;quot;Сюжет публикации&amp;quot;,&lt;br /&gt;
обязательно латинскими буквами, например так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject3.png]]&lt;br /&gt;
&lt;br /&gt;
А потом можно будет выбрать эти значения у новостей:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject4.png]]&lt;br /&gt;
&lt;br /&gt;
== Описание макроса ==&lt;br /&gt;
&lt;br /&gt;
%news subjectsList()% — выводит новости, относящиеся к выбранн(ому)ым сюже(ту)там.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Параметры: news subjectsList($id, [$template = &amp;#039;default&amp;#039;, $mode = &amp;#039;and&amp;#039;, $per_page = 0, $ignore_paging = false])&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$id&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает идентификатор сюжета, поле, которое мы создали ранее. Можно указать несколько идентификатором через знак &amp;quot;;&amp;quot;.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$template &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает имя шаблона, по которому выводится результат макроса, если его не указать, то он принимает значение &amp;#039;default&amp;#039; В XSLT-шаблонизаторе игнорируется.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$mode&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимаем два значения &amp;#039;and&amp;#039; и &amp;#039;or&amp;#039;, когда выбрано &amp;#039;and&amp;#039;, макрос возвращает новости, среди сюжетов которых присутствуют указанные в параметре $id сюжеты,&lt;br /&gt;
   когда выбрано &amp;#039;or&amp;#039;, макрос возвращаем новости, у которых сюжеты полностью совпадают с указанными в параметре $id сюжетами. Если параметр не указать, то&lt;br /&gt;
   будет по-умолчанию равен &amp;#039;and&amp;#039;.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$per_page &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает число, которое обозначает максимальное количество новостей. Если этот параметр не указывать, будет взято значение, указанное в настройках модуля «Новости».&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$ignore_paging &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимаем булево значение («1» или «0»), указывающее макросу игнорировать значение текущей страницы списка вывода (параметр http-запроса p). То есть, если указать «1», &lt;br /&gt;
   макрос будет всегда выводить только первую страницу списка новостей.&lt;br /&gt;
&lt;br /&gt;
Для применения этого макроса скопируйте содержимое листинга макроса в файл /classes/modules/news/__custom.php, и не забудьте указать имя метода в permissions.custom.php, то&lt;br /&gt;
есть создать такой файл в директории /classes/modules/news/ со следующим содержимым:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   $permissions = array(&lt;br /&gt;
	&amp;#039;view&amp;#039; =&amp;gt; array(&lt;br /&gt;
			&amp;#039;subjectsList&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Листинг макроса ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function subjectsList($id = &amp;#039;&amp;#039;, $template = &amp;#039;&amp;#039;, $mode = &amp;#039;&amp;#039;, $per_page = 0, $ignore_paging = false){	&lt;br /&gt;
	if(!$id){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макросе news subjectsList() необходимо указать первый параметр $id&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$id = preg_replace(&amp;#039;/\s/&amp;#039;, &amp;#039;&amp;#039;, $id);		&lt;br /&gt;
	$parsId = array();&lt;br /&gt;
	$parsId = explode(&amp;#039;;&amp;#039;,$id);&lt;br /&gt;
	unset($id);&lt;br /&gt;
	&lt;br /&gt;
	if(!$template){&lt;br /&gt;
		$template = &amp;#039;default&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if(!$mode){&lt;br /&gt;
		$mode = &amp;#039;and&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if(!$per_page){&lt;br /&gt;
		(int) $per_page = $this-&amp;gt;per_page;&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	if(!is_numeric($per_page)){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макрос news subjectsList() передано некорректно значение номера страницы&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	list($template_block, $template_block_empty, $template_line) = def_module::loadTemplates(&amp;quot;news/&amp;quot;.$template, &amp;quot;items_block&amp;quot;, &amp;quot;items_block_empty&amp;quot;, &amp;quot;item_block&amp;quot;);&lt;br /&gt;
	&lt;br /&gt;
	$currPageNum = getRequest(&amp;#039;p&amp;#039;);&lt;br /&gt;
	&lt;br /&gt;
	$resultSubjects = array();&lt;br /&gt;
	$subjectsQuery = new selector(&amp;#039;objects&amp;#039;);&lt;br /&gt;
	$subjectsQuery-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;name(&amp;#039;news&amp;#039;, &amp;#039;subject&amp;#039;);&lt;br /&gt;
	$subjectsQuery-&amp;gt;where(&amp;#039;subject-id&amp;#039;)-&amp;gt;equals($parsId);&lt;br /&gt;
	$resultSubjects = $subjectsQuery-&amp;gt;result();&lt;br /&gt;
	unset($subjectsQuery, $parsId);&lt;br /&gt;
	&lt;br /&gt;
	(int) $countSubject = count($resultSubjects);&lt;br /&gt;
	&lt;br /&gt;
	if($countSubject === 0){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;Сюжеты с переданными id не найдены&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
	&lt;br /&gt;
	$resultItems = array();&lt;br /&gt;
	$itemsQuery = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;name(&amp;#039;news&amp;#039;, &amp;#039;item&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;option(&amp;#039;or-mode&amp;#039;)-&amp;gt;field(&amp;#039;subjects&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;where(&amp;#039;subjects&amp;#039;)-&amp;gt;equals($resultSubjects);	&lt;br /&gt;
	&lt;br /&gt;
	switch ($mode){&lt;br /&gt;
		case &amp;#039;or&amp;#039;:&lt;br /&gt;
			$allItems = array();&lt;br /&gt;
			$allItems = $itemsQuery-&amp;gt;result();&lt;br /&gt;
			&lt;br /&gt;
			if(count($allItems) === 0){&lt;br /&gt;
				return $template_block_empty;&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
			foreach($allItems as $oneItem){				&lt;br /&gt;
				$items = array();&lt;br /&gt;
				$items[] = $oneItem-&amp;gt;getValue(&amp;#039;subjects&amp;#039;);&lt;br /&gt;
				&lt;br /&gt;
				foreach($items as $item){					&lt;br /&gt;
					$test = array();&lt;br /&gt;
					$test = array_diff($resultSubjects, $item);	&lt;br /&gt;
					&lt;br /&gt;
					if (count($test) === 0){		&lt;br /&gt;
					&lt;br /&gt;
						if($countSubject &amp;gt; 1){		&lt;br /&gt;
							$resultItems[] = $oneItem;		&lt;br /&gt;
							&lt;br /&gt;
						}elseif(count($item) === 1){		&lt;br /&gt;
							$resultItems[] = $oneItem;			&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			unset($itemsQuery, $allItems, $oneItem, $items, $item, $test, $resultSubjects, $countSubject);&lt;br /&gt;
			&lt;br /&gt;
			usort($resultItems, function($a, $b){&lt;br /&gt;
			&lt;br /&gt;
				$a_publishTime = $a-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;);&lt;br /&gt;
				$b_publishTime = $b-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;);&lt;br /&gt;
				&lt;br /&gt;
				if ($a_publishTime == $b_publishTime) {&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				return ($a_publishTime &amp;gt; $b_publishTime) ? -1 : 1;&lt;br /&gt;
			});&lt;br /&gt;
			&lt;br /&gt;
			if(intval($ignore_paging) === 0){&lt;br /&gt;
				$offset = 0;&lt;br /&gt;
				$offset = intval($currPageNum) * intval($per_page);&lt;br /&gt;
				&lt;br /&gt;
				$resultItems = array_slice($resultItems, $offset, $per_page);&lt;br /&gt;
				unset($offset);&lt;br /&gt;
			}&lt;br /&gt;
			$total = 0;&lt;br /&gt;
			$total = count($resultItems);&lt;br /&gt;
			&lt;br /&gt;
		break;&lt;br /&gt;
		&lt;br /&gt;
		case &amp;#039;and&amp;#039;:&lt;br /&gt;
			unset($resultSubjects, $countSubject);&lt;br /&gt;
			&lt;br /&gt;
			$itemsQuery-&amp;gt;order(&amp;#039;publish_time&amp;#039;)-&amp;gt;desc();&lt;br /&gt;
			&lt;br /&gt;
			if(intval($ignore_paging) === 0){&lt;br /&gt;
				$offset  = 0;&lt;br /&gt;
				$offset  = intval($currPageNum) * intval($per_page);&lt;br /&gt;
				$itemsQuery-&amp;gt;limit($offset , intval($per_page));&lt;br /&gt;
			}&lt;br /&gt;
			$total = 0;&lt;br /&gt;
			$total = $itemsQuery-&amp;gt;length();&lt;br /&gt;
			$resultItems = $itemsQuery-&amp;gt;result();&lt;br /&gt;
			unset($itemsQuery, $offset);&lt;br /&gt;
			&lt;br /&gt;
		break;&lt;br /&gt;
		&lt;br /&gt;
		default:&lt;br /&gt;
			throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макросе news subjectsList() необходимо указать корректное значение параметра $mode (or или and)&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}			&lt;br /&gt;
	if($total === 0){&lt;br /&gt;
		return $template_block_empty;&lt;br /&gt;
	}else{&lt;br /&gt;
		$lines = Array();&lt;br /&gt;
		$block_arr = Array();&lt;br /&gt;
&lt;br /&gt;
		foreach ($resultItems as $resultItem){&lt;br /&gt;
			$line_arr = array();&lt;br /&gt;
&lt;br /&gt;
			$itemId = $resultItem-&amp;gt;id;&lt;br /&gt;
			$line_arr[&amp;#039;attribute:id&amp;#039;] = $itemId;&lt;br /&gt;
			$line_arr[&amp;#039;attribute:link&amp;#039;] = $resultItem-&amp;gt;link;&lt;br /&gt;
			$line_arr[&amp;#039;xlink:href&amp;#039;] = &amp;quot;upage://&amp;quot; . $itemId;&lt;br /&gt;
			$line_arr[&amp;#039;void:header&amp;#039;] = $lines_arr[&amp;#039;name&amp;#039;] = $resultItem-&amp;gt;getName();&lt;br /&gt;
			$line_arr[&amp;#039;node:name&amp;#039;] =  $resultItem-&amp;gt;getName();&lt;br /&gt;
&lt;br /&gt;
			if($publish_time = $resultItem-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;)){&lt;br /&gt;
				$line_arr[&amp;#039;attribute:publish_time&amp;#039;] = $publish_time-&amp;gt;getFormattedDate(&amp;quot;U&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			unset($resultItems, $resultItem);&lt;br /&gt;
			&lt;br /&gt;
			$lines[] = def_module::parseTemplate($template_line, $line_arr, $itemId);&lt;br /&gt;
			unset($line_arr);&lt;br /&gt;
			&lt;br /&gt;
			$this-&amp;gt;pushEditable(&amp;quot;news&amp;quot;, &amp;quot;item&amp;quot;, $itemId);&lt;br /&gt;
			unset($itemId);&lt;br /&gt;
		}&lt;br /&gt;
		$block_arr[&amp;#039;subnodes:items&amp;#039;] = $block_arr[&amp;#039;void:lines&amp;#039;] = $lines;&lt;br /&gt;
		unset($lines);&lt;br /&gt;
		&lt;br /&gt;
		$block_arr[&amp;#039;total&amp;#039;] = $total;&lt;br /&gt;
		$block_arr[&amp;#039;per_page&amp;#039;] = $per_page;&lt;br /&gt;
		unset($total, $per_page);&lt;br /&gt;
		&lt;br /&gt;
		return def_module::parseTemplate($template_block, $block_arr);	&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Применение в xslt ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример вызова&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
udata/news/subjectsList/(eco;pol)//or/3/1/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XML-ответ UData&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;udata xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; module=&amp;quot;news&amp;quot; method=&amp;quot;subjectsList&amp;quot; generation-time=&amp;quot;0.075129&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;items&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;191&amp;quot; link=&amp;quot;/novosti3/novost7/&amp;quot; xlink:href=&amp;quot;upage://191&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость7&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;190&amp;quot; link=&amp;quot;/novosti3/novost6/&amp;quot; xlink:href=&amp;quot;upage://190&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость6&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;189&amp;quot; link=&amp;quot;/novosti3/novost5/&amp;quot; xlink:href=&amp;quot;upage://189&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость5&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;187&amp;quot; link=&amp;quot;/novosti2/novost4/&amp;quot; xlink:href=&amp;quot;upage://187&amp;quot; publish_time=&amp;quot;1382001240&amp;quot;&amp;gt;Новость4&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;185&amp;quot; link=&amp;quot;/novosti2/novost2/&amp;quot; xlink:href=&amp;quot;upage://185&amp;quot; publish_time=&amp;quot;1381913100&amp;quot;&amp;gt;Новость2&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;184&amp;quot; link=&amp;quot;/novosti2/novost1/&amp;quot; xlink:href=&amp;quot;upage://184&amp;quot; publish_time=&amp;quot;1381826640&amp;quot;&amp;gt;Новость1&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;186&amp;quot; link=&amp;quot;/news1/novost3/&amp;quot; xlink:href=&amp;quot;upage://186&amp;quot; publish_time=&amp;quot;1381742040&amp;quot;&amp;gt;Новость3&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;78&amp;quot; link=&amp;quot;/news1/speshite_akciya/&amp;quot; xlink:href=&amp;quot;upage://78&amp;quot; publish_time=&amp;quot;1261279500&amp;quot;&amp;gt;Новость9&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;79&amp;quot; link=&amp;quot;/news1/ne_speshite_ona_zakonchilas/&amp;quot; xlink:href=&amp;quot;upage://79&amp;quot; publish_time=&amp;quot;1259020800&amp;quot;&amp;gt;Новость8&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/items&amp;gt;&lt;br /&gt;
   &amp;lt;total&amp;gt;9&amp;lt;/total&amp;gt;&lt;br /&gt;
   &amp;lt;per_page&amp;gt;3&amp;lt;/per_page&amp;gt;&lt;br /&gt;
&amp;lt;/udata&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Элементы и атрибуты&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;items&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Ветвь, содержащая элементы item — новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;item&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Элемент, описывающий отдельную новость. Значение элемента — название страницы новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@id&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Идентификатор страницы новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@link&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Ссылка на страницу полного текста новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@xlink:href&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
    &lt;br /&gt;
    Ссылка UPage на страницу полного текста новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@publish_time&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Время публикации новости в UNIX TIMESTAMP.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;total&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Общее количество полученных новостей.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;per_page&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Количество новостей, отображаемых на странице.&lt;br /&gt;
&lt;br /&gt;
== Применение в tpl ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример вызова макроса&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%news subjectsList(&amp;#039;eco;pol&amp;#039;, &amp;#039;default&amp;#039;, &amp;#039;or&amp;#039;, &amp;#039;10&amp;#039;, &amp;#039;1&amp;#039;)%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Используемые шаблоны&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Макрос оперирует шаблонами, находящимися в каталоге /tpls/news/. Вывод макроса осуществляется по шаблону, указанному в параметре template. &lt;br /&gt;
Вы можете не указывать этот параметр, тогда для вывода будет использован шаблон по умолчанию — default.tpl.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Используемые блоки шаблона&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;items_block&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Выводит обрамляющий блок для вывода результатов работы макроса, куда будут подставляться результирующие элементы. Отдельные новости будут отрисованы по блоку item.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%items%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит список страниц, отрисованных с помощью блока item_block.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;item_block&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Отвечает за вывод отдельной новости, полученной в результате работы макроса.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%id%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит id новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%link%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит uri новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%value%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит название новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%publish_time%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит время публикации новости в UNIX TIMESTAMP.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%total%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Общее количество полученных новостей.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%per_page%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит количество новостей, отображаемых на странице.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;items_block_empty&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
 &lt;br /&gt;
Используется вместо блока items_block в том случае, если новостей, которые необходимо вывести нет.&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B5%D0%B9_%D0%BF%D0%BE_%D1%81%D1%8E%D0%B6%D0%B5%D1%82%D1%83&amp;diff=7995</id>
		<title>Вывод новостей по сюжету</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B5%D0%B9_%D0%BF%D0%BE_%D1%81%D1%8E%D0%B6%D0%B5%D1%82%D1%83&amp;diff=7995"/>
		<updated>2016-02-02T08:17:55Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;В этой статье будет приведен макрос, решающий нашу задачу, но сначала нужно будет внести некоторые изменения в тип данных&lt;br /&gt;
&amp;quot;Сюжет публикации&amp;quot;, добавим в этот тип данных следующую группу полей и поле, обязательно с теми же идентификаторами:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject2.png]]&lt;br /&gt;
&lt;br /&gt;
Для использования, приведённого ниже, макроса, нам нужно будет заполнить созданное поле у элементов справочника &amp;quot;Сюжет публикации&amp;quot;,&lt;br /&gt;
обязательно латинскими буквами, например так:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject3.png]]&lt;br /&gt;
&lt;br /&gt;
А потом можно будет выбрать эти значения у новостей:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Subject4.png]]&lt;br /&gt;
&lt;br /&gt;
== Описание макроса ==&lt;br /&gt;
&lt;br /&gt;
%news subjectsList()% — выводит новости, относящиеся к выбранн(ому)ым сюже(ту)там.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Параметры: news subjectsList($id, [$template = &amp;#039;default&amp;#039;, $mode = &amp;#039;and&amp;#039;, $per_page = 0, $ignore_paging = false])&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$id&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает идентификатор сюжета, поле, которое мы создали ранее. Можно указать несколько идентификатором через знак &amp;quot;;&amp;quot;.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$template &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает имя шаблона, по которому выводится результат макроса, если его не указать, то он принимает значение &amp;#039;default&amp;#039; В XSLT-шаблонизаторе игнорируется.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$mode&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимаем два значения &amp;#039;and&amp;#039; и &amp;#039;or&amp;#039;, когда выбрано &amp;#039;and&amp;#039;, макрос возвращает новости, среди сюжетов которых присутствуют указанные в параметре $id сюжеты,&lt;br /&gt;
   когда выбрано &amp;#039;or&amp;#039;, макрос возвращаем новости, у которых сюжеты полностью совпадают с указанными в параметре $id сюжетами. Если параметр не указать, то&lt;br /&gt;
   будет по-умолчанию равен &amp;#039;and&amp;#039;.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$per_page &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимает число, которое обозначает максимальное количество новостей. Если этот параметр не указывать, будет взято значение, указанное в настройках модуля «Новости».&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;$ignore_paging &amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
   Принимаем булево значение («1» или «0»), указывающее макросу игнорировать значение текущей страницы списка вывода (параметр http-запроса p). То есть, если указать «1»,&lt;br /&gt;
   макрос будет всегда выводить только первую страницу списка новостей.&lt;br /&gt;
&lt;br /&gt;
Для применения этого макроса скопируйте содержимое листинга макроса в файл /classes/modules/news/__custom.php, и не забудьте указать имя метода в permissions.custom.php, то&lt;br /&gt;
есть создать такой файл в директории /classes/modules/news/ со следующим содержимым:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
   $permissions = array(&lt;br /&gt;
	&amp;#039;view&amp;#039; =&amp;gt; array(&lt;br /&gt;
			&amp;#039;subjectsList&amp;#039;&lt;br /&gt;
		)&lt;br /&gt;
	);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Листинг макроса ==&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function subjectsList($id = &amp;#039;&amp;#039;, $template = &amp;#039;&amp;#039;, $mode = &amp;#039;&amp;#039;, $per_page = 0, $ignore_paging = false){&lt;br /&gt;
	if(!$id){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макросе news subjectsList() необходимо указать первый параметр $id&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$id = preg_replace(&amp;#039;/\s/&amp;#039;, &amp;#039;&amp;#039;, $id);&lt;br /&gt;
	$parsId = array();&lt;br /&gt;
	$parsId = explode(&amp;#039;;&amp;#039;,$id);&lt;br /&gt;
	unset($id);&lt;br /&gt;
&lt;br /&gt;
	if(!$template){&lt;br /&gt;
		$template = &amp;#039;default&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!$mode){&lt;br /&gt;
		$mode = &amp;#039;and&amp;#039;;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!$per_page){&lt;br /&gt;
		(int) $per_page = $this-&amp;gt;per_page;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!is_numeric($per_page)){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макрос news subjectsList() передано некорректно значение номера страницы&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	list($template_block, $template_block_empty, $template_line) = def_module::loadTemplates(&amp;quot;news/&amp;quot;.$template, &amp;quot;items_block&amp;quot;, &amp;quot;items_block_empty&amp;quot;, &amp;quot;item_block&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	$currPageNum = getRequest(&amp;#039;p&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$resultSubjects = array();&lt;br /&gt;
	$subjectsQuery = new selector(&amp;#039;objects&amp;#039;);&lt;br /&gt;
	$subjectsQuery-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;name(&amp;#039;news&amp;#039;, &amp;#039;subject&amp;#039;);&lt;br /&gt;
	$subjectsQuery-&amp;gt;where(&amp;#039;subject-id&amp;#039;)-&amp;gt;equals($parsId);&lt;br /&gt;
	$resultSubjects = $subjectsQuery-&amp;gt;result();&lt;br /&gt;
	unset($subjectsQuery, $parsId);&lt;br /&gt;
&lt;br /&gt;
	(int) $countSubject = count($resultSubjects);&lt;br /&gt;
&lt;br /&gt;
	if($countSubject === 0){&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;b&amp;gt;Сюжеты с переданными id не найдены&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$resultItems = array();&lt;br /&gt;
	$itemsQuery = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;name(&amp;#039;news&amp;#039;, &amp;#039;item&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;option(&amp;#039;or-mode&amp;#039;)-&amp;gt;field(&amp;#039;subjects&amp;#039;);&lt;br /&gt;
	$itemsQuery-&amp;gt;where(&amp;#039;subjects&amp;#039;)-&amp;gt;equals($resultSubjects);&lt;br /&gt;
&lt;br /&gt;
	switch ($mode){&lt;br /&gt;
		case &amp;#039;or&amp;#039;:&lt;br /&gt;
			$allItems = array();&lt;br /&gt;
			$allItems = $itemsQuery-&amp;gt;result();&lt;br /&gt;
&lt;br /&gt;
			if(count($allItems) === 0){&lt;br /&gt;
				return $template_block_empty;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			foreach($allItems as $oneItem){&lt;br /&gt;
				$items = array();&lt;br /&gt;
				$items[] = $oneItem-&amp;gt;getValue(&amp;#039;subjects&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
				foreach($items as $item){&lt;br /&gt;
					$test = array();&lt;br /&gt;
					$test = array_diff($resultSubjects, $item);&lt;br /&gt;
&lt;br /&gt;
					if (count($test) === 0){&lt;br /&gt;
&lt;br /&gt;
						if($countSubject &amp;gt; 1){&lt;br /&gt;
							$resultItems[] = $oneItem;&lt;br /&gt;
&lt;br /&gt;
						}elseif(count($item) === 1){&lt;br /&gt;
							$resultItems[] = $oneItem;&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
			unset($itemsQuery, $allItems, $oneItem, $items, $item, $test, $resultSubjects, $countSubject);&lt;br /&gt;
&lt;br /&gt;
			usort($resultItems, function($a, $b){&lt;br /&gt;
&lt;br /&gt;
				$a_publishTime = $a-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;);&lt;br /&gt;
				$b_publishTime = $b-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
				if ($a_publishTime == $b_publishTime) {&lt;br /&gt;
					return 0;&lt;br /&gt;
				}&lt;br /&gt;
				return ($a_publishTime &amp;gt; $b_publishTime) ? -1 : 1;&lt;br /&gt;
			});&lt;br /&gt;
&lt;br /&gt;
			if(intval($ignore_paging) === 0){&lt;br /&gt;
				$offset = 0;&lt;br /&gt;
				$offset = intval($currPageNum) * intval($per_page);&lt;br /&gt;
&lt;br /&gt;
				$resultItems = array_slice($resultItems, $offset, $per_page);&lt;br /&gt;
				unset($offset);&lt;br /&gt;
			}&lt;br /&gt;
			$total = 0;&lt;br /&gt;
			$total = count($resultItems);&lt;br /&gt;
&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
		case &amp;#039;and&amp;#039;:&lt;br /&gt;
			unset($resultSubjects, $countSubject);&lt;br /&gt;
&lt;br /&gt;
			$itemsQuery-&amp;gt;order(&amp;#039;publish_time&amp;#039;)-&amp;gt;desc();&lt;br /&gt;
&lt;br /&gt;
			if(intval($ignore_paging) === 0){&lt;br /&gt;
				$offset  = 0;&lt;br /&gt;
				$offset  = intval($currPageNum) * intval($per_page);&lt;br /&gt;
				$itemsQuery-&amp;gt;limit($offset , intval($per_page));&lt;br /&gt;
			}&lt;br /&gt;
			$total = 0;&lt;br /&gt;
			$total = $itemsQuery-&amp;gt;length();&lt;br /&gt;
			$resultItems = $itemsQuery-&amp;gt;result();&lt;br /&gt;
			unset($itemsQuery, $offset);&lt;br /&gt;
&lt;br /&gt;
		break;&lt;br /&gt;
&lt;br /&gt;
		default:&lt;br /&gt;
			throw new publicException(&amp;#039;&amp;lt;b&amp;gt;В макросе news subjectsList() необходимо указать корректное значение параметра $mode (or или and)&amp;lt;/b&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
	if($total === 0){&lt;br /&gt;
		return $template_block_empty;&lt;br /&gt;
	}else{&lt;br /&gt;
		$lines = Array();&lt;br /&gt;
		$block_arr = Array();&lt;br /&gt;
&lt;br /&gt;
		foreach ($resultItems as $resultItem){&lt;br /&gt;
			$line_arr = array();&lt;br /&gt;
&lt;br /&gt;
			$itemId = $resultItem-&amp;gt;id;&lt;br /&gt;
			$line_arr[&amp;#039;attribute:id&amp;#039;] = $itemId;&lt;br /&gt;
			$line_arr[&amp;#039;attribute:link&amp;#039;] = $resultItem-&amp;gt;link;&lt;br /&gt;
			$line_arr[&amp;#039;xlink:href&amp;#039;] = &amp;quot;upage://&amp;quot; . $itemId;&lt;br /&gt;
			$line_arr[&amp;#039;void:header&amp;#039;] = $lines_arr[&amp;#039;name&amp;#039;] = $resultItem-&amp;gt;getName();&lt;br /&gt;
			$line_arr[&amp;#039;node:name&amp;#039;] =  $resultItem-&amp;gt;getName();&lt;br /&gt;
&lt;br /&gt;
			if($publish_time = $resultItem-&amp;gt;getValue(&amp;#039;publish_time&amp;#039;)){&lt;br /&gt;
				$line_arr[&amp;#039;attribute:publish_time&amp;#039;] = $publish_time-&amp;gt;getFormattedDate(&amp;quot;U&amp;quot;);&lt;br /&gt;
			}&lt;br /&gt;
			unset($resultItems, $resultItem);&lt;br /&gt;
&lt;br /&gt;
			$lines[] = def_module::parseTemplate($template_line, $line_arr, $itemId);&lt;br /&gt;
			unset($line_arr);&lt;br /&gt;
&lt;br /&gt;
			$this-&amp;gt;pushEditable(&amp;quot;news&amp;quot;, &amp;quot;item&amp;quot;, $itemId);&lt;br /&gt;
			unset($itemId);&lt;br /&gt;
		}&lt;br /&gt;
		$block_arr[&amp;#039;subnodes:items&amp;#039;] = $block_arr[&amp;#039;void:lines&amp;#039;] = $lines;&lt;br /&gt;
		unset($lines);&lt;br /&gt;
&lt;br /&gt;
		$block_arr[&amp;#039;total&amp;#039;] = $total;&lt;br /&gt;
		$block_arr[&amp;#039;per_page&amp;#039;] = $per_page;&lt;br /&gt;
		unset($total, $per_page);&lt;br /&gt;
&lt;br /&gt;
		return def_module::parseTemplate($template_block, $block_arr);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
== Применение в xslt ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример вызова&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
udata/news/subjectsList/(eco;pol)//or/3/1/&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;XML-ответ UData&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;udata xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; module=&amp;quot;news&amp;quot; method=&amp;quot;subjectsList&amp;quot; generation-time=&amp;quot;0.075129&amp;quot;&amp;gt;&lt;br /&gt;
   &amp;lt;items&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;191&amp;quot; link=&amp;quot;/novosti3/novost7/&amp;quot; xlink:href=&amp;quot;upage://191&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость7&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;190&amp;quot; link=&amp;quot;/novosti3/novost6/&amp;quot; xlink:href=&amp;quot;upage://190&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость6&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;189&amp;quot; link=&amp;quot;/novosti3/novost5/&amp;quot; xlink:href=&amp;quot;upage://189&amp;quot; publish_time=&amp;quot;1382102520&amp;quot;&amp;gt;Новость5&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;187&amp;quot; link=&amp;quot;/novosti2/novost4/&amp;quot; xlink:href=&amp;quot;upage://187&amp;quot; publish_time=&amp;quot;1382001240&amp;quot;&amp;gt;Новость4&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;185&amp;quot; link=&amp;quot;/novosti2/novost2/&amp;quot; xlink:href=&amp;quot;upage://185&amp;quot; publish_time=&amp;quot;1381913100&amp;quot;&amp;gt;Новость2&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;184&amp;quot; link=&amp;quot;/novosti2/novost1/&amp;quot; xlink:href=&amp;quot;upage://184&amp;quot; publish_time=&amp;quot;1381826640&amp;quot;&amp;gt;Новость1&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;186&amp;quot; link=&amp;quot;/news1/novost3/&amp;quot; xlink:href=&amp;quot;upage://186&amp;quot; publish_time=&amp;quot;1381742040&amp;quot;&amp;gt;Новость3&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;78&amp;quot; link=&amp;quot;/news1/speshite_akciya/&amp;quot; xlink:href=&amp;quot;upage://78&amp;quot; publish_time=&amp;quot;1261279500&amp;quot;&amp;gt;Новость9&amp;lt;/item&amp;gt;&lt;br /&gt;
      &amp;lt;item id=&amp;quot;79&amp;quot; link=&amp;quot;/news1/ne_speshite_ona_zakonchilas/&amp;quot; xlink:href=&amp;quot;upage://79&amp;quot; publish_time=&amp;quot;1259020800&amp;quot;&amp;gt;Новость8&amp;lt;/item&amp;gt;&lt;br /&gt;
   &amp;lt;/items&amp;gt;&lt;br /&gt;
   &amp;lt;total&amp;gt;9&amp;lt;/total&amp;gt;&lt;br /&gt;
   &amp;lt;per_page&amp;gt;3&amp;lt;/per_page&amp;gt;&lt;br /&gt;
&amp;lt;/udata&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Элементы и атрибуты&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;items&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Ветвь, содержащая элементы item — новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;item&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Элемент, описывающий отдельную новость. Значение элемента — название страницы новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@id&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Идентификатор страницы новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@link&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Ссылка на страницу полного текста новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@xlink:href&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Ссылка UPage на страницу полного текста новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;@publish_time&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Время публикации новости в UNIX TIMESTAMP.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;total&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Общее количество полученных новостей.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;lt;per_page&amp;gt;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Количество новостей, отображаемых на странице.&lt;br /&gt;
&lt;br /&gt;
== Применение в tpl ==&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пример вызова макроса&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%news subjectsList(&amp;#039;eco;pol&amp;#039;, &amp;#039;subjects&amp;#039;, &amp;#039;or&amp;#039;, &amp;#039;10&amp;#039;, &amp;#039;1&amp;#039;)%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы вызов сработал, нужно создать файл /tpls/news/subjects.tpl с таким содержимым:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$FORMS = Array();&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;item_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;li&amp;gt;&lt;br /&gt;
	&amp;lt;p&amp;gt;Новость&amp;lt;p&amp;gt;&lt;br /&gt;
&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;items_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;ul&amp;gt;%items%&amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;items_block_empty&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;p&amp;gt;Нет таких новостей.&amp;lt;/p&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Используемые шаблоны&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Макрос оперирует шаблонами, находящимися в каталоге /tpls/news/. Вывод макроса осуществляется по шаблону, указанному в параметре template.&lt;br /&gt;
Вы можете не указывать этот параметр, тогда для вывода будет использован шаблон по умолчанию — default.tpl.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Используемые блоки шаблона&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;items_block&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Выводит обрамляющий блок для вывода результатов работы макроса, куда будут подставляться результирующие элементы. Отдельные новости будут отрисованы по блоку item.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%items%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит список страниц, отрисованных с помощью блока item_block.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;item_block&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Отвечает за вывод отдельной новости, полученной в результате работы макроса.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%id%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит id новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%link%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит uri новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%value%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит название новости.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%publish_time%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит время публикации новости в UNIX TIMESTAMP.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%total%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Общее количество полученных новостей.&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;%per_page%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
    Выводит количество новостей, отображаемых на странице.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;items_block_empty&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Используется вместо блока items_block в том случае, если новостей, которые необходимо вывести нет.&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0_%D1%8D%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_YML_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_cron&amp;diff=7994</id>
		<title>Автоматическая подготовка экспорта в формат YML с помощью cron</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%90%D0%B2%D1%82%D0%BE%D0%BC%D0%B0%D1%82%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B0%D1%8F_%D0%BF%D0%BE%D0%B4%D0%B3%D0%BE%D1%82%D0%BE%D0%B2%D0%BA%D0%B0_%D1%8D%D0%BA%D1%81%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D0%B2_%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%82_YML_%D1%81_%D0%BF%D0%BE%D0%BC%D0%BE%D1%89%D1%8C%D1%8E_cron&amp;diff=7994"/>
		<updated>2016-02-01T12:39:12Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.11&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Если на вашем сайте большое количество товаров и, соответственно, подготовка экспорта в формат YML занимает продолжительное время, то возникает необходимость запускать данную подготовку, например, ночью, чтобы днем была меньше нагрузка на сайт. Для выполнения данной задачи необходимо сделать следующее:&lt;br /&gt;
&lt;br /&gt;
1) В папке classes/modules/exchange разместите файл custom_events.php , и в нем пропишите следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	new umiEventListener(&amp;quot;cron&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;prepareElementsToExportCustom&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) В файле classes/modules/exchange/__custom.php  после строки //TODO: Write your macroses here добавьте следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function prepareElementsToExportCustom() {&lt;br /&gt;
	$objectId = &amp;#039;885&amp;#039;; // пропишите в эту переменную id выгрузки YML&lt;br /&gt;
&lt;br /&gt;
	$objects = umiObjectsCollection::getInstance();&lt;br /&gt;
	$object = $objects-&amp;gt;getObject($objectId);&lt;br /&gt;
	$formatId = $object-&amp;gt;format;&lt;br /&gt;
	$format = $objects-&amp;gt;getObject($formatId);&lt;br /&gt;
	$suffix = $format-&amp;gt;sid;&lt;br /&gt;
	if($suffix != &amp;#039;YML&amp;#039;) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(!file_exists(CURRENT_WORKING_DIR . &amp;quot;/sys-temp/yml/&amp;quot; . $objectId . &amp;#039;el&amp;#039;)) {&lt;br /&gt;
		throw new publicException(&amp;#039;&amp;lt;a href=&amp;quot;&amp;#039; . getLabel(&amp;quot;label-errors-no-information&amp;quot;) . &amp;#039;&amp;quot; target=&amp;quot;blank&amp;quot;&amp;gt;&amp;#039; . getLabel(&amp;quot;label-errors-no-information&amp;quot;) .&amp;#039;&amp;lt;/a&amp;gt;&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$elements = unserialize(file_get_contents(CURRENT_WORKING_DIR . &amp;quot;/sys-temp/yml/&amp;quot; . $objectId . &amp;#039;el&amp;#039;));&lt;br /&gt;
	$hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
&lt;br /&gt;
	foreach ($elements as $elementId) {&lt;br /&gt;
		$element = $hierarchy-&amp;gt;getElement($elementId);&lt;br /&gt;
&lt;br /&gt;
		if ($element instanceof umiHierarchyElement) {&lt;br /&gt;
			try {&lt;br /&gt;
				$element-&amp;gt;updateYML();&lt;br /&gt;
			} catch (Exception $e) {&lt;br /&gt;
				echo $e-&amp;gt;getMessage() . &amp;quot; #{$elementId}&amp;quot;;&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все, теперь осталось только настроить автоматический запуск cron на какое-то время, это вы самостоятельно устанавливаете на хостинге, информацию о cron в нашей документации вы можете посмотреть здесь: http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ .&lt;br /&gt;
&lt;br /&gt;
Обратите внимание: в скрипте загружаются все товары сразу, поэтому на обработку большого каталога может уйти много оперативной памяти и времени.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C:_%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%BF%D1%80%D0%B8_%D0%B2%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA_%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8&amp;diff=7993</id>
		<title>Обратная связь: Сохранение значений полей при возникновении ошибок отправки</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9E%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%B0%D1%8F_%D1%81%D0%B2%D1%8F%D0%B7%D1%8C:_%D0%A1%D0%BE%D1%85%D1%80%D0%B0%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%BD%D0%B0%D1%87%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%BF%D1%80%D0%B8_%D0%B2%D0%BE%D0%B7%D0%BD%D0%B8%D0%BA%D0%BD%D0%BE%D0%B2%D0%B5%D0%BD%D0%B8%D0%B8_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA_%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8&amp;diff=7993"/>
		<updated>2016-01-27T07:53:22Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;Проблема: при отправке сообщения из формы обратной связи с некорректно заполненными полями после сообщения об ошибке значения полей исчезают.&amp;#039;&amp;#039;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Чтобы введенные ранее значения полей оставались после перезагрузки страницы, предлагаем следующее решение для макроса &amp;#039;&amp;#039;&amp;#039;%webforms add()%&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Правим шаблон по которому у вас выводится форма. &amp;lt;!-- &amp;#039;&amp;#039;&amp;#039;tpls/data/reflection/webforms.tpl&amp;#039;&amp;#039;&amp;#039; --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;!-- В блоке &amp;#039;&amp;#039;&amp;#039;form_block&amp;#039;&amp;#039;&amp;#039; --&amp;gt; Необходимо добавить в тег &amp;#039;&amp;#039;&amp;#039;&amp;lt;form&amp;gt;&amp;#039;&amp;#039;&amp;#039; параметры &amp;#039;&amp;#039;&amp;#039;id=&amp;quot;webform&amp;quot;&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;onsubmit=&amp;quot;saveFormData(this); return true;&amp;quot;&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
Ниже тега &amp;#039;&amp;#039;&amp;#039;&amp;lt;/form&amp;gt;&amp;#039;&amp;#039;&amp;#039; добавим следующий скрипт:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	restoreFormData(document.getElementById(&amp;#039;webform&amp;#039;));&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если в шаблон ранее не вносилось поправок, блок будет выглядеть следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
$FORMS[&amp;#039;form_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;form enctype=&amp;quot;multipart/form-data&amp;quot; method=&amp;quot;post&amp;quot; action=&amp;quot;/webforms/send/&amp;quot; id=&amp;quot;webform&amp;quot; onsubmit=&amp;quot;saveFormData(this); return true;&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;system_form_id&amp;quot; value=&amp;quot;%form_id%&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;system_template&amp;quot; value=&amp;quot;%template%&amp;quot; /&amp;gt;&lt;br /&gt;
	%address_select%&lt;br /&gt;
	%groups%&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot;&amp;gt;&lt;br /&gt;
	restoreFormData(document.getElementById(&amp;#039;webform&amp;#039;));&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь при возникновении ошибок при отправке сообщения значения полей будут сохраняться.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Добавленные функции находятся в файле &amp;#039;&amp;#039;&amp;#039;js/guest.js&amp;#039;&amp;#039;&amp;#039;, по-этому, что бы функционал работал, в шаблоне страницы этот скрипт должен вызываться. Вызов этого скрипта осуществляет макрос &amp;#039;&amp;#039;&amp;#039;%system includeQuickEditJs()%&amp;#039;&amp;#039;&amp;#039;. Имейте в виду, что по умолчанию файл &amp;#039;&amp;#039;&amp;#039;js/guest.js&amp;#039;&amp;#039;&amp;#039; подключается только для пользователя-гостя. Если Вы хотите, чтобы функции были доступны для всех типов пользователей, можно создать новый файл с функциями &amp;#039;&amp;#039;&amp;#039;saveFormData&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;restoreFormData&amp;#039;&amp;#039;&amp;#039; и подключать его вручную.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Модуль Обратная связь]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=XSLT_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%B2%D1%81%D0%B5%D1%85_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BE%D0%B2&amp;diff=7992</id>
		<title>XSLT шаблоны для всех типов баннеров</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=XSLT_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B_%D0%B4%D0%BB%D1%8F_%D0%B2%D1%81%D0%B5%D1%85_%D1%82%D0%B8%D0%BF%D0%BE%D0%B2_%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%BE%D0%B2&amp;diff=7992"/>
		<updated>2016-01-20T10:39:30Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория: Верстка в XSLT]][[Категория: Модуль Баннеры]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.6&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Задача:&amp;#039;&amp;#039;&amp;#039; Добавить шаблоны вывода баннеров всех типов: с картинкой, флэшкой и HTML.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Реализация:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
&lt;br /&gt;
В директории с XSLT-шаблонами (папка &amp;#039;&amp;#039;&amp;#039;./xsltTpls&amp;#039;&amp;#039;&amp;#039; или &amp;#039;&amp;#039;&amp;#039;./templates/имя_шаблона/xslt&amp;#039;&amp;#039;&amp;#039; при новом формате хранения шаблонов) создадим новый файл banners.xsl и добавим в него следующее содержимое:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet	version=&amp;quot;1.0&amp;quot;&lt;br /&gt;
				xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot;&lt;br /&gt;
				xmlns:date=&amp;quot;http://exslt.org/dates-and-times&amp;quot;&lt;br /&gt;
				xmlns:udt=&amp;quot;http://umi-cms.ru/2007/UData/templates&amp;quot;&lt;br /&gt;
				xmlns:umi=&amp;quot;http://www.umi-cms.ru/TR/umi&amp;quot;&lt;br /&gt;
				xmlns:xlink=&amp;quot;http://www.w3.org/1999/xlink&amp;quot;&lt;br /&gt;
				exclude-result-prefixes=&amp;quot;xsl date udt xlink&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;udata[@module = &amp;#039;banners&amp;#039;][@method = &amp;#039;fastInsert&amp;#039;]&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;udata[@module = &amp;#039;banners&amp;#039;][@method = &amp;#039;fastInsert&amp;#039;][banner]&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;div class=&amp;quot;gray_block&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;banner&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;udata[@module = &amp;#039;banners&amp;#039;][@method = &amp;#039;fastInsert&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:apply-templates select=&amp;quot;banner&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;banner&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;banner[@type = &amp;#039;image&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:when test=&amp;quot;href&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a href=&amp;quot;/banners/go_to/{/udata/@id}/&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:if test=&amp;quot;@target&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:attribute name=&amp;quot;target&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:value-of select=&amp;quot;@target&amp;quot; /&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
					&amp;lt;img src=&amp;quot;{source}&amp;quot; width=&amp;quot;{@width}&amp;quot; height=&amp;quot;{@height}&amp;quot; alt=&amp;quot;{alt}&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:otherwise&amp;gt;&lt;br /&gt;
				&amp;lt;img src=&amp;quot;{source}&amp;quot; width=&amp;quot;{@width}&amp;quot; height=&amp;quot;{@height}&amp;quot; alt=&amp;quot;{alt}&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:otherwise&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;banner[@type = &amp;#039;swf&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;object	width=&amp;quot;{@width}&amp;quot; height=&amp;quot;{@height}&amp;quot; align=&amp;quot;middle&amp;quot; &lt;br /&gt;
				codebase=&amp;quot;http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=7,0,0,0&amp;quot; &lt;br /&gt;
				classid=&amp;quot;clsid:d27cdb6e-ae6d-11cf-96b8-444553540000&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;allowScriptAccess&amp;quot; value=&amp;quot;sameDomain&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;movie&amp;quot; value=&amp;quot;{source}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;quality&amp;quot; value=&amp;quot;high&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;bgcolor&amp;quot; value=&amp;quot;#ffffff&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;param name=&amp;quot;wmode&amp;quot; value=&amp;quot;opaque&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:if test=&amp;quot;href&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;param name=&amp;quot;flashVars&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:attribute name=&amp;quot;value&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:text&amp;gt;url=/banners/go_to/&amp;lt;/xsl:text&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;/udata/@id&amp;quot; /&amp;gt;&amp;lt;xsl:text&amp;gt;/&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:if test=&amp;quot;@target&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:text&amp;gt;&amp;amp;amp;target=&amp;lt;/xsl:text&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@target&amp;quot; /&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
				&amp;lt;/param&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
			&amp;lt;embed	width=&amp;quot;{@width}&amp;quot; height=&amp;quot;{@height}&amp;quot; align=&amp;quot;middle&amp;quot; wmode=&amp;quot;opaque&amp;quot; &lt;br /&gt;
					pluginspage=&amp;quot;http://www.macromedia.com/go/getflashplayer&amp;quot; &lt;br /&gt;
					type=&amp;quot;application/x-shockwave-flash&amp;quot; allowscriptaccess=&amp;quot;sameDomain&amp;quot; &lt;br /&gt;
					name=&amp;quot;banner&amp;quot; bgcolor=&amp;quot;#ffffff&amp;quot; quality=&amp;quot;high&amp;quot; src=&amp;quot;{source}&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:if test=&amp;quot;href&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:attribute name=&amp;quot;flashVars&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:text&amp;gt;url=/banners/go_to/&amp;lt;/xsl:text&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;/udata/@id&amp;quot; /&amp;gt;&amp;lt;xsl:text&amp;gt;/&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:if test=&amp;quot;@target&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;xsl:text&amp;gt;&amp;amp;amp;target=&amp;lt;/xsl:text&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;@target&amp;quot; /&amp;gt;&lt;br /&gt;
						&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
			&amp;lt;/embed&amp;gt;&lt;br /&gt;
		&amp;lt;/object&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;banner[@type = &amp;#039;html&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:value-of select=&amp;quot;source&amp;quot; disable-output-escaping=&amp;quot;yes&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В основном файле шаблона (название файла можно посмотреть в настройках модуля &amp;quot;Структура&amp;quot;) добавим строку подключения созданного файла banners.xsl:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:include href=&amp;quot;banners.xsl&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данные шаблоны обрабатывают результаты работы макроса &amp;#039;&amp;#039;&amp;#039;banners fastInsert()&amp;#039;&amp;#039;&amp;#039;. Пример вызова данного макроса приведен ниже:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:apply-templates select=&amp;quot;document(&amp;#039;udata://banners/fastInsert/(идентификатор_рекламного_места)&amp;#039;)/udata/banner&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC%D0%B8_%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B&amp;diff=7991</id>
		<title>Как сделать активными только импортируемые товары</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D1%81%D0%B4%D0%B5%D0%BB%D0%B0%D1%82%D1%8C_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D1%8B%D0%BC%D0%B8_%D1%82%D0%BE%D0%BB%D1%8C%D0%BA%D0%BE_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B8%D1%80%D1%83%D0%B5%D0%BC%D1%8B%D0%B5_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D1%8B&amp;diff=7991"/>
		<updated>2015-12-30T08:51:11Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.11&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Задача&amp;#039;&amp;#039;&amp;#039;: Сделать активными только импортируемые товары, все остальные товары в каталоге должны стать неактивными.&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Реализация&amp;#039;&amp;#039;&amp;#039;: В директорию \classes\modules\exchange\ нужно добавить файл custom_events.php со следующим содержанием:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnAddElement&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onExchangeDisactivateElements&amp;quot;);&lt;br /&gt;
	new umiEventListener(&amp;quot;exchangeOnUpdateElement&amp;quot;, &amp;quot;exchange&amp;quot;, &amp;quot;onExchangeDisactivateElements&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этой же директории в файл __custom.php нужно добавить следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
static $flag = false;&lt;br /&gt;
&lt;br /&gt;
public function onExchangeDisactivateElements(iUmiEventPoint $e) {&lt;br /&gt;
	if ($e-&amp;gt;getMode() === &amp;#039;after&amp;#039;) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$element = $e-&amp;gt;getRef(&amp;#039;element&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($element-&amp;gt;getMethod() == &amp;#039;category&amp;#039;) {&lt;br /&gt;
		return;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$importId = getRequest(&amp;#039;param0&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	if ($importId) {&lt;br /&gt;
		$offset = getSession(&amp;quot;import_offset_{$importId}&amp;quot;);&lt;br /&gt;
	} else {&lt;br /&gt;
		$offset = getSession(&amp;quot;1c_import_offset&amp;quot;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	// начало импорта, деактивируем все товары&lt;br /&gt;
	if (!self::$flag &amp;amp;&amp;amp; !$offset) {&lt;br /&gt;
		$pages = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
		$pages-&amp;gt;types(&amp;#039;hierarchy-type&amp;#039;)-&amp;gt;name(&amp;#039;catalog&amp;#039;, &amp;#039;object&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		foreach ($pages as $p) {&lt;br /&gt;
			$p-&amp;gt;setIsActive(false);&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		self::$flag = true;&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$element-&amp;gt;setIsActive(true);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Мы добавили обработчик событий добавления и обновления элемента механизмом импорта, в котором все объекты каталога становятся неактивными, а импортируемые элементы - активными.&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B8%D0%BB%D0%B8_%D1%81%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D1%80%D0%B8_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B8%D0%B7_1%D0%A1&amp;diff=7990</id>
		<title>Удаление элементов или снятие активности при импорте данных из 1С</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A3%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%8D%D0%BB%D0%B5%D0%BC%D0%B5%D0%BD%D1%82%D0%BE%D0%B2_%D0%B8%D0%BB%D0%B8_%D1%81%D0%BD%D1%8F%D1%82%D0%B8%D0%B5_%D0%B0%D0%BA%D1%82%D0%B8%D0%B2%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D0%BF%D1%80%D0%B8_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85_%D0%B8%D0%B7_1%D0%A1&amp;diff=7990"/>
		<updated>2015-12-25T11:15:40Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Интеграция с 1С]]&lt;br /&gt;
Актуально для 2.9.6&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
В XSL-Шаблоне импорта xsl/import/commerceML2.xsl, в шаблоне &amp;quot;Товары/Товар&amp;quot;, прописан следующий блок:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:if test=&amp;quot;Статус = &amp;#039;Удален&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
  &amp;lt;xsl:attribute name=&amp;quot;is-deleted&amp;quot;&amp;gt;1&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
данные строки добавляют в узел &amp;lt;page&amp;gt; атрибут is-deleted=&amp;quot;1&amp;quot; в том случае, если в системе 1С для какого либо элемента (раздел, номенклатура) была поставлена &amp;quot;Пометка удаления&amp;quot;. В итоге, при обработке данных, UMI.CMS помеченный элемент переместит в &amp;quot;Корзину&amp;quot;, но он по прежнему будет существовать в системе и при повторном импорте данных, помещенный элемент в корзину будет обновляться. Для полного удаления элемента его необходимо удалить из Корзины.&lt;br /&gt;
&lt;br /&gt;
Некоторые версии 1С передают статус &amp;quot;Удален&amp;quot; не как отдельный элемент &amp;lt;Статус&amp;gt;Удален&amp;lt;/Статус&amp;gt; в xml-дереве товара, а как атрибут у элемента &amp;lt;Товар Статус=&amp;quot;Удален&amp;quot;&amp;gt;. В этом случае для удаления товара при импорте из 1С, если он помечене на удаление, нужно в скопировать темплейт &amp;lt;xsl:template match=&amp;quot;Товары/Товар&amp;quot;&amp;gt; из файла /xsl/import/commerceML2.xsl в файл /xsl/import/custom/commerceML2.xsl и добавить после условия&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:if test=&amp;quot;Статус = &amp;#039;Удален&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:attribute name=&amp;quot;is-deleted&amp;quot;&amp;gt;1&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
дополнительное условие&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:if test=&amp;quot;@Статус=&amp;#039;Удален&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:attribute name=&amp;quot;is-deleted&amp;quot;&amp;gt;1&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В некоторых случаях, требуется не удаления элемента в корзину, а изменение его активности, т.е. установления статуса &amp;quot;Не активен&amp;quot;. Для этого необходимо весь шаблон &amp;quot;Товары/Товар&amp;quot; скопировать в файл xsl/import/custom/commerceML2.xsl, в корневой узел &amp;lt;stylesheet&amp;gt;. И потом изменить строчку:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:attribute name=&amp;quot;is-deleted&amp;quot;&amp;gt;1&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
на:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:attribute name=&amp;quot;is-active&amp;quot;&amp;gt;0&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Вы хотите, чтобы товары, помеченные как удаленные, не попадали в корзину, а сразу удалялись из системы, то можете применить решением из статьи [[Удаление_товаров_из_системы_при_импорте]].&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%B0_%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D1%8B&amp;diff=7989</id>
		<title>Пример создания нового способа оплаты</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%B8%D0%BC%D0%B5%D1%80_%D1%81%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D1%8F_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D1%81%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%B0_%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D1%8B&amp;diff=7989"/>
		<updated>2015-12-10T08:49:13Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Задача:&amp;#039;&amp;#039;&amp;#039; создать способ оплаты с дополнительным шагом, на котором показать пользователю дополнительную информацию.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Решение:&amp;#039;&amp;#039;&amp;#039; для решения поставленной задачи, создадим новый способ оплаты.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы добавить новый способ оплаты, Вам следует выполнить следующие шаги:&amp;lt;br/&amp;gt;&lt;br /&gt;
1. Открыть модуль &amp;#039;&amp;#039;&amp;#039;Шаблоны данных&amp;#039;&amp;#039;&amp;#039; и найти там &amp;quot;&amp;#039;&amp;#039;&amp;#039;Способы оплаты&amp;#039;&amp;#039;&amp;#039;&amp;quot;. Добавить в него дочерний шаблон, назвав его например, так &amp;quot;&amp;#039;&amp;#039;Перевод через сервис Visa QIWI Wallet&amp;#039;&amp;#039;&amp;quot;.&amp;lt;br/&amp;gt;&lt;br /&gt;
2. В созданном шаблоне создаем два поля:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Как платить? [kak_platit]&amp;#039;&amp;#039;&amp;#039; - тип HTML-текст, видимое.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Номер телефона [phone]&amp;#039;&amp;#039;&amp;#039; - тип Строка, видимое.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Newpay1.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
Запоминаем id шаблона из адресной строки браузера:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;/admin/data/type_edit/131/&amp;#039;&amp;#039;&amp;#039; - то есть у меня id=131&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Qiwi5.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
3. В этом же модуле, на вкладке Справочники, находим справочник &amp;quot;&amp;#039;&amp;#039;&amp;#039;Типы способов оплаты&amp;#039;&amp;#039;&amp;#039;&amp;quot; и нажимаем на иконку глаза, чтобы открыть содержимое справочника.&amp;lt;br/&amp;gt;&lt;br /&gt;
Добавляем новое наименование.&amp;lt;br/&amp;gt;&lt;br /&gt;
В поле &amp;quot;&amp;#039;&amp;#039;&amp;#039;Название&amp;#039;&amp;#039;&amp;#039;&amp;quot; напишем тоже самое &amp;quot;&amp;#039;&amp;#039;Перевод через сервис Visa QIWI Wallet&amp;#039;&amp;#039;&amp;quot;, в поле &amp;quot;&amp;#039;&amp;#039;&amp;#039;Тип данных (id)&amp;#039;&amp;#039;&amp;#039;&amp;quot; наш запомненный ранее id &amp;quot;&amp;#039;&amp;#039;131&amp;#039;&amp;#039;&amp;quot;, в поле &amp;quot;&amp;#039;&amp;#039;&amp;#039;Тип данных&amp;#039;&amp;#039;&amp;#039;&amp;quot; напишем &amp;quot;&amp;#039;&amp;#039;emarket-payment-131&amp;#039;&amp;#039;&amp;quot;, где 131 - это наш id. А вот в поле &amp;quot;&amp;#039;&amp;#039;&amp;#039;Идентификатор типа оплаты&amp;#039;&amp;#039;&amp;#039;&amp;quot; напишем название будущего класса, которое должно отражать предназначение класса. Указывается латинскими буквами. У меня в примере данный класс называется &amp;#039;&amp;#039;simpleQIWI&amp;#039;&amp;#039; (Обратите внимание, что название регистрозависимое. Если мы используем прописные буквы, то точно также мы должны их использовать и в дальнейшем).&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Qiwi6.png]]&amp;lt;br&amp;gt;&lt;br /&gt;
4. Открываем базу данных через phpMyAdmin и выполняем запрос:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;sql&amp;quot;&amp;gt;&lt;br /&gt;
UPDATE `blank`.`cms3_object_types` SET `guid` = &amp;#039;emarket-payment-131&amp;#039; WHERE `cms3_object_types`.`id` =131;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В данном запросе следует изменить:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;blank&amp;#039;&amp;#039;&amp;#039;&amp;#039; - на название вашей базы данных,&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;&amp;#039;emarket-payment-131&amp;#039;&amp;#039;&amp;#039;&amp;#039; - на emarket-payment с вашим id&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;131&amp;#039;&amp;#039;&amp;#039; - на ваш id&amp;lt;br/&amp;gt;&lt;br /&gt;
5. Заходим на сайт по FTP, открываем директорию:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;\classes\modules\emarket\classes\payment\systems\&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&lt;br /&gt;
где копируем файл courier.php и переименовываем его в &amp;#039;&amp;#039;simpleqiwi.php&amp;#039;&amp;#039; - у Вас может быть другое название, которое Вы указали в 3 шаге.&amp;lt;br/&amp;gt;&lt;br /&gt;
6. Открываем файл на редактирование и изменяем:&amp;lt;br/&amp;gt;&lt;br /&gt;
название класса courierPayment на &amp;#039;&amp;#039;&amp;#039;simpleQIWIPayment&amp;#039;&amp;#039;&amp;#039; (у вас может быть другое название, указанное на 3 шаге).&amp;lt;br/&amp;gt;&lt;br /&gt;
7. Доработаем содержимое класса на наше усмотрение. Здесь мы вместо редиректа передаем массив с данными об ID заказа, его номере и итоговую сумму заказа, а также кладем в ячейки массива содержимое полей &amp;quot;Номер телефона&amp;quot; и &amp;quot;Как платить?&amp;quot;:&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	class simpleQIWIPayment extends payment {&lt;br /&gt;
&lt;br /&gt;
		public function validate() { return true; }&lt;br /&gt;
&lt;br /&gt;
		public function process($template = null) {&lt;br /&gt;
			$order = $this-&amp;gt;order;&lt;br /&gt;
			$order-&amp;gt;order();&lt;br /&gt;
			$controller = cmsController::getInstance();&lt;br /&gt;
			$module = $controller-&amp;gt;getModule(&amp;quot;emarket&amp;quot;);&lt;br /&gt;
			$line[&amp;#039;attribute:orderId&amp;#039;] = $order-&amp;gt;getId();&lt;br /&gt;
			$line[&amp;#039;attribute:number&amp;#039;] = $order-&amp;gt;getValue(&amp;#039;number&amp;#039;);&lt;br /&gt;
			$line[&amp;#039;attribute:total_price&amp;#039;] = $order-&amp;gt;getValue(&amp;#039;total_price&amp;#039;);&lt;br /&gt;
			$line[&amp;#039;attribute:phone&amp;#039;] = $this-&amp;gt;object-&amp;gt;phone;&lt;br /&gt;
			$line[&amp;#039;node:value&amp;#039;] = $this-&amp;gt;object-&amp;gt;kak_platit;&lt;br /&gt;
			$lines[] = $line;&lt;br /&gt;
			$udata[&amp;#039;nodes:item&amp;#039;] = $lines;&lt;br /&gt;
			if($module) {&lt;br /&gt;
				return $udata;&lt;br /&gt;
			}&lt;br /&gt;
			return null;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		public function poll() {&lt;br /&gt;
			$buffer = outputBuffer::current();&lt;br /&gt;
			$buffer-&amp;gt;clear();&lt;br /&gt;
			$buffer-&amp;gt;contentType(&amp;#039;text/plain&amp;#039;);&lt;br /&gt;
			$buffer-&amp;gt;push(&amp;#039;Sorry, but this payment system doesn\&amp;#039;t support server polling.&amp;#039; . getRequest(&amp;#039;param0&amp;#039;));&lt;br /&gt;
			$buffer-&amp;gt;end();&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
	};&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
8. Проверьте, что файл в кодировке utf-8 (без BOM).&amp;lt;br/&amp;gt;&lt;br /&gt;
9. В административном интерфейсе сайта, в модуле Интернет-магазин, создайте новый способ оплаты &amp;quot;&amp;#039;&amp;#039;Перевод через сервис Visa QIWI Wallet&amp;#039;&amp;#039;&amp;quot;, заполните поля &amp;#039;&amp;#039;&amp;#039;Номер телефона&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;Как платить?&amp;#039;&amp;#039;&amp;#039;.&amp;lt;br&amp;gt;[[Файл:Newpay2.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
10. Добавим новый шаг в шаблон оформления заказа на этапе выбора способа оплаты: \templates\demodizzy\xslt\modules\emarket\purchase\payment.xsl&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;purchasing[@stage = &amp;#039;payment&amp;#039;][@step = &amp;#039;simpleQIWI&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
               &amp;lt;xsl:apply-templates select=&amp;quot;//steps&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;ramka&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;h3&amp;gt;Сведения которые необходимо указать при оплате:&amp;lt;/h3&amp;gt;&lt;br /&gt;
				&amp;lt;h4&amp;gt;Номер телефона: &amp;lt;xsl:value-of select=&amp;quot;item/@phone&amp;quot; /&amp;gt;&amp;lt;/h4&amp;gt;&lt;br /&gt;
				&amp;lt;h4&amp;gt;Сумма к оплате: &amp;lt;xsl:value-of select=&amp;quot;item/@total_price&amp;quot; /&amp;gt;&amp;lt;/h4&amp;gt;&lt;br /&gt;
				&amp;lt;h4&amp;gt;Комментарий: Заказ №&amp;lt;xsl:value-of select=&amp;quot;item/@number&amp;quot; /&amp;gt;&amp;lt;/h4&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
			&amp;lt;br/&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:value-of select=&amp;quot;item&amp;quot; disable-output-escaping=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
			&amp;lt;div class=&amp;quot;cart-buttons&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;a href=&amp;quot;{$lang-prefix}/emarket/purchase/result/successful/&amp;quot; class=&amp;quot;button big&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:text&amp;gt;Завершить&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
				&amp;lt;/a&amp;gt;&lt;br /&gt;
			&amp;lt;/div&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;	&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
11. Проверим.&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Newpay3.png]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Newpay6.png]]&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Newpay5.png]]&lt;br /&gt;
&lt;br /&gt;
[[Категория:Модуль Интернет магазин]][[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%B2_%D0%BE%D0%B4%D0%B8%D0%BD_%D1%88%D0%B0%D0%B3_%E2%80%93_tpl_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80&amp;diff=7988</id>
		<title>Оформление заказа в один шаг – tpl шаблонизатор</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%B2_%D0%BE%D0%B4%D0%B8%D0%BD_%D1%88%D0%B0%D0%B3_%E2%80%93_tpl_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B8%D0%B7%D0%B0%D1%82%D0%BE%D1%80&amp;diff=7988"/>
		<updated>2015-12-08T11:05:57Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для 2.11&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В данной статье будет описан принцип создания формы оформления заказа за один шаг, т.е. все необходимые данные, регистрационные данные покупателя, способ доставки, способ оплаты и т.д. представлены на одной страницы. Для использования информации в данной статье версия вашей системы должна быть не ниже 2.8.4.3, иначе код не будет нормально функционировать при наличии в модуле Интернет-магазин способа доставки Курьером, и способа оплаты &amp;quot;Курьером при получении&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Нам понадобятся дополнительные php-методы для реализации данной задачи, которые необходимо добавить внутри абстрактного класса файла &amp;#039;&amp;#039;&amp;#039;classes/modules/emarket/__custom.php&amp;#039;&amp;#039;&amp;#039;, сами методы следующие:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function deliveryAddressesListCustom($template = &amp;#039;onestep&amp;#039;) {&lt;br /&gt;
	$order = $this-&amp;gt;getBasketOrder(false);&lt;br /&gt;
	list($tpl_block, $tpl_item) = def_module::loadTemplates(&lt;br /&gt;
		&amp;quot;emarket/delivery/{$template}.tpl&amp;quot;,&lt;br /&gt;
		&amp;quot;delivery_address_block&amp;quot;,&lt;br /&gt;
		&amp;quot;delivery_address_item&amp;quot;&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	$customer  = customer::get();&lt;br /&gt;
	$addresses = $customer-&amp;gt;delivery_addresses;&lt;br /&gt;
	$items_arr = array();&lt;br /&gt;
	$currentDeliveryId = $order-&amp;gt;getValue(&amp;#039;delivery_address&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$collection = umiObjectsCollection::getInstance();&lt;br /&gt;
&lt;br /&gt;
	if (is_array($addresses)) foreach($addresses as $address) {&lt;br /&gt;
		$addressObject = $collection-&amp;gt;getObject($address);&lt;br /&gt;
&lt;br /&gt;
		$item_arr = array(&lt;br /&gt;
			&amp;#039;attribute:id&amp;#039;		=&amp;gt; $address,&lt;br /&gt;
			&amp;#039;attribute:name&amp;#039;	=&amp;gt; $addressObject-&amp;gt;name&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
		if ($address == $currentDeliveryId) $item_arr[&amp;#039;attribute:active&amp;#039;] = &amp;#039;active&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		$items_arr[] = def_module::parseTemplate($tpl_item, $item_arr, false, $address);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$types  = umiObjectTypesCollection::getInstance();&lt;br /&gt;
	$typeId = $types-&amp;gt;getBaseType(&amp;quot;emarket&amp;quot;, &amp;quot;delivery_address&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
	if ($tpl_block) {&lt;br /&gt;
		return def_module::parseTemplate($tpl_block, array(&amp;#039;items&amp;#039; =&amp;gt; $items_arr, &amp;#039;type_id&amp;#039; =&amp;gt; $typeId));&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function deliveryListCustom($template = &amp;#039;onestep&amp;#039;) {&lt;br /&gt;
	$order = $this-&amp;gt;getBasketOrder(false);&lt;br /&gt;
	list($tpl_block, $tpl_item_free, $tpl_item_priced) = def_module::loadTemplates(&lt;br /&gt;
		&amp;quot;emarket/delivery/{$template}.tpl&amp;quot;,&lt;br /&gt;
		&amp;#039;delivery_block&amp;#039;,&lt;br /&gt;
		&amp;#039;delivery_item_free&amp;#039;,&lt;br /&gt;
		&amp;#039;delivery_item_priced&amp;#039;&lt;br /&gt;
	);&lt;br /&gt;
&lt;br /&gt;
	if (!isset($_SESSION[&amp;#039;emarket&amp;#039;])) $_SESSION[&amp;#039;emarket&amp;#039;] = array();&lt;br /&gt;
	if (!isset($_SESSION[&amp;#039;emarket&amp;#039;][&amp;#039;delivery&amp;#039;])) $_SESSION[&amp;#039;emarket&amp;#039;][&amp;#039;delivery&amp;#039;] = array();&lt;br /&gt;
&lt;br /&gt;
	$deliveryIds = delivery::getList();&lt;br /&gt;
	$items_arr = array();&lt;br /&gt;
	$currentDeliveryId = $order-&amp;gt;getValue(&amp;#039;delivery_id&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	foreach($deliveryIds as $delivery) {&lt;br /&gt;
		$delivery = delivery::get($delivery);&lt;br /&gt;
		if ($delivery-&amp;gt;validate($order) == false) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$deliveryObject = $delivery-&amp;gt;getObject();&lt;br /&gt;
		$deliveryPrice  = $delivery-&amp;gt;getDeliveryPrice($order);&lt;br /&gt;
		$_SESSION[&amp;#039;emarket&amp;#039;][&amp;#039;delivery&amp;#039;][$delivery-&amp;gt;id] = (float)$deliveryPrice;&lt;br /&gt;
&lt;br /&gt;
		$item_arr = array(&lt;br /&gt;
			&amp;#039;attribute:id&amp;#039;		=&amp;gt; $deliveryObject-&amp;gt;id,&lt;br /&gt;
			&amp;#039;attribute:name&amp;#039;	=&amp;gt; $deliveryObject-&amp;gt;name,&lt;br /&gt;
			&amp;#039;attribute:price&amp;#039;	=&amp;gt; $deliveryPrice.&amp;#039;&amp;#039;,&lt;br /&gt;
			&amp;#039;xlink:href&amp;#039;		=&amp;gt; $deliveryObject-&amp;gt;xlink&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
		if ($delivery-&amp;gt;id == $currentDeliveryId) $item_arr[&amp;#039;attribute:active&amp;#039;] = &amp;#039;active&amp;#039;;&lt;br /&gt;
&lt;br /&gt;
		$tpl_item = $deliveryPrice ? $tpl_item_priced : $tpl_item_free;&lt;br /&gt;
		$items_arr[] = def_module::parseTemplate($tpl_item, $item_arr, false, $deliveryObject-&amp;gt;id);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if ($tpl_block) {&lt;br /&gt;
		return def_module::parseTemplate($tpl_block, array(&amp;#039;items&amp;#039; =&amp;gt; $items_arr));&lt;br /&gt;
	} else {&lt;br /&gt;
		return array(&amp;#039;items&amp;#039; =&amp;gt; array(&amp;#039;nodes:item&amp;#039;	=&amp;gt; $items_arr));&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function paymentsListCustom($template = &amp;#039;onestep&amp;#039;) {&lt;br /&gt;
	$order = $this-&amp;gt;getBasketOrder(false);&lt;br /&gt;
	list($tpl_block, $tpl_item) = def_module::loadTemplates(&amp;quot;emarket/payment/{$template}.tpl&amp;quot;, &amp;#039;payment_block&amp;#039;, &amp;#039;payment_item&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	$payments = payment::getList();&lt;br /&gt;
	$items = array();&lt;br /&gt;
	$currentPaymentId = $order-&amp;gt;getValue(&amp;#039;payment_id&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
	foreach($payments as $paymentId) {&lt;br /&gt;
		$payment = payment::get($paymentId, $order);&lt;br /&gt;
		if($payment-&amp;gt;validate($order) == false) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
		$paymentObject = $payment-&amp;gt;getObject();&lt;br /&gt;
		$paymentTypeId = $paymentObject-&amp;gt;getValue(&amp;#039;payment_type_id&amp;#039;);&lt;br /&gt;
		$paymentTypeName = umiObjectsCollection::getInstance()-&amp;gt;getObject($paymentTypeId)-&amp;gt;getValue(&amp;#039;class_name&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		if($paymentTypeName == &amp;#039;social&amp;#039;) {&lt;br /&gt;
			continue;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$item = array(&lt;br /&gt;
			&amp;#039;attribute:id&amp;#039;			=&amp;gt; $paymentObject-&amp;gt;id,&lt;br /&gt;
			&amp;#039;attribute:name&amp;#039;		=&amp;gt; $paymentObject-&amp;gt;name,&lt;br /&gt;
			&amp;#039;attribute:type-name&amp;#039;	=&amp;gt; $paymentTypeName,&lt;br /&gt;
			&amp;#039;xlink:href&amp;#039;			=&amp;gt; $paymentObject-&amp;gt;xlink&lt;br /&gt;
		);&lt;br /&gt;
&lt;br /&gt;
		if($paymentId == $currentPaymentId) {&lt;br /&gt;
			$item[&amp;#039;attribute:active&amp;#039;] = &amp;#039;active&amp;#039;;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$items[] = def_module::parseTemplate($tpl_item, $item, false, $paymentObject-&amp;gt;id);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if($tpl_block &amp;amp;&amp;amp; !def_module::isXSLTResultMode()) {&lt;br /&gt;
		return def_module::parseTemplate($tpl_block, array(&amp;#039;items&amp;#039; =&amp;gt; $items));&lt;br /&gt;
	} else {&lt;br /&gt;
		return array(&amp;#039;items&amp;#039; =&amp;gt; array(&amp;#039;nodes:item&amp;#039;	=&amp;gt; $items));&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function personalInfoCustom($template = &amp;#039;onestep&amp;#039;) {&lt;br /&gt;
	if (!permissionsCollection::getInstance()-&amp;gt;isAuth()){&lt;br /&gt;
		$customerId = customer::get()-&amp;gt;id;&lt;br /&gt;
		$cmsController = cmsController::getInstance();&lt;br /&gt;
		$data = $cmsController-&amp;gt;getModule(&amp;#039;data&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
		return $data-&amp;gt;getEditForm($customerId, $template);&lt;br /&gt;
	} else return &amp;#039;&amp;#039;;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function saveInfoCustom(){&lt;br /&gt;
	$order = $this-&amp;gt;getBasketOrder(false);&lt;br /&gt;
&lt;br /&gt;
	//сохранение регистрационных данных&lt;br /&gt;
	$cmsController = cmsController::getInstance();&lt;br /&gt;
	$data = $cmsController-&amp;gt;getModule(&amp;#039;data&amp;#039;);&lt;br /&gt;
	$data-&amp;gt;saveEditedObject(customer::get()-&amp;gt;id, false, true);&lt;br /&gt;
&lt;br /&gt;
	//сохранение адреса доставки&lt;br /&gt;
	$addressId = getRequest(&amp;#039;delivery-address&amp;#039;);&lt;br /&gt;
	if ($addressId == &amp;#039;new&amp;#039;) {&lt;br /&gt;
		$collection = umiObjectsCollection::getInstance();&lt;br /&gt;
		$types      = umiObjectTypesCollection::getInstance();&lt;br /&gt;
		$typeId     = $types-&amp;gt;getBaseType(&amp;quot;emarket&amp;quot;, &amp;quot;delivery_address&amp;quot;);&lt;br /&gt;
		$customer   = customer::get();&lt;br /&gt;
		$addressId  = $collection-&amp;gt;addObject(&amp;quot;Address for customer #&amp;quot;.$customer-&amp;gt;id, $typeId);&lt;br /&gt;
		$dataModule = $cmsController-&amp;gt;getModule(&amp;quot;data&amp;quot;);&lt;br /&gt;
		if ($dataModule) {&lt;br /&gt;
			if (!$dataModule-&amp;gt;saveEditedObject($addressId, true, true)) {&lt;br /&gt;
				$dataModule-&amp;gt;saveEditedObjectWithIgnorePermissions($addressId, true, true); // начиная с версии 2.9.5&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		$customer-&amp;gt;delivery_addresses = array_merge( $customer-&amp;gt;delivery_addresses, array($addressId) );&lt;br /&gt;
	}&lt;br /&gt;
	$order-&amp;gt;delivery_address = $addressId;&lt;br /&gt;
&lt;br /&gt;
	//сохранение способа доставки&lt;br /&gt;
	$deliveryId = getRequest(&amp;#039;delivery-id&amp;#039;);&lt;br /&gt;
	if ($deliveryId){&lt;br /&gt;
		$delivery = delivery::get($deliveryId);&lt;br /&gt;
		$deliveryPrice = (float) $delivery-&amp;gt;getDeliveryPrice($order);&lt;br /&gt;
		$order-&amp;gt;setValue(&amp;#039;delivery_id&amp;#039;, $deliveryId);&lt;br /&gt;
		$order-&amp;gt;setValue(&amp;#039;delivery_price&amp;#039;, $deliveryPrice);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	//сохранение способа оплаты и редирект на итоговую страницу&lt;br /&gt;
	$order-&amp;gt;setValue(&amp;#039;payment_id&amp;#039;, getRequest(&amp;#039;payment-id&amp;#039;));&lt;br /&gt;
&lt;br /&gt;
	$order-&amp;gt;refresh();&lt;br /&gt;
&lt;br /&gt;
	$paymentId = getRequest(&amp;#039;payment-id&amp;#039;);&lt;br /&gt;
	if (!$paymentId) {&lt;br /&gt;
		$this-&amp;gt;errorNewMessage(getLabel(&amp;#039;error-emarket-choose-payment&amp;#039;));&lt;br /&gt;
		$this-&amp;gt;errorPanic();&lt;br /&gt;
	}&lt;br /&gt;
	$payment = payment::get($paymentId);&lt;br /&gt;
&lt;br /&gt;
	if ($payment instanceof payment) {&lt;br /&gt;
		$paymentName = $payment-&amp;gt;getCodeName();&lt;br /&gt;
		$url = &amp;quot;{$this-&amp;gt;pre_lang}/&amp;quot;.cmsController::getInstance()-&amp;gt;getUrlPrefix().&amp;quot;emarket/purchase/payment/{$paymentName}/&amp;quot;;&lt;br /&gt;
	} else {&lt;br /&gt;
		$url = &amp;quot;{$this-&amp;gt;pre_lang}/&amp;quot;.cmsController::getInstance()-&amp;gt;getUrlPrefix().&amp;quot;emarket/cart/&amp;quot;;&lt;br /&gt;
	}&lt;br /&gt;
	$this-&amp;gt;redirect($url);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
также в папку &amp;#039;&amp;#039;&amp;#039;classes/modules/emarket/&amp;#039;&amp;#039;&amp;#039; необходимо добавить файл &amp;#039;&amp;#039;&amp;#039;permissions.custom.php&amp;#039;&amp;#039;&amp;#039; следующего содержания:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$permissions = array(&amp;#039;purchasing&amp;#039; =&amp;gt; array(&amp;#039;deliveryListCustom&amp;#039;, &amp;#039;deliveryAddressesListCustom&amp;#039;, &amp;#039;paymentsListCustom&amp;#039;, &amp;#039;personalInfoCustom&amp;#039;, &amp;#039;saveInfoCustom&amp;#039;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Необходимо создать шаблон &amp;#039;&amp;#039;&amp;#039;tpls/emarket/delivery/onestep.tpl&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$FORMS = Array();&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;h3 class=&amp;quot;dost&amp;quot;&amp;gt;Выберите подходящий вам способ доставки:&amp;lt;/h3&amp;gt;&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		%items%&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_item_free&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;delivery-id&amp;quot; value=&amp;quot;%id%&amp;quot; checked=&amp;quot;checked&amp;quot; /&amp;gt; %name% - бесплатно&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_item_priced&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;delivery-id&amp;quot; value=&amp;quot;%id%&amp;quot; /&amp;gt; %name% - %price%&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_address_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;div class=&amp;quot;adrest&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;h3 class=&amp;quot;dost&amp;quot;&amp;gt;Выберите подходящий вам адрес доставки:&amp;lt;/h3&amp;gt;&lt;br /&gt;
		&amp;lt;ul&amp;gt;&lt;br /&gt;
			%items%&lt;br /&gt;
			&amp;lt;li&amp;gt;&lt;br /&gt;
				&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;delivery-address&amp;quot; value=&amp;quot;new&amp;quot; /&amp;gt; &amp;lt;b&amp;gt;Новый адрес доставки:&amp;lt;/b&amp;gt;&lt;br /&gt;
				&amp;lt;table cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
					%data getCreateForm(Здесь нужно подставить ид типа данных &amp;quot;Адрес доставки&amp;quot;, &amp;#039;onestep&amp;#039;)%&lt;br /&gt;
				&amp;lt;/table&amp;gt;&lt;br /&gt;
			&amp;lt;/li&amp;gt;&lt;br /&gt;
		&amp;lt;/ul&amp;gt;&lt;br /&gt;
	&amp;lt;/div&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;delivery_address_item&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;delivery-address&amp;quot; value=&amp;quot;%id%&amp;quot; /&amp;gt;%index%, %city%, %street%, д. %house%, кв. %flat%&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В макросе &amp;#039;&amp;#039;&amp;#039;data getCreateForm()&amp;#039;&amp;#039;&amp;#039;, первый параметр - это id типа данных &amp;quot;Адрес доставки&amp;quot; в модуле &amp;quot;Шаблоны данных&amp;quot;, первая вкладка, раздел &amp;quot;Справочники&amp;quot;, этот id вы должны для вашей системы определить самостоятельно и подставить в макрос data getCreateForm().&lt;br /&gt;
&lt;br /&gt;
Шаблон &amp;#039;&amp;#039;&amp;#039;tpls/emarket/payment/onestep.tpl&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$FORMS = Array();&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;payment_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	Выберите подходящий вам способ оплаты:&lt;br /&gt;
	&amp;lt;ul&amp;gt;&lt;br /&gt;
		%items%&lt;br /&gt;
	&amp;lt;/ul&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;payment_item&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;li&amp;gt;&amp;lt;input type=&amp;quot;radio&amp;quot; name=&amp;quot;payment-id&amp;quot; value=&amp;quot;%id%&amp;quot; /&amp;gt; %name%&amp;lt;/li&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Шаблон &amp;#039;&amp;#039;&amp;#039;tpls/data/reflection/onestep.tpl&amp;#039;&amp;#039;&amp;#039;:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
&lt;br /&gt;
$FORMS = Array();&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
%groups%&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_group&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td colspan=&amp;quot;2&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;br/&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;b&amp;gt;%title%&amp;lt;/b&amp;gt;&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
	%fields%&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_string&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			%title%%required_asteriks%:&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;%input_name%&amp;quot; value=&amp;quot;%value%&amp;quot; class=&amp;quot;textinputs&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_text&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			%title%%required_asteriks%:&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			&amp;lt;textarea name=&amp;quot;%input_name%&amp;quot; class=&amp;quot;textinputs&amp;quot;&amp;gt;%value%&amp;lt;/textarea&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_int&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			%title%%required_asteriks%:&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			&amp;lt;input type=&amp;quot;text&amp;quot; name=&amp;quot;%input_name%&amp;quot; value=&amp;quot;%value%&amp;quot; class=&amp;quot;textinputs&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_relation&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;tr&amp;gt;&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			%title%%required_asteriks%:&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;td&amp;gt;&lt;br /&gt;
			&amp;lt;select name=&amp;quot;%input_name%&amp;quot; style=&amp;quot;width: 205px&amp;quot; class=&amp;quot;textinputs&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;option /&amp;gt;&lt;br /&gt;
				%options%&lt;br /&gt;
			&amp;lt;/select&amp;gt;&lt;br /&gt;
		&amp;lt;/td&amp;gt;&lt;br /&gt;
	&amp;lt;/tr&amp;gt;&lt;br /&gt;
&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_relation_option&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;option value=&amp;quot;%id%&amp;quot;&amp;gt;%name%&amp;lt;/option&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;reflection_field_relation_option_a&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;option value=&amp;quot;%id%&amp;quot; selected=&amp;quot;selected&amp;quot;&amp;gt;%name%&amp;lt;/option&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В шаблоне &amp;#039;&amp;#039;&amp;#039;tpls/emarket/default.tpl&amp;#039;&amp;#039;&amp;#039;, в блоке &amp;#039;&amp;#039;&amp;#039;order_block&amp;#039;&amp;#039;&amp;#039;, форма должна быть примерно следующая:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;%pre_lang%/emarket/saveInfoCustom/&amp;quot;&amp;gt;&lt;br /&gt;
	%emarket deliveryListCustom(&amp;#039;onestep&amp;#039;)%&lt;br /&gt;
	%emarket deliveryAddressesListCustom(&amp;#039;onestep&amp;#039;)%&lt;br /&gt;
	&amp;lt;table cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;br/&amp;gt;&lt;br /&gt;
	%emarket paymentsListCustom(&amp;#039;onestep&amp;#039;)%&lt;br /&gt;
	&amp;lt;br/&amp;gt;&lt;br /&gt;
	&amp;lt;table cellspacing=&amp;quot;1&amp;quot; cellpadding=&amp;quot;1&amp;quot; width=&amp;quot;100%&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
		%emarket personalInfoCustom(&amp;#039;onestep&amp;#039;)%&lt;br /&gt;
	&amp;lt;/table&amp;gt;&lt;br /&gt;
	&amp;lt;br/&amp;gt;&lt;br /&gt;
	&amp;lt;input type=&amp;quot;submit&amp;quot; value=&amp;quot;Оформить заказ&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/form&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Написание кастомных макросов]][[Категория:Верстка в TPL]]&lt;br /&gt;
[[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9_%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%86%D1%8B_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B5&amp;diff=7987</id>
		<title>Макрос удаления одной единицы товара в корзине</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9C%D0%B0%D0%BA%D1%80%D0%BE%D1%81_%D1%83%D0%B4%D0%B0%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BE%D0%B4%D0%BD%D0%BE%D0%B9_%D0%B5%D0%B4%D0%B8%D0%BD%D0%B8%D1%86%D1%8B_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0_%D0%B2_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%B5&amp;diff=7987"/>
		<updated>2015-12-07T15:43:17Z</updated>

		<summary type="html">&lt;p&gt;Alexei: /*  Макрос удаления одной единицы товара в корзине.  */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Написание кастомных макросов]][[Категория:Модуль Интернет магазин]]&lt;br /&gt;
&lt;br /&gt;
==&amp;lt;center&amp;gt; Макрос удаления одной единицы товара в корзине. &amp;lt;/center&amp;gt;==&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
При нажатии на кнопку «&amp;#039;&amp;#039;&amp;#039;Х&amp;#039;&amp;#039;&amp;#039;» в корзине будет производиться удаление одной единицы товара, если количество товара больше одной единицы, и удалять товар из корзины, если его количество равно единице. В директории &amp;#039;&amp;#039;/classes/modules/emarket/&amp;#039;&amp;#039; в файл&amp;#039;&amp;#039;&amp;#039; __custom.php&amp;#039;&amp;#039;&amp;#039; необходимо добавить следующий код:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;php&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	abstract class __emarket_custom extends __emarket_purchasing{&lt;br /&gt;
		&lt;br /&gt;
		public function custom_basket($mode = false, $itemType = false, $itemId = false) {&lt;br /&gt;
			$mode = $mode ? $mode : getRequest(&amp;#039;param0&amp;#039;);&lt;br /&gt;
           	        $order = self::getBasketOrder(!in_array($mode, array(&amp;#039;put&amp;#039;, &amp;#039;remove&amp;#039;)));&lt;br /&gt;
			$itemType = $itemType ? $itemType : getRequest(&amp;#039;param1&amp;#039;);&lt;br /&gt;
			$itemId = (int) ($itemId ? $itemId : getRequest(&amp;#039;param2&amp;#039;));&lt;br /&gt;
			$amount = (int) getRequest(&amp;#039;amount&amp;#039;);&lt;br /&gt;
			$options = getRequest(&amp;#039;options&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
			$order-&amp;gt;refresh();&lt;br /&gt;
			&lt;br /&gt;
			if($mode == &amp;#039;put&amp;#039;) {&lt;br /&gt;
				$orderItem = ($itemType == &amp;#039;element&amp;#039;) ? $this-&amp;gt;getBasketItem($itemId) : $order-&amp;gt;getItem($itemId);&lt;br /&gt;
&lt;br /&gt;
				if (!$orderItem) {&lt;br /&gt;
					throw new publicException(&amp;quot;Order item is not defined&amp;quot;);&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				if(is_array($options)) {&lt;br /&gt;
					if($itemType != &amp;#039;element&amp;#039;) {&lt;br /&gt;
				throw new publicException(&amp;quot;Put basket method required element id of optionedOrderItem&amp;quot;);&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					// Получить все товары заказа&lt;br /&gt;
					$orderItems = $order-&amp;gt;getItems();&lt;br /&gt;
&lt;br /&gt;
					foreach($orderItems as $tOrderItem) {&lt;br /&gt;
						$itemOptions = $tOrderItem-&amp;gt;getOptions();&lt;br /&gt;
&lt;br /&gt;
						if(sizeof($itemOptions) != sizeof($options)) {&lt;br /&gt;
							$itemOptions = null;&lt;br /&gt;
							$tOrderItem = null;&lt;br /&gt;
							continue;&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
						if($tOrderItem-&amp;gt;getItemElement()-&amp;gt;id != $orderItem-&amp;gt;getItemElement()-&amp;gt;id) {&lt;br /&gt;
							$itemOptions = null;&lt;br /&gt;
							$tOrderItem = null;&lt;br /&gt;
							continue;&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
						// Сравниваем каждую переменную tOrderItem со списком опций&lt;br /&gt;
						foreach($options as $optionName =&amp;gt; $optionId) {&lt;br /&gt;
							$itemOption = getArrayKey($itemOptions, $optionName);&lt;br /&gt;
&lt;br /&gt;
							if(getArrayKey($itemOption, &amp;#039;option-id&amp;#039;) != $optionId) {&lt;br /&gt;
								$tOrderItem = null;&lt;br /&gt;
								continue 2;		&lt;br /&gt;
                                                        // Если не совпадает, создаем новый товар с указанными опциями  							}&lt;br /&gt;
						}&lt;br /&gt;
&lt;br /&gt;
						break;	//Если совпадает, выйти из цикла и перейти к изменению количества					}&lt;br /&gt;
&lt;br /&gt;
					if(!isset($tOrderItem) || is_null($tOrderItem)) {&lt;br /&gt;
						$tOrderItem = orderItem::create($itemId);&lt;br /&gt;
						$order-&amp;gt;appendItem($tOrderItem);&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					if($tOrderItem instanceof optionedOrderItem) {&lt;br /&gt;
						foreach($options as $optionName =&amp;gt; $optionId) {&lt;br /&gt;
							if($optionId) {&lt;br /&gt;
								$tOrderItem-&amp;gt;appendOption($optionName, $optionId);&lt;br /&gt;
							} else {&lt;br /&gt;
								$tOrderItem-&amp;gt;removeOption($optionName);&lt;br /&gt;
							}&lt;br /&gt;
						}&lt;br /&gt;
					}&lt;br /&gt;
&lt;br /&gt;
					if($tOrderItem) {&lt;br /&gt;
						$orderItem = $tOrderItem;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				$amount = $amount ? $amount : ($orderItem-&amp;gt;getAmount() + 1);&lt;br /&gt;
				$orderItem-&amp;gt;setAmount($amount ? $amount : 1);&lt;br /&gt;
				$orderItem-&amp;gt;refresh();&lt;br /&gt;
&lt;br /&gt;
				if($itemType == &amp;#039;element&amp;#039;) {&lt;br /&gt;
					$order-&amp;gt;appendItem($orderItem);&lt;br /&gt;
				}&lt;br /&gt;
				$order-&amp;gt;refresh();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if($mode == &amp;#039;remove&amp;#039;) {&lt;br /&gt;
				$orderItem = ($itemType == &amp;#039;element&amp;#039;) ? $this-&amp;gt;getBasketItem($itemId, false) : orderItem::get($itemId);&lt;br /&gt;
				if($orderItem instanceof orderItem) {&lt;br /&gt;
                                //Проверяем количество единиц товара, если 1 то удаляем товар из списка, иначе уменьшаем количество на 1&lt;br /&gt;
					if ($orderItem-&amp;gt;getAmount()==1){&lt;br /&gt;
						$order-&amp;gt;removeItem($orderItem);&lt;br /&gt;
						$order-&amp;gt;refresh();&lt;br /&gt;
						&lt;br /&gt;
					}&lt;br /&gt;
					else&lt;br /&gt;
						$orderItem-&amp;gt;setAmount($orderItem-&amp;gt;getAmount()-1);{&lt;br /&gt;
						$order-&amp;gt;refresh();&lt;br /&gt;
						$orderItem-&amp;gt;refresh();&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ($mode == &amp;#039;remove_all&amp;#039;) {&lt;br /&gt;
				foreach ($order-&amp;gt;getItems() as $orderItem) {&lt;br /&gt;
					$order-&amp;gt;removeItem($orderItem);&lt;br /&gt;
				}&lt;br /&gt;
				 $order-&amp;gt;refresh();&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$referer = getServer(&amp;#039;HTTP_REFERER&amp;#039;);&lt;br /&gt;
			$noRedirect = getRequest(&amp;#039;no-redirect&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
			if($redirectUri = getRequest(&amp;#039;redirect-uri&amp;#039;)) {&lt;br /&gt;
				$this-&amp;gt;redirect($redirectUri);&lt;br /&gt;
			} else if (!defined(&amp;#039;VIA_HTTP_SCHEME&amp;#039;) &amp;amp;&amp;amp; !$noRedirect &amp;amp;&amp;amp; $referer) {&lt;br /&gt;
				$current = $_SERVER[&amp;#039;REQUEST_URI&amp;#039;];&lt;br /&gt;
				if(substr($referer, -strlen($current)) == $current) {&lt;br /&gt;
					if($itemType == &amp;#039;element&amp;#039;) {&lt;br /&gt;
						$referer = umiHierarchy::getInstance()-&amp;gt;getPathById($itemId);&lt;br /&gt;
					} else {&lt;br /&gt;
						$referer = &amp;quot;/&amp;quot;;&lt;br /&gt;
					}&lt;br /&gt;
				}&lt;br /&gt;
				$this-&amp;gt;redirect($referer);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$order-&amp;gt;refresh();&lt;br /&gt;
			return $this-&amp;gt;order($order-&amp;gt;getId());&lt;br /&gt;
                 }&lt;br /&gt;
             }&lt;br /&gt;
         }&lt;br /&gt;
     };&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее, необходимо дать права на использования данного макроса. Для этого нужно создать файл &amp;#039;&amp;#039;&amp;#039;permissions.custom.php&amp;#039;&amp;#039;&amp;#039; в директории &amp;#039;&amp;#039;/classes/modules/emarket/&amp;#039;&amp;#039; со следующим содержанием:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;php&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
     $permissions = array(&amp;#039;purchasing&amp;#039; =&amp;gt; array(&amp;#039;custom_basket&amp;#039;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В файле шаблона, по которому выводится корзина товаров, (в демо шаблоне &amp;#039;&amp;#039;&amp;#039;demoold&amp;#039;&amp;#039;&amp;#039; &amp;#039;&amp;#039;templates\demoold\tpls\emarket\default.tpl&amp;#039;&amp;#039;) необходимо изменить адрес ссылки удаления товара (то есть вызвать кастомный макрос вместо системного) на:&lt;br /&gt;
 &amp;lt;a href=&amp;quot;/emarket/custom_basket/remove/item/%id%/&amp;quot;&amp;gt;(X)&amp;lt;/a&amp;gt;&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BC%D0%B5%D0%BD%D0%B0_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%BD%D0%B0_%D1%8D%D1%82%D0%B0%D0%BF%D0%B5_delivery&amp;diff=7986</id>
		<title>Смена шагов оформления заказа на этапе delivery</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BC%D0%B5%D0%BD%D0%B0_%D1%88%D0%B0%D0%B3%D0%BE%D0%B2_%D0%BE%D1%84%D0%BE%D1%80%D0%BC%D0%BB%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B0_%D0%BD%D0%B0_%D1%8D%D1%82%D0%B0%D0%BF%D0%B5_delivery&amp;diff=7986"/>
		<updated>2015-11-17T09:24:32Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.6&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В данной статье будет описан механизм смены шагов оформления заказа на этапе delivery. Необходимо, чтобы была следуюшая последовательность:&lt;br /&gt;
* выбор способа доставки;&lt;br /&gt;
* проверка на то какой способ доставки выбран:&lt;br /&gt;
если выбран &amp;quot;Самовывоз&amp;quot;, то перейти к следующему этапу, если &amp;quot;Доставка&amp;quot;, то предложить заполнить Адрес доставки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В файл &amp;#039;&amp;#039;&amp;#039;classes/modules/emarket/__custom.php&amp;#039;&amp;#039;&amp;#039;, добавим четыре метода, все они написаны на основе существующих:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function purchasecust(){&lt;br /&gt;
	$customer = customer::get();&lt;br /&gt;
	// Проверка на то, что покупатель Гость, и все ли обязательные поля заполнены в объекте				&lt;br /&gt;
	if(!$customer-&amp;gt;isUser() &amp;amp;&amp;amp; !$customer-&amp;gt;isFilled()) {&lt;br /&gt;
		$this-&amp;gt;redirect(&amp;#039;/emarket/purchase/&amp;#039;);&lt;br /&gt;
	}else{&lt;br /&gt;
	   $this-&amp;gt;redirect(&amp;#039;/emarket/purchase/delivery/choose/&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function personalcust(){&lt;br /&gt;
	$cmsController = cmsController::getInstance();&lt;br /&gt;
	$data = $cmsController-&amp;gt;getModule(&amp;#039;data&amp;#039;);&lt;br /&gt;
	$data-&amp;gt;saveEditedObject(customer::get()-&amp;gt;id, false, true);&lt;br /&gt;
	$this-&amp;gt;redirect($this-&amp;gt;pre_lang . &amp;#039;/emarket/purchase/delivery/choose/&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function choosecust(){&lt;br /&gt;
	$ini = cmsController::getInstance()-&amp;gt;getModule(&amp;quot;emarket&amp;quot;);&lt;br /&gt;
	$order = $ini-&amp;gt;getBasketOrder(false);&lt;br /&gt;
	$deliveryId = (int) getRequest(&amp;#039;delivery-id&amp;#039;);&lt;br /&gt;
	&lt;br /&gt;
	if(!$deliveryId) {&lt;br /&gt;
		$this-&amp;gt;redirect($ini-&amp;gt;pre_lang . &amp;#039;/emarket/purchase/delivery/choose/&amp;#039;);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	if(@isset($_SESSION[&amp;#039;emarket&amp;#039;][&amp;#039;delivery&amp;#039;][$deliveryId])) {&lt;br /&gt;
		$deliveryPrice = (float) $_SESSION[&amp;#039;emarket&amp;#039;][&amp;#039;delivery&amp;#039;][$deliveryId];&lt;br /&gt;
	} else {&lt;br /&gt;
		$delivery = delivery::get($deliveryId);&lt;br /&gt;
		$deliveryPrice = (float) $delivery-&amp;gt;getDeliveryPrice($order);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
	$order-&amp;gt;setValue(&amp;#039;delivery_id&amp;#039;, $deliveryId);&lt;br /&gt;
	$order-&amp;gt;setValue(&amp;#039;delivery_price&amp;#039;, $deliveryPrice);&lt;br /&gt;
	$order-&amp;gt;refresh();&lt;br /&gt;
	$order-&amp;gt;commit();&lt;br /&gt;
	if($deliveryId == 27255){&lt;br /&gt;
	  $this-&amp;gt;redirect($this-&amp;gt;pre_lang . &amp;#039;/emarket/purchase/payment/choose/&amp;#039;);&lt;br /&gt;
	}else{&lt;br /&gt;
	  $this-&amp;gt;redirect($this-&amp;gt;pre_lang . &amp;#039;/emarket/purchase/delivery/address/&amp;#039;);&lt;br /&gt;
}			&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
public function addresscust(){&lt;br /&gt;
	$ini = cmsController::getInstance()-&amp;gt;getModule(&amp;quot;emarket&amp;quot;);&lt;br /&gt;
	$order = $ini-&amp;gt;getBasketOrder(false);&lt;br /&gt;
	$addressId = getRequest(&amp;#039;delivery-address&amp;#039;);&lt;br /&gt;
	if($addressId == &amp;#039;new&amp;#039;) {&lt;br /&gt;
		$controller = cmsController::getInstance();&lt;br /&gt;
		$collection = umiObjectsCollection::getInstance();&lt;br /&gt;
		$types      = umiObjectTypesCollection::getInstance();&lt;br /&gt;
		$typeId     = $types-&amp;gt;getBaseType(&amp;quot;emarket&amp;quot;, &amp;quot;delivery_address&amp;quot;);&lt;br /&gt;
		$customer   = customer::get();&lt;br /&gt;
		$addressId  = $collection-&amp;gt;addObject(&amp;quot;Address for customer #&amp;quot;.$customer-&amp;gt;id, $typeId);&lt;br /&gt;
		$dataModule = $controller-&amp;gt;getModule(&amp;quot;data&amp;quot;);&lt;br /&gt;
		if($dataModule) {&lt;br /&gt;
			$dataModule-&amp;gt;saveEditedObjectWithIgnorePermissions($addressId, true, true);&lt;br /&gt;
		}&lt;br /&gt;
		$customer-&amp;gt;delivery_addresses = array_merge( $customer-&amp;gt;delivery_addresses, array($addressId) );&lt;br /&gt;
	}&lt;br /&gt;
	$order-&amp;gt;delivery_address = (int) $addressId;&lt;br /&gt;
	$order-&amp;gt;commit();&lt;br /&gt;
&lt;br /&gt;
	$this-&amp;gt;redirect($this-&amp;gt;pre_lang . &amp;#039;/emarket/purchase/payment/choose/&amp;#039;);		&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
также в папке &amp;#039;&amp;#039;&amp;#039;classes/modules/emarket/&amp;#039;&amp;#039;&amp;#039; создадим файл &amp;#039;&amp;#039;&amp;#039;permissions.custom.php&amp;#039;&amp;#039;&amp;#039; следующего содержания:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$permissions = array(&amp;#039;purchasing&amp;#039; =&amp;gt; array(&amp;#039;purchasecust&amp;#039;, &amp;#039;personalcust&amp;#039;, &amp;#039;choosecust&amp;#039;, &amp;#039;addresscust&amp;#039;));&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В методе &amp;#039;&amp;#039;&amp;#039;choosecust()&amp;#039;&amp;#039;&amp;#039;, в строке:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
if($deliveryId == 27255){&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
необходимо прописать ваш $object_id способа доставки &amp;quot;Самовывоз&amp;quot;, id можно узнать в модуле Интернет-магазин, вкладка &amp;quot;Доставка&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Если говорить о TPL-шаблонах, то в шаблоне &amp;#039;&amp;#039;&amp;#039;/tpls/emarket/default.tpl&amp;#039;&amp;#039;&amp;#039;, в блоке &amp;#039;&amp;#039;&amp;#039;order_block&amp;#039;&amp;#039;&amp;#039;, необходимо прописать для формы следующий action:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;%pre_lang%/emarket/purchasecust/&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В шаблоне &amp;#039;&amp;#039;&amp;#039;tpls/emarket/required/default.tpl&amp;#039;&amp;#039;&amp;#039;, action:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;%pre_lang%/emarket/personalcust/&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В шаблоне &amp;#039;&amp;#039;&amp;#039;tpls/emarket/delivery/default.tpl&amp;#039;&amp;#039;&amp;#039;, в блоке &amp;#039;&amp;#039;&amp;#039;delivery_block&amp;#039;&amp;#039;&amp;#039;, action:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;%pre_lang%/emarket/choosecust/&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
а в блоке &amp;#039;&amp;#039;&amp;#039;delivery_address_block&amp;#039;&amp;#039;&amp;#039;, action:&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;%pre_lang%/emarket/addresscust/&amp;quot; method=&amp;quot;post&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
В XSLT-шаблонах правки аналогичные.&lt;br /&gt;
[[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_nginx&amp;diff=7985</id>
		<title>Кэширование через nginx</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D1%8D%D1%88%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%87%D0%B5%D1%80%D0%B5%D0%B7_nginx&amp;diff=7985"/>
		<updated>2015-11-14T16:07:45Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Кеширование]]&lt;br /&gt;
Пользователям версии 2.8.3 (и выше) предлагается новая экспериментальная функция кэширования через nginx. Наши исследования показали ускорение работы сайта до 100 раз и более.&lt;br /&gt;
&lt;br /&gt;
nginx является одним из самых популярных серверов для быстрой &amp;quot;отдачи&amp;quot; контента с высоконагруженных сайтов. Подавляющее большинство системных администраторов использует его в паре с сервером Apache - это надёжное и годами проверенное решение. nginx позволяет быстро отдавать статический контент (изображения, тексты), пропуская более &amp;quot;сложные&amp;quot; запросы до нижестоящего Apache (который уже задействует средства PHP и MySQL). Таким образом, засчёт &amp;quot;снятия&amp;quot; огромного количества запросов с Apache, достигается снижение нагрузки на сервер и следовательно - многократное повышение скорости работы сайта.&lt;br /&gt;
&lt;br /&gt;
UMI.CMS с версии 2.8.3 умеет помещать страницы сайта в кэш nginx, позволяя таким образом отдавать их напрямую по вышеописанному механизму. Причём если вы что-то редактируете в &amp;quot;админке&amp;quot;, кэш всех задействованных страниц сразу же перестраивается, показывая посетителям сайта обновлённую информацию. Это выгодно отличает UMI.CMS от конкурентов, которые на данный момент способны обновлять кэш только по истечению длительного периода времени.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Далее следует информация для разработчиков:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы включить этот режим, требуется владение минимальными навыками системного администрирования. Если вы не администрируете свой сервер самостоятельно, обратитесь к технической поддержке вашего хостинга с целью внесения специальных настроек в конфигурационный файл nginx (см. приложенный файл).&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;apache&amp;quot;&amp;gt;&lt;br /&gt;
server {&lt;br /&gt;
  listen  192.168.7.127:80; # (1) IP и порт, на котором висит этот сервер&lt;br /&gt;
  server_name   192.168.7.127; # (2) К каким доменным именам применяются инструкции&lt;br /&gt;
	&lt;br /&gt;
  location / {&lt;br /&gt;
    error_page 412 = @dynamic;&lt;br /&gt;
    &lt;br /&gt;
    if ($request_method = &amp;#039;POST&amp;#039;) { return 412; }&lt;br /&gt;
&lt;br /&gt;
    if ($is_args = &amp;#039;?&amp;#039;) { return 412; }&lt;br /&gt;
  	    &lt;br /&gt;
    if ($cookie_umicms_session) { return 412;	}&lt;br /&gt;
  	&lt;br /&gt;
    try_files $uri/index.html @dynamic;&lt;br /&gt;
  	root /usr/local/apache2/htdocs/cache/$host; # (3) Путь до каталога закэшированных файлов&lt;br /&gt;
    index index.php;&lt;br /&gt;
  }&lt;br /&gt;
    &lt;br /&gt;
	location @dynamic {&lt;br /&gt;
    proxy_set_header	Host $host;&lt;br /&gt;
  	proxy_set_header	X-Real-IP	$remote_addr;&lt;br /&gt;
    proxy_set_header	X-Forwarded-For	$remote_addr;&lt;br /&gt;
  &lt;br /&gt;
  	proxy_pass http://192.168.7.127:81; # (4) Адрес и порт, на котором установлен бэкэнд (Apache)&lt;br /&gt;
  }&lt;br /&gt;
	    &lt;br /&gt;
  location ~* ^/admin {&lt;br /&gt;
  	error_page 412 = @dynamic;&lt;br /&gt;
    return 412;&lt;br /&gt;
  }&lt;br /&gt;
    &lt;br /&gt;
	location ~* \.php$ {&lt;br /&gt;
    error_page 412 = @dynamic;&lt;br /&gt;
    return 412;&lt;br /&gt;
  }&lt;br /&gt;
	    &lt;br /&gt;
  location ~* \.(jpg|jpeg|gif|bmp|png)$ {&lt;br /&gt;
    root /usr/local/apache2/htdocs; # (5) Путь к корневому каталогу сайта&lt;br /&gt;
#                                     (рекомендуется, чтобы изображения отдавались nginx-ом)&lt;br /&gt;
    access_log	off;&lt;br /&gt;
	}&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Внимание!&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
1. Данный конфигурационный файл неактуален на новых версиях системы.&lt;br /&gt;
&lt;br /&gt;
2. Здесь перечислены рекомендуемые параметры и настройки. В зависимости от особенностей вашего сервера, реальные настройки могут отличаться от указанных здесь. Действуйте по собственному разумению или обратитесь к системному администратору за советом.&lt;br /&gt;
&lt;br /&gt;
3. Мы рекомендуем не копировать эти настройки непосредственно в основной конфигурационный файл, а записать их в отдельный файл и подключить (include) к nginx.&lt;br /&gt;
&lt;br /&gt;
4. С версии 2.8.4.2 (22 июля 2011) система UMI.CMS, работающая на нескольких доменах, помещает кэш в подкаталоги по названиями этих доменов. Для этого вам нужно указать $host в блоке try_files: root /usr/local/apache2/htdocs/cache/$host;&lt;br /&gt;
&lt;br /&gt;
Затем отредактируйте настройки в файле config.ini системы UMI.CMS, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
[includes]&lt;br /&gt;
system.static-cache = указать тот же путь, что и в пункте (3) конфигурационного файла nginx&lt;br /&gt;
&lt;br /&gt;
[cache]&lt;br /&gt;
static.enabled = &amp;quot;1&amp;quot;&lt;br /&gt;
static.mode = &amp;quot;nginx&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Внимание!&amp;#039;&amp;#039;&amp;#039; Указанные здесь рекомендации относятся только к конфигурированию режима nginx. Вы можете добавлять другие настройки по своему усмотрению, при условии что вы понимаете что делаете.&lt;br /&gt;
&lt;br /&gt;
Если вы администрируете сервер самостоятельно, после внесения изменений не забудьте перезапустить nginx (заставить его перечитать конфигурационные файлы).&lt;br /&gt;
&lt;br /&gt;
Откройте главную страницу сайта в браузере. Затем проверьте, что в каталоге, указанном в пункте (3) конфигурационного файла nginx, создался статический html-файл главной страницы. На этом настройка закончена.&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы дополнительно проверить работу этого механизма кэширования, включите мониторинг HTTP-запросов и убедитесь, что повторный запрос в браузере этой же страницы возвращает ответ &amp;quot;304 Not Modified&amp;quot; от nginx. Это означает, что статический файл отдан nginx-ом. Затем отредактируйте любой контент, содержащийся на странице, откройте её в браузере снова, и убедитесь в том что страница изменилась.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Технические условия и ограничения:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Следует понимать, что страницы кэшируются целиком. Если у вас на страницах сайта используется динамический контент (меняющийся для каждого неавторизованного посетителя), то в кэш будет сохранен только один вариант - и он будет показываться всем неавторизованным посетителям. Обратите на это внимание при разработке сайта, или при включении кэширования на существующем сайте.&lt;br /&gt;
&lt;br /&gt;
Как правило, к этому относится блок Корзины: взависимости от действий [неавторизованного] посетителя, число товаров в блоке корзины изменяется - следовательно, данный блок кэшировать нельзя. Решение очень простое и применяется на всех высоконагруженных сайтах: измените вёрстку таким образом, чтобы динамические блоки подгружались аяксом &amp;quot;поверх&amp;quot; остального контента страницы. Механизм кэширования сделан так, что для авторизованных пользователей система UMI.CMS всегда выдаёт только динамический контент.&lt;br /&gt;
Также, можно настроить gzip сжатие, по следующей статье [http://wiki.umisoft.ru/Настройка_gzip_сжатия Настройка_gzip_сжатия].&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_TPL&amp;diff=7984</id>
		<title>Работа с корзиной без перезагрузки TPL</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B0%D0%B1%D0%BE%D1%82%D0%B0_%D1%81_%D0%BA%D0%BE%D1%80%D0%B7%D0%B8%D0%BD%D0%BE%D0%B9_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_TPL&amp;diff=7984"/>
		<updated>2015-11-12T13:33:54Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Проверенно на версии системы 2.9 редакция 21905&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Самый простой и удобный способ реализовать данную задачу заключается в том, что нужно использовать уже имеющиеся в UMI.CMS скрипты из тестового демосайта Demodizzy (шаблон современный). Для этого вам нужно установить локальную версию с данным шаблоном и скопировать файлы &amp;#039;&amp;#039;&amp;#039;&amp;quot;__common.js&amp;quot;&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;&amp;quot;basket.js&amp;quot;&amp;#039;&amp;#039;&amp;#039; из папки &amp;#039;&amp;#039;~/templates/demodizzy/js/&amp;#039;&amp;#039; в свою систему. За добавление товара в корзину отвечают методы &amp;#039;&amp;#039;&amp;#039;site.basket.add&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;basket.putElement&amp;#039;&amp;#039;&amp;#039; из файла: &amp;#039;&amp;#039;&amp;#039;&amp;quot;basket.js&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
После того как мы перенесли файлы на сайт с TPL шаблонизатором, необходимо отредактировать метод &amp;#039;&amp;#039;&amp;#039;site.utils.js.init&amp;#039;&amp;#039;&amp;#039; в файле &amp;#039;&amp;#039;&amp;#039;&amp;quot;__common.js&amp;quot;&amp;#039;&amp;#039;&amp;#039;. В этом методе подключается файл &amp;#039;&amp;#039;&amp;#039;&amp;quot;basket.js&amp;quot;&amp;#039;&amp;#039;&amp;#039; и поэтому необходимо изменить адрес этого файла в соответствии с тем куда Вы его перенесли. В нашем случае после редактирования метод будет выглядеть так:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
site.utils.js.init([&lt;br /&gt;
	&amp;#039;/js/client/basket.js&amp;#039;,&lt;br /&gt;
	&amp;#039;/templates/demoold/js/basket.js&amp;#039;,&lt;br /&gt;
]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Далее нужно подключить необходимые файлы. В шаблоне дизайна сайта вам нужно подключить файл &amp;#039;&amp;#039;&amp;#039;&amp;quot;__common.js&amp;quot;&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/js/jquery/jquery.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/templates/demoold/js/__common.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
&lt;br /&gt;
После того как фал подключен в шаблонах дизайна — нужно соответствующим образом модифицировать ссылку каталога на добавление товара.&lt;br /&gt;
&lt;br /&gt;
Данная ссылка описана в tpl шаблоне: &amp;#039;&amp;#039;~\tpls\emarket\default.tpl&amp;#039;&amp;#039; в блоке &amp;#039;&amp;#039;&amp;#039;$FORMS[&amp;#039;basket_add_link&amp;#039;]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Скрипт работает таким образом, что ищет необходимый элемент по ID и классу ссылки. По этому ссылка на добавление товара должна иметь следующий вид (если не модифицировать сам скрипт):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt; &lt;br /&gt;
$FORMS[&amp;#039;basket_add_link&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
	&amp;lt;a href=&amp;quot;#&amp;quot; id=&amp;quot;add_basket_%id%&amp;quot; class=&amp;quot;basket_list&amp;quot;&amp;gt;Положить в корзину&amp;lt;/a&amp;gt;&lt;br /&gt;
END;&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
Теперь необходимо соответствующим образом изменить шаблон корзины. Для этого нам нужно в файле &amp;#039;&amp;#039;~\tpls\emarket\basket.tpl&amp;#039;&amp;#039; добавить необходимые скрипту теги. А именно нужно присвоить значение класса class=&amp;quot;block basket basket_info_summary&amp;quot; тегу &amp;lt;div&amp;gt; блока &lt;br /&gt;
&lt;br /&gt;
$FORMS[&amp;#039;order_block&amp;#039;].&lt;br /&gt;
&lt;br /&gt;
Пример:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt; &lt;br /&gt;
$FORMS[&amp;#039;order_block&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
&amp;lt;div id=&amp;quot;rubricator&amp;quot; class=&amp;quot;block basket basket_info_summary&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt; &lt;br /&gt;
После этого добавление в корзину будет выполнятся с помощью скрипта, и не будет больше перезагружать страницу.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Категория:Модуль Интернет магазин]][[Категория:Верстка в TPL]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D1%83_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_(ajax)&amp;diff=7981</id>
		<title>Подписка на рассылку без перезагрузки страницы (ajax)</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%BF%D0%B8%D1%81%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D1%83_%D0%B1%D0%B5%D0%B7_%D0%BF%D0%B5%D1%80%D0%B5%D0%B7%D0%B0%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B8_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_(ajax)&amp;diff=7981"/>
		<updated>2015-11-05T14:37:12Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Модуль Рассылки]][[category:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Задача:&amp;#039;&amp;#039;&amp;#039; Реализовать подписку на рассылку посетителей сайта без перезагрузки страницы с помощью ajax.&amp;lt;br /&amp;gt;&amp;lt;br /&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Реализация:&amp;#039;&amp;#039;&amp;#039; В шаблон подписки на рассылку, по которому обрабатываются результаты работы макроса dispatches subscribe(), добавим JavaScript код для отправки ajax запросов:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;/js/jquery/jquery.jgrowl_minimized.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;/js/jquery/jquery.jgrowl.css&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;script&amp;gt;&lt;br /&gt;
	function sbs_frm_send( form ){&lt;br /&gt;
		var request_url = &amp;quot;/udata://dispatches/subscribe_do/.json&amp;quot;;&lt;br /&gt;
		var email = $(&amp;quot;input[name=&amp;#039;sbs_mail&amp;#039;]&amp;quot;, form);&lt;br /&gt;
		var params = {&amp;quot;sbs_mail&amp;quot; : email.val()};&lt;br /&gt;
		$.ajax({&lt;br /&gt;
			type: &amp;quot;POST&amp;quot;,&lt;br /&gt;
			url: request_url,&lt;br /&gt;
			data: params,&lt;br /&gt;
			dataType: &amp;quot;json&amp;quot;,&lt;br /&gt;
		})&lt;br /&gt;
		.done(function( result ) {&lt;br /&gt;
			getResult(result);&lt;br /&gt;
		})&lt;br /&gt;
		.fail(function( result ) {&lt;br /&gt;
			jQuery.jGrowl(&amp;#039;Возникла ошибка при выполнении запроса.&amp;#039;, {&lt;br /&gt;
						  &amp;#039;header&amp;#039;: &amp;#039;UMI.CMS - Ошибка&amp;#039;,&lt;br /&gt;
						  &amp;#039;life&amp;#039;: 10000&lt;br /&gt;
			});&lt;br /&gt;
		});&lt;br /&gt;
		&lt;br /&gt;
		function getResult( result ){&lt;br /&gt;
			responses = {&amp;quot;%subscribe_subscribe%&amp;quot;: &amp;quot;Вы подписались на рассылку&amp;quot;,&lt;br /&gt;
				     &amp;quot;%subscribe_incorrect_email%&amp;quot;: &amp;quot;Извините, Вы указали некорректный E-mail.&amp;quot;,&lt;br /&gt;
                                     &amp;quot;%subscribe_unsubscribed_ok%&amp;quot;: &amp;quot;Вы успешно отписались от рассылки.&amp;quot;,&lt;br /&gt;
                                     &amp;quot;%subscribe_unsubscribed_failed%&amp;quot;: &amp;quot;Не удалось отписаться от рассылки.&amp;quot;};&lt;br /&gt;
			var result_node = result[&amp;quot;result&amp;quot;];&lt;br /&gt;
			if (result_node[&amp;quot;class&amp;quot;] &amp;amp;amp;&amp;amp;amp; result_node[&amp;quot;class&amp;quot;] === &amp;quot;error&amp;quot;){&lt;br /&gt;
				jQuery.jGrowl( responses[result_node[&amp;quot;node&amp;quot;]], {&lt;br /&gt;
							   &amp;#039;header&amp;#039;: &amp;#039;UMI.CMS - ошибка&amp;#039;,&lt;br /&gt;
							   &amp;#039;life&amp;#039;: 10000&lt;br /&gt;
				});&lt;br /&gt;
				email.focus();&lt;br /&gt;
			}else{&lt;br /&gt;
				jQuery.jGrowl( responses[result_node], {&lt;br /&gt;
							   &amp;#039;header&amp;#039;: &amp;#039;UMI.CMS&amp;#039;,&lt;br /&gt;
							   &amp;#039;life&amp;#039;: 10000&lt;br /&gt;
				});&lt;br /&gt;
			}&lt;br /&gt;
			&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
	}&lt;br /&gt;
&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Тег &amp;lt;form&amp;gt; подписки на рассылку должен выглядеть следующим образом:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;javascript&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;form action=&amp;quot;/dispatches/subscribe_do/&amp;quot; name=&amp;quot;sbs_frm&amp;quot; method=&amp;quot;post&amp;quot; onsubmit=&amp;quot;sbs_frm_send(this);return false;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Примечание: для использования данного скрипта в tpl-шаблонизаторе, следует заменить спец символы &amp;quot;&amp;amp;amp;amp;&amp;quot; на &amp;quot;&amp;amp;&amp;quot;&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%81_1%D0%A1&amp;diff=7980</id>
		<title>Изменение иерархии при обмене данными с 1С</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%81_1%D0%A1&amp;diff=7980"/>
		<updated>2015-11-05T07:51:33Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;В статье [[Как_переместить_страницу_если_её_раздел_поменялся]] есть более простое решение&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
При импорте из CommerceML2.0 объекты располагаются в том иерархическом порядке, в котором они были в исходном файле, в дальнейшем, при обновлении данных средствами импорта их положение уже не изменяется, а обращение к объекту идёт напрямую по его идентификатору. Если требуется при обмене данными с 1С изменять иерархию в соответствии с импортируемыми данными, то необходимо добавить соответствующую обработку в шаблон импорт.&amp;lt;br /&amp;gt;&lt;br /&gt;
Перед импортом входящая информация из commerceML2.0 трансформируется по XSLT шаблону в формат UmiDump2.0. За иерархические связи в UmiDump отвечает нода &amp;lt;hierarchy&amp;gt;. Для того чтобы при импорте структура каталога обновлялась, необходимо чтобы после трансформации в UmiDump в нём бли записи об иерархических связях. Для этого скопируем содержимое файла ~/xsl/import/commerceML2.xsl в ~/xsl/import/custom/commerceML2.xsl удалив строку &amp;lt;xsl:include href=&amp;quot;custom/commerceML2.xsl&amp;quot; /&amp;gt;.&lt;br /&gt;
После этого находим шаблон&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;umidump xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; version=&amp;quot;2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/ПакетПредложений&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;count(КоммерческаяИнформация/Документ)&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация&amp;quot; mode=&amp;quot;document&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
        &amp;lt;/umidump&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и изменяем его, подключив два шаблона&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;umidump xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; version=&amp;quot;2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/ПакетПредложений&amp;quot; /&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;count(КоммерческаяИнформация/Документ)&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация&amp;quot; mode=&amp;quot;document&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
	    &amp;lt;xsl:variable name=&amp;quot;classid&amp;quot; select=&amp;quot;КоммерческаяИнформация/Классификатор/Ид&amp;quot; /&amp;gt;&lt;br /&gt;
			&lt;br /&gt;
            &amp;lt;hierarchy&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог/Товары/Товар&amp;quot; mode=&amp;quot;hierarchy&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор/Группы&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
		    &amp;lt;xsl:with-param name=&amp;quot;classid&amp;quot;&amp;gt;&lt;br /&gt;
		        &amp;lt;xsl:copy-of select=&amp;quot;$classid&amp;quot; /&amp;gt;&lt;br /&gt;
		    &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:apply-templates&amp;gt;					&lt;br /&gt;
            &amp;lt;/hierarchy&amp;gt;&lt;br /&gt;
        &amp;lt;/umidump&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
теперь добавим эти шаблоны в наш кастомный файл:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;КоммерческаяИнформация/Каталог/Товары/Товар&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{Группы/Ид}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;КоммерческаяИнформация/Классификатор/Группы&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:param name=&amp;quot;classid&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;//Группа&amp;quot; &amp;gt;&lt;br /&gt;
	    &amp;lt;xsl:with-param name=&amp;quot;classid&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:copy-of select=&amp;quot;$classid&amp;quot; /&amp;gt;&lt;br /&gt;
	    &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:apply-templates&amp;gt;		&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;//Группа&amp;quot; &amp;gt;&lt;br /&gt;
	&amp;lt;xsl:param name=&amp;quot;classid&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:if test=&amp;quot;name(../../.) = &amp;#039;Классификатор&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{$classid}&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:if&amp;gt;	&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:with-param name=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:copy-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:apply-templates&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:param name=&amp;quot;parent&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{$parent}&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:apply-templates select=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:with-param name=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:copy-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:apply-templates&amp;gt;			&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
теперь при обмене данными с 1С иерархия будет изменятся в соответствии с иерархией из импортируемого файла.&lt;br /&gt;
[[Категория:Модуль Обмен данными]] [[category:Интеграция с 1С]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%81_1%D0%A1&amp;diff=7979</id>
		<title>Изменение иерархии при обмене данными с 1С</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%81_1%D0%A1&amp;diff=7979"/>
		<updated>2015-11-05T06:29:29Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;В статье [[Как_переместить_страницу_если_её_раздел_поменялся]] есть более простое решение&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
При импорте из CommerceML2.0 объекты располагаются в том иерархическом порядке, в котором они были в исходном файле, в дальнейшем, при обновлении данных средствами импорта их положение уже не изменяется, а обращение к объекту идёт напрямую по его идентификатору. Если требуется при обмене данными с 1С изменять иерархию в соответствии с импортируемыми данными, то необходимо добавить соответствующую обработку в шаблон импорт.&amp;lt;br /&amp;gt;&lt;br /&gt;
Перед импортом входящая информация из commerceML2.0 трансформируется по XSLT шаблону в формат UmiDump2.0. За иерархические связи в UmiDump отвечает нода &amp;lt;hierarchy&amp;gt;. Для того чтобы при импорте структура каталога обновлялась, необходимо чтобы после трансформации в UmiDump в нём бли записи об иерархических связях. Для этого скопируем содержимое файла ~/xsl/import/commerceML2.xsl в ~/xsl/import/custom/commerceML2.xsl удалив строку &amp;lt;xsl:include href=&amp;quot;custom/commerceML2.xsl&amp;quot; /&amp;gt;.&lt;br /&gt;
После этого находим шаблон&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;umidump xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; version=&amp;quot;2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/ПакетПредложений&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;count(КоммерческаяИнформация/Документ)&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация&amp;quot; mode=&amp;quot;document&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
        &amp;lt;/umidump&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и изменяем его, подключив два шаблона&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;umidump xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; version=&amp;quot;2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/ПакетПредложений&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;count(КоммерческаяИнформация/Документ)&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация&amp;quot; mode=&amp;quot;document&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;hierarchy&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог/Товары/Товар&amp;quot; mode=&amp;quot;hierarchy&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор/Группы&amp;quot; mode=&amp;quot;hierarchy&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/hierarchy&amp;gt;&lt;br /&gt;
        &amp;lt;/umidump&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
теперь добавим эти шаблоны в наш кастомный файл:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;КоммерческаяИнформация/Каталог/Товары/Товар&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{Группы/Ид}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;КоммерческаяИнформация/Классификатор/Группы&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:param name=&amp;quot;classid&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;//Группа&amp;quot; &amp;gt;&lt;br /&gt;
	    &amp;lt;xsl:with-param name=&amp;quot;classid&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:copy-of select=&amp;quot;$classid&amp;quot; /&amp;gt;&lt;br /&gt;
	    &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:apply-templates&amp;gt;		&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;//Группа&amp;quot; &amp;gt;&lt;br /&gt;
	&amp;lt;xsl:param name=&amp;quot;classid&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:if test=&amp;quot;name(../../.) = &amp;#039;Классификатор&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{$classid}&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:if&amp;gt;	&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:with-param name=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:copy-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:apply-templates&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:param name=&amp;quot;parent&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{$parent}&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:apply-templates select=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:with-param name=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:copy-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:apply-templates&amp;gt;			&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
теперь при обмене данными с 1С иерархия будет изменятся в соответствии с иерархией из импортируемого файла.&lt;br /&gt;
[[Категория:Модуль Обмен данными]] [[category:Интеграция с 1С]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%81_1%D0%A1&amp;diff=7978</id>
		<title>Изменение иерархии при обмене данными с 1С</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%81_1%D0%A1&amp;diff=7978"/>
		<updated>2015-10-28T12:41:17Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;В статье [[Как_переместить_страницу_если_её_раздел_поменялся]] есть более простое решение&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
При импорте из CommerceML2.0 объекты располагаются в том иерархическом порядке, в котором они были в исходном файле, в дальнейшем, при обновлении данных средствами импорта их положение уже не изменяется, а обращение к объекту идёт напрямую по его идентификатору. Если требуется при обмене данными с 1С изменять иерархию в соответствии с импортируемыми данными, то необходимо добавить соответствующую обработку в шаблон импорт.&amp;lt;br /&amp;gt;&lt;br /&gt;
Перед импортом входящая информация из commerceML2.0 трансформируется по XSLT шаблону в формат UmiDump2.0. За иерархические связи в UmiDump отвечает нода &amp;lt;hierarchy&amp;gt;. Для того чтобы при импорте структура каталога обновлялась, необходимо чтобы после трансформации в UmiDump в нём бли записи об иерархических связях. Для этого скопируем содержимое файла ~/xsl/import/commerceML2.xsl в ~/xsl/import/custom/commerceML2.xsl удалив строку &amp;lt;xsl:include href=&amp;quot;custom/commerceML2.xsl&amp;quot; /&amp;gt;.&lt;br /&gt;
После этого находим шаблон&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;umidump xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; version=&amp;quot;2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/ПакетПредложений&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;count(КоммерческаяИнформация/Документ)&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация&amp;quot; mode=&amp;quot;document&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
        &amp;lt;/umidump&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и изменяем его, подключив два шаблона&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;umidump xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; version=&amp;quot;2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/ПакетПредложений&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;count(КоммерческаяИнформация/Документ)&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация&amp;quot; mode=&amp;quot;document&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;hierarchy&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог/Товары/Товар&amp;quot; mode=&amp;quot;hierarchy&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор/Группы&amp;quot; mode=&amp;quot;hierarchy&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/hierarchy&amp;gt;&lt;br /&gt;
        &amp;lt;/umidump&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
теперь добавим эти шаблоны в наш кастомный файл:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;КоммерческаяИнформация/Каталог/Товары/Товар&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{Группы/Ид}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;КоммерческаяИнформация/Классификатор/Группы&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;//Группа&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;//Группа&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:with-param name=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:copy-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:apply-templates&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:param name=&amp;quot;parent&amp;quot; /&amp;gt;&lt;br /&gt;
        &amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{$parent}&amp;quot;/&amp;gt;  &lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:with-param name=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:copy-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:apply-templates&amp;gt;   &lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
теперь при обмене данными с 1С иерархия будет изменятся в соответствии с иерархией из импортируемого файла.&lt;br /&gt;
[[Категория:Модуль Обмен данными]] [[category:Интеграция с 1С]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D1%8C&amp;diff=7977</id>
		<title>Мультисайтовость</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D1%8C&amp;diff=7977"/>
		<updated>2015-10-28T07:42:44Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;Система UMI.CMS поддерживает мультидоменность. Что это значит? Это значит, что под управлением одной системы UMI.CMS может работать сразу несколько сайтов на разных доменах*, что особенно удобно при организации бизнес порталов, много язычных сайтов, расположенных в разных доменных зонах, или больших интернет магазинов. Кроме того, Вы получаете единый центр управления всеми сайтами, а гибкая система настройки прав пользователей, позволяет назначить каждому порталу своих, независимых, контент менеджеров. Не менее важным преимуществом является возможность использования, на этапах разработки и сопровождения, общего программного кода (шаблонов дизайна и шаблонов макросов) и материалов, централизованное обновление и разработка дополнительного кастомного функционала.&lt;br /&gt;
Как организовать мультидоменность на UMI.CMS? Очень просто!&lt;br /&gt;
# 	Для начала, необходимо зарегистрировать новый домен. &lt;br /&gt;
# 	В &amp;#039;&amp;#039;&amp;#039;панели управления доменом&amp;#039;&amp;#039;&amp;#039; прописываете Name Server (NS) хостинга. Обратите внимание, что должен быть прописан NS того хостинга, на котором уже установлена и работает система UMI.CMS**&lt;br /&gt;
# 	В &amp;#039;&amp;#039;&amp;#039;панели управления хостингом&amp;#039;&amp;#039;&amp;#039; прописываете, чтобы сервер, при запросе нового домена, &amp;quot;смотрел&amp;quot; в ту же папку, где уже стоит и работает UMI.CMS. Другими словами - делаете новый домен зеркалом уже работающего.&lt;br /&gt;
# 	Заходите в административную панель системы UMI.CMS и, в модуле &amp;quot;Конфигурация&amp;quot;, на вкладке &amp;quot;Домены&amp;quot;, прописываете новый домен***. Можно прописывать как с “www” так и без “www”. Нажмите «Сохранить».****&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
С этого момента, система будет считать, что на ней установлено и работает уже два домена. В этом можно убедиться, если перейти в модуль «Структура». Под корневым деревом основного домена, появилось новое дерево структуры, с названием домена, который Вы только что создали. Система сама будет решать, какой контент необходимо возвращать.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
Вернитесь в модуль «Конфигурация» вкладка «Домены». Рядом с записью нового домена, после того, как Вы сохраняли изменения, в пункте 4, появилась иконка редактирования. Нажмите на неё. Откроется раздел, в котором Вы можете дописать зеркала, для только что созданного домена. К примеру, если Вы решили дописать на предыдущей странице домен без «www» то здесь можно указать с “www”. Это необходимо, чтобы Ваша страница открывалась на запрос в адресной строке браузера как вида &amp;#039;&amp;#039;www.my-site.com&amp;#039;&amp;#039; так и &amp;#039;&amp;#039;my-site.com&amp;#039;&amp;#039;. Так же, Вы можете указать здесь другие домены, которые являются зеркалом только что добавленного Вами домена.&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;em&amp;gt;&amp;lt;nowiki&amp;gt;*&amp;lt;/nowiki&amp;gt; При условии соблюдения лицензионного соглашения, скачать и ознакомитьс с которым Вы можете здесь  http://www.umi-cms.ru/buy/licence_agreement/ &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;**&amp;lt;/nowiki&amp;gt;Заметим, что, на момент написания этой статьи, редакции Free, Start и Shop не поддерживают возможность мультидоменности.&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;***&amp;lt;/nowiki&amp;gt; Если Вам необходимо сменить привязку Вашего лицензионного ключа с одного домена, зарегестрированного в системе UMI.CMS, на другой, то Вам необходимо ознакомиться со следующей статьёй http://wiki.umisoft.ru/Переактивация&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;nowiki&amp;gt;****&amp;lt;/nowiki&amp;gt; Более подробное описание модуля «Конфигурация», и вкладки «Домены» в том числе, Вы можете найти здесь http://help.umi-cms.ru/&amp;lt;br/&amp;gt;&amp;lt;/em&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;lt;b&amp;gt;Обратите внимание!!!&amp;lt;/b&amp;gt; Все домены должны располагаться на одном хостинге аккаунте и одном IP. (http://www.umi-cms.ru/buy/licence_agreement/).&lt;br /&gt;
&lt;br /&gt;
При подключении кириллических доменов, необходимо использовать информацию в данной статье: [[Подключение кириллических доменов рф]]&lt;br /&gt;
[[Категория:Вопросы установки настройки и переноса]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B2%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B8_%D0%B2_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0%BE%D0%BC_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5&amp;diff=7976</id>
		<title>Создание собственной вкладки в системном модуле</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BE%D0%B7%D0%B4%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%BE%D0%B1%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%B9_%D0%B2%D0%BA%D0%BB%D0%B0%D0%B4%D0%BA%D0%B8_%D0%B2_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%BD%D0%BE%D0%BC_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5&amp;diff=7976"/>
		<updated>2015-10-28T06:28:26Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Задача:&amp;#039;&amp;#039;&amp;#039; не затрагивая системный код кастомизировать системный модуль через добавление собственной вкладки.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Решение.&amp;#039;&amp;#039;&amp;#039;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Пояснения:&amp;#039;&amp;#039;&amp;#039;&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
В классе &amp;#039;&amp;#039;def_module&amp;#039;&amp;#039; находится метод &amp;#039;&amp;#039;__implement&amp;#039;&amp;#039; в задачи которого входит собрать все необходимые для работы модуля классы вместе.&lt;br /&gt;
Имплементятся все классы, находящиеся в файлах с двойным подчеркиванием, среди собранных будет и класс &amp;#039;&amp;#039;__emarket_custom_admin&amp;#039;&amp;#039;, находящийся в файле &amp;#039;&amp;#039;__custom_adm.php&amp;#039;&amp;#039;.&lt;br /&gt;
Далее, при помощи php-функции &amp;#039;&amp;#039;get_class_methods&amp;#039;&amp;#039; из собранных классов получаем массив всех методов из всех классов.&lt;br /&gt;
Далее, в переменную &amp;#039;&amp;#039;fn&amp;#039;&amp;#039; помещается название функции &amp;#039;&amp;#039;onImplement&amp;#039;&amp;#039; и при помощи функции &amp;#039;&amp;#039;in_array&amp;#039;&amp;#039; мы ищем, имеется ли данное значение среди объявленных методов. Если такое значение есть, то система исполняет код описанный в функции &amp;#039;&amp;#039;onImplement&amp;#039;&amp;#039;.&lt;br /&gt;
Таким образом, если мы хотим получить доступ к системным методам, нам необходимо их задействовать в классе &amp;#039;&amp;#039;__emarket_custom_admin&amp;#039;&amp;#039; и в методе &amp;#039;&amp;#039;onImplement()&amp;#039;&amp;#039;.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь добавим новую вкладку в модуль Интернет-магазина.&amp;lt;br/&amp;gt;&lt;br /&gt;
Для этого откроем файл &amp;#039;&amp;#039;/classes/modules/emarket/__custom_adm.php&amp;#039;&amp;#039; и в классе &amp;#039;&amp;#039;__emarket_custom_admin&amp;#039;&amp;#039; напишем метод &amp;#039;&amp;#039;onImplement()&amp;#039;&amp;#039;:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function onImplement() {&lt;br /&gt;
	$commonTabs = $this-&amp;gt;getCommonTabs();&lt;br /&gt;
	$commonTabs-&amp;gt;add(&amp;#039;mytab&amp;#039;);&lt;br /&gt;
	$configTabs = $this-&amp;gt;getConfigTabs();&lt;br /&gt;
	$configTabs-&amp;gt;add(&amp;#039;mytabconfig&amp;#039;);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для создания вкладки мы воспользовались системным методом &amp;#039;&amp;#039;getCommonTabs&amp;#039;&amp;#039;, который описывается в классе &amp;#039;&amp;#039;def_module&amp;#039;&amp;#039;.&lt;br /&gt;
&amp;lt;br&amp;gt;&lt;br /&gt;
Вкладка создана, как в самом модуле, так и в его настройках, но вкладки имеют системные имена:&amp;lt;br&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;header-emarket-mytab&amp;#039;&amp;#039; &amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;header-emarket-mytabconfig&amp;#039;&amp;#039;&amp;lt;br&amp;gt;&lt;br /&gt;
Чтобы вкладки получили нужные нам имена, нам необходимо их описать в языковых файлах &amp;#039;&amp;#039;i18n.{язык}.php&amp;#039;&amp;#039;.&amp;lt;br&amp;gt; &lt;br /&gt;
Создадим файл &amp;#039;&amp;#039;i18n.ru.php&amp;#039;&amp;#039; с таким содержанием:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
$i18n = array(&lt;br /&gt;
&amp;#039;header-emarket-mytab&amp;#039;		=&amp;gt; &amp;#039;Моя кастомная вкладка&amp;#039;,&lt;br /&gt;
&amp;#039;header-emarket-mytabconfig&amp;#039;	=&amp;gt; &amp;#039;Моя вкладка настроек&amp;#039;,&lt;br /&gt;
);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В результате вкладки получат нормальные имена.&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
При переходе на созданную вкладку мы получим сообщение об ошибке:&lt;br /&gt;
    Запрашиваемый ресурс не существует&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Чтобы ошибка исчезла, нам необходимо описать наши созданные вкладки в виде функций (в том же файле __custom_adm.php):&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function mytab() {&lt;br /&gt;
  	$this-&amp;gt;setDataType(&amp;quot;list&amp;quot;);&lt;br /&gt;
	$this-&amp;gt;setActionType(&amp;quot;view&amp;quot;);&lt;br /&gt;
	if($this-&amp;gt;ifNotXmlMode()) return $this-&amp;gt;doData();&lt;br /&gt;
 }&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Более подробно в [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/razrabotka_sobstvennyh_makrosov_i_modulej/ документации по созданию своего модуля]&lt;br /&gt;
&amp;lt;p&amp;gt;&amp;lt;/p&amp;gt;&lt;br /&gt;
Для отображением данных на вкладке, необходимо создать файл &amp;#039;&amp;#039;/styles/skins/mac/data/modules/emarket/list.view.custom.xsl&amp;#039;&amp;#039;, где описать шаблон для вкладки:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;&lt;br /&gt;
&amp;lt;!DOCTYPE xsl:stylesheet SYSTEM &amp;quot;ulang://common&amp;quot; [&lt;br /&gt;
]&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:stylesheet version=&amp;quot;1.0&amp;quot; xmlns:xsl=&amp;quot;http://www.w3.org/1999/XSL/Transform&amp;quot; xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;/result[@method = &amp;#039;mytab&amp;#039;]/data[@type = &amp;#039;list&amp;#039; and @action = &amp;#039;view&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
		Test&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Более подробно в [http://api.docs.umi-cms.ru/razrabotka_nestandartnogo_funkcionala/kodirovanie_administrativnogo_interfejsa/ документации по кодированию административного интерфейса]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;По материалам отдела разработки&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
[[Категория:Написание кастомных макросов]][[Категория:API]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%81_1%D0%A1&amp;diff=7975</id>
		<title>Изменение иерархии при обмене данными с 1С</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%98%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B8%D0%B5%D1%80%D0%B0%D1%80%D1%85%D0%B8%D0%B8_%D0%BF%D1%80%D0%B8_%D0%BE%D0%B1%D0%BC%D0%B5%D0%BD%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%BC%D0%B8_%D1%81_1%D0%A1&amp;diff=7975"/>
		<updated>2015-10-27T12:28:13Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;В статье [[Как_переместить_страницу_если_её_раздел_поменялся]] есть более простое решение&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
При импорте из CommerceML2.0 объекты располагаются в том иерархическом порядке, в котором они были в исходном файле, в дальнейшем, при обновлении данных средствами импорта их положение уже не изменяется, а обращение к объекту идёт напрямую по его идентификатору. Если требуется при обмене данными с 1С изменять иерархию в соответствии с импортируемыми данными, то необходимо добавить соответствующую обработку в шаблон импорт.&amp;lt;br /&amp;gt;&lt;br /&gt;
Перед импортом входящая информация из commerceML2.0 трансформируется по XSLT шаблону в формат UmiDump2.0. За иерархические связи в UmiDump отвечает нода &amp;lt;hierarchy&amp;gt;. Для того чтобы при импорте структура каталога обновлялась, необходимо чтобы после трансформации в UmiDump в нём бли записи об иерархических связях. Для этого скопируем содержимое файла ~/xsl/import/commerceML2.xsl в ~/xsl/import/custom/commerceML2.xsl удалив строку &amp;lt;xsl:include href=&amp;quot;custom/commerceML2.xsl&amp;quot; /&amp;gt;.&lt;br /&gt;
После этого находим шаблон&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;umidump xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; version=&amp;quot;2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/ПакетПредложений&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;count(КоммерческаяИнформация/Документ)&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация&amp;quot; mode=&amp;quot;document&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
        &amp;lt;/umidump&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
и изменяем его, подключив два шаблона&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
        &amp;lt;umidump xmlns:xlink=&amp;quot;http://www.w3.org/TR/xlink&amp;quot; version=&amp;quot;2.0&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/ПакетПредложений&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
            &amp;lt;xsl:if test=&amp;quot;count(КоммерческаяИнформация/Документ)&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация&amp;quot; mode=&amp;quot;document&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
            &amp;lt;hierarchy&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Каталог/Товары/Товар&amp;quot; mode=&amp;quot;hierarchy&amp;quot;/&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:apply-templates select=&amp;quot;КоммерческаяИнформация/Классификатор/Группы&amp;quot; mode=&amp;quot;hierarchy&amp;quot;/&amp;gt;&lt;br /&gt;
            &amp;lt;/hierarchy&amp;gt;&lt;br /&gt;
        &amp;lt;/umidump&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
теперь добавим эти шаблоны в наш кастомный файл:&lt;br /&gt;
&amp;lt;source lang=xml&amp;gt;&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;КоммерческаяИнформация/Каталог/Товары/Товар&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;relation id=&amp;quot;{Ид}&amp;quot; parent-id=&amp;quot;{Группы/Ид}&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;КоммерческаяИнформация/Классификатор/Группы&amp;quot; mode=&amp;quot;hierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;//Группа&amp;quot;/&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
        &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;//Группа&amp;quot; &amp;gt;&lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:with-param name=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:copy-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:apply-templates&amp;gt;&lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
 &lt;br /&gt;
    &amp;lt;xsl:template match=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
        &amp;lt;xsl:param name=&amp;quot;parent&amp;quot; /&amp;gt;      &lt;br /&gt;
        &amp;lt;xsl:apply-templates select=&amp;quot;Группы/Группа&amp;quot; mode=&amp;quot;ghierarchy&amp;quot;&amp;gt;&lt;br /&gt;
            &amp;lt;xsl:with-param name=&amp;quot;parent&amp;quot;&amp;gt;&lt;br /&gt;
                &amp;lt;xsl:copy-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&lt;br /&gt;
            &amp;lt;/xsl:with-param&amp;gt;&lt;br /&gt;
        &amp;lt;/xsl:apply-templates&amp;gt;   &lt;br /&gt;
    &amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
теперь при обмене данными с 1С иерархия будет изменятся в соответствии с иерархией из импортируемого файла.&lt;br /&gt;
[[Категория:Модуль Обмен данными]] [[category:Интеграция с 1С]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7973</id>
		<title>Добавление счетчика посещений на страницы сайта</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7973"/>
		<updated>2015-10-26T08:11:00Z</updated>

		<summary type="html">&lt;p&gt;Alexei: переименовал «Добавление счётчика посещений на страницы сайта» в «Добавление счетчика посещений на страницы сайта»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Модуль Интернет магазин]]&lt;br /&gt;
&lt;br /&gt;
Для добавления подобного функционала, нужно прежде всего создать в типе данных страница ещё одно поле, которое будет содержать в себе значение количества посещений. Добавим на страницу новую группу (чтобы проще поле было искать) например статистика (statistics), в эту группу добавим поле типа «Счётчик» и назовём его, к примеру, «количество посещений» (counter).&lt;br /&gt;
Теперь нам нужно написать кастомный макрос, который будет при выполнении увеличивать значение поля «Количество посещений». Идём в папку ~/classes/modules/ открываем файл custom.php и добавляем (после строки //TODO: Write your own macroses here) следующий код:&lt;br /&gt;
               &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt; public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                        return $element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого, в шаблоне, который будет выводить данную страницу размещаем макрос %custom counter(%pid%)% если это TPL шаблон либо &amp;lt;xsl:apply-templates select=&amp;quot;document(concat(&amp;#039;udata://custom/counter/&amp;#039;,page/@id))&amp;quot; /&amp;gt; для XSLT шаблона. Макрос будет срабатывать при каждом открытии страницы, увеличивать значение поля «Количество просмотров» на единицу и выводить количество просмотров. /Если вывод значений поля не требуется, нужно немного изменить код макроса:&lt;br /&gt;
           &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;     public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;counter&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;counter&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
[[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D1%91%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7974</id>
		<title>Добавление счётчика посещений на страницы сайта</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D1%91%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7974"/>
		<updated>2015-10-26T08:11:00Z</updated>

		<summary type="html">&lt;p&gt;Alexei: переименовал «Добавление счётчика посещений на страницы сайта» в «Добавление счетчика посещений на страницы сайта»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Добавление счетчика посещений на страницы сайта]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7972</id>
		<title>Добавление счетчика посещений на страницы сайта</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7972"/>
		<updated>2015-10-26T08:08:19Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Модуль Интернет магазин]]&lt;br /&gt;
&lt;br /&gt;
Для добавления подобного функционала, нужно прежде всего создать в типе данных страница ещё одно поле, которое будет содержать в себе значение количества посещений. Добавим на страницу новую группу (чтобы проще поле было искать) например статистика (statistics), в эту группу добавим поле типа «Счётчик» и назовём его, к примеру, «количество посещений» (counter).&lt;br /&gt;
Теперь нам нужно написать кастомный макрос, который будет при выполнении увеличивать значение поля «Количество посещений». Идём в папку ~/classes/modules/ открываем файл custom.php и добавляем (после строки //TODO: Write your own macroses here) следующий код:&lt;br /&gt;
               &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt; public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                        return $element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого, в шаблоне, который будет выводить данную страницу размещаем макрос %custom counter(%pid%)% если это TPL шаблон либо &amp;lt;xsl:apply-templates select=&amp;quot;document(concat(&amp;#039;udata://custom/counter/&amp;#039;,page/@id))&amp;quot; /&amp;gt; для XSLT шаблона. Макрос будет срабатывать при каждом открытии страницы, увеличивать значение поля «Количество просмотров» на единицу и выводить количество просмотров. /Если вывод значений поля не требуется, нужно немного изменить код макроса:&lt;br /&gt;
           &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;     public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;counter&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;counter&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
[[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7971</id>
		<title>Добавление счетчика посещений на страницы сайта</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7971"/>
		<updated>2015-10-26T08:03:18Z</updated>

		<summary type="html">&lt;p&gt;Alexei: Правки Alexei (обсуждение) откачены к версии Mad grant&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Модуль Интернет магазин]]&lt;br /&gt;
&lt;br /&gt;
Для добавления подобного функционала, нужно прежде всего создать в типе данных страница ещё одно поле, которое будет содержать в себе значение количества посещений. Добавим на страницу новую группу (чтобы проще поле было искать) например статистика (statistics), в эту группу добавим поле типа «Счётчик» и назовём его, к примеру, «количество посещений» (counter).&lt;br /&gt;
Теперь нам нужно написать кастомный макрос, который будет при выполнении увеличивать значение поля «Количество посещений». Идём в папку ~/classes/modules/ открываем файл custom.php и добавляем (после строки //TODO: Write your own macroses here) следующий код:&lt;br /&gt;
               &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt; public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                        return $element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого, в шаблоне, который будет выводить данную страницу размещаем макрос %custom counter(%pid%)% если это TPL шаблон либо &amp;lt;xsl:apply-templates select=&amp;quot;document(concat(&amp;#039;udata://custom/counter/&amp;#039;,page/@id))&amp;quot; /&amp;gt; для XSLT шаблона. Макрос будет срабатывать при каждом открытии страницы, увеличивать значение поля «Количество просмотров» на единицу и выводить количество просмотров. /Если вывод значений поля не требуется, нужно немного изменить код макроса:&lt;br /&gt;
           &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;     public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;counter&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;counter&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                        return «»;//$element-&amp;gt;getValue(&amp;quot;counter&amp;quot;);&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
[[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7970</id>
		<title>Добавление счетчика посещений на страницы сайта</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7970"/>
		<updated>2015-10-26T07:59:48Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Модуль Интернет магазин]]&lt;br /&gt;
&lt;br /&gt;
Для добавления подобного функционала, нужно прежде всего создать в типе данных страница ещё одно поле, которое будет содержать в себе значение количества посещений. Добавим на страницу новую группу (чтобы проще поле было искать) например статистика (statistics), в эту группу добавим поле типа «Счётчик» и назовём его, к примеру, «количество посещений» (counter).&lt;br /&gt;
Теперь нам нужно написать кастомный макрос, который будет при выполнении увеличивать значение поля «Количество посещений». Идём в папку ~/classes/modules/ открываем файл custom.php и добавляем (после строки //TODO: Write your own macroses here) следующий код:&lt;br /&gt;
               &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt; public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                        return $element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого, в шаблоне, который будет выводить данную страницу размещаем макрос %custom counter(%pid%)% если это TPL шаблон либо &amp;lt;xsl:apply-templates select=&amp;quot;document(concat(&amp;#039;udata://custom/counter/&amp;#039;,page/@id))&amp;quot; /&amp;gt; для XSLT шаблона. Макрос будет срабатывать при каждом открытии страницы, увеличивать значение поля «Количество просмотров» на единицу и выводить количество просмотров. /Если вывод значений поля не требуется, нужно немного изменить код макроса:&lt;br /&gt;
           &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;     public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;counter&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;counter&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                        return «»;&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
[[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7969</id>
		<title>Добавление счетчика посещений на страницы сайта</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%BE%D0%B1%D0%B0%D0%B2%D0%BB%D0%B5%D0%BD%D0%B8%D0%B5_%D1%81%D1%87%D0%B5%D1%82%D1%87%D0%B8%D0%BA%D0%B0_%D0%BF%D0%BE%D1%81%D0%B5%D1%89%D0%B5%D0%BD%D0%B8%D0%B9_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D1%8B_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&amp;diff=7969"/>
		<updated>2015-10-26T07:58:21Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[Категория:Модуль Интернет магазин]]&lt;br /&gt;
&lt;br /&gt;
Для добавления подобного функционала, нужно прежде всего создать в типе данных страница ещё одно поле, которое будет содержать в себе значение количества посещений. Добавим на страницу новую группу (чтобы проще поле было искать) например статистика (statistics), в эту группу добавим поле типа «Счётчик» и назовём его, к примеру, «количество посещений» (counter).&lt;br /&gt;
Теперь нам нужно написать кастомный макрос, который будет при выполнении увеличивать значение поля «Количество посещений». Идём в папку ~/classes/modules/ открываем файл custom.php и добавляем (после строки //TODO: Write your own macroses here) следующий код:&lt;br /&gt;
               &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt; public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                        return $element-&amp;gt;getValue(&amp;quot;kolichestvo_prosmotrov&amp;quot;);&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
После этого, в шаблоне, который будет выводить данную страницу размещаем макрос %custom counter(%pid%)% если это TPL шаблон либо &amp;lt;xsl:apply-templates select=&amp;quot;document(concat(&amp;#039;udata://custom/counter/&amp;#039;,page/@id))&amp;quot; /&amp;gt; для XSLT шаблона. Макрос будет срабатывать при каждом открытии страницы, увеличивать значение поля «Количество просмотров» на единицу и выводить количество просмотров. /Если вывод значений поля не требуется, нужно немного изменить код макроса:&lt;br /&gt;
           &amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;     public function counter($current_page_id) {&lt;br /&gt;
                        $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
                        $element=$hierarchy-&amp;gt;getElement($current_page_id);&lt;br /&gt;
                        $temp_count=$element-&amp;gt;getValue(&amp;#039;counter&amp;#039;);&lt;br /&gt;
                        ++$temp_count;&lt;br /&gt;
                        $element-&amp;gt;setValue(&amp;quot;counter&amp;quot;,$temp_count);&lt;br /&gt;
                        $element-&amp;gt;commit();&lt;br /&gt;
                        return «»;//$element-&amp;gt;getValue(&amp;quot;counter&amp;quot;);&lt;br /&gt;
                } &amp;lt;/source&amp;gt;&lt;br /&gt;
[[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_UMI.CMS&amp;diff=7968</id>
		<title>Переход с триальной версии на коммерческую версию системы UMI.CMS</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_UMI.CMS&amp;diff=7968"/>
		<updated>2015-10-22T08:47:39Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.11&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Задача:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Активировать систему лицензионным ключом коммерческой редакции&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Решение:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Для активации системы нам необходимо войти в модуль &amp;quot;Конфигурация&amp;quot;, и на вкладке &amp;quot;Домены&amp;quot; очистить поле &amp;quot;Доменный ключ&amp;quot; и затем нажать кнопку &amp;quot;Сохранить&amp;quot;. При выполнении данных действий фактический домен должен совпадать с основным доменом, который указан на вкладке &amp;quot;Домены&amp;quot; модуля &amp;quot;Конфигурация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:сброс_ключа.jpg]]&lt;br /&gt;
&lt;br /&gt;
Далее, появляется окно &amp;quot;Неверный лицензионный ключ&amp;quot;, в этом окне присутствует поле для ввода лицензионного ключа, соответственно вводим ключ и нажимаем на кнопку &amp;quot;Проверить&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
[[Файл:key4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ключ не принимается, обращаемся к статье [http://wiki.umisoft.ru/Не_принимается_лицензионный_ключ]&lt;br /&gt;
&lt;br /&gt;
При переходе с одной редакции системы на другую происходит следующее:&lt;br /&gt;
&lt;br /&gt;
1. Модули, которые отсутствуют в Вашей редакции удаляются (если Вы переходите на редакцию с большим числом модулей, то для того чтобы новые модули появились в системе, необходимо обновить систему или обновить принудительно, если версия системы актуальная)&lt;br /&gt;
&lt;br /&gt;
2. Ваш сайт будет работать неограниченное время (на триальном ключе только 30 дней)&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D0%B1%D1%80%D0%BE%D1%81_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0.jpg&amp;diff=7967</id>
		<title>Файл:Сброс ключа.jpg</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:%D0%A1%D0%B1%D1%80%D0%BE%D1%81_%D0%BA%D0%BB%D1%8E%D1%87%D0%B0.jpg&amp;diff=7967"/>
		<updated>2015-10-22T08:47:04Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_UMI.CMS&amp;diff=7966</id>
		<title>Переход с триальной версии на коммерческую версию системы UMI.CMS</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%B5%D1%80%D0%B5%D1%85%D0%BE%D0%B4_%D1%81_%D1%82%D1%80%D0%B8%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B9_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D0%B8_%D0%BD%D0%B0_%D0%BA%D0%BE%D0%BC%D0%BC%D0%B5%D1%80%D1%87%D0%B5%D1%81%D0%BA%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D1%8B_UMI.CMS&amp;diff=7966"/>
		<updated>2015-10-22T08:46:43Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 2.9.6&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Задача:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Активировать систему лицензионным ключом коммерческой редакции&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Решение:&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
Для активации системы нам необходимо войти в модуль &amp;quot;Конфигурация&amp;quot;, и на вкладке &amp;quot;Домены&amp;quot; очистить поле &amp;quot;Доменный ключ&amp;quot; и затем нажать кнопку &amp;quot;Сохранить&amp;quot;. При выполнении данных действий фактический домен должен совпадать с основным доменом, который указан на вкладке &amp;quot;Домены&amp;quot; модуля &amp;quot;Конфигурация&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[Файл:key2.png]]&lt;br /&gt;
[[Файл:сброс_ключа.jpg]]&lt;br /&gt;
&lt;br /&gt;
Далее, появляется окно &amp;quot;Неверный лицензионный ключ&amp;quot;, в этом окне присутствует поле для ввода лицензионного ключа, соответственно вводим ключ и нажимаем на кнопку &amp;quot;Проверить&amp;quot;. &lt;br /&gt;
&lt;br /&gt;
[[Файл:key4.png]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Если ключ не принимается, обращаемся к статье [http://wiki.umisoft.ru/Не_принимается_лицензионный_ключ]&lt;br /&gt;
&lt;br /&gt;
При переходе с одной редакции системы на другую происходит следующее:&lt;br /&gt;
&lt;br /&gt;
1. Модули, которые отсутствуют в Вашей редакции удаляются (если Вы переходите на редакцию с большим числом модулей, то для того чтобы новые модули появились в системе, необходимо обновить систему или обновить принудительно, если версия системы актуальная)&lt;br /&gt;
&lt;br /&gt;
2. Ваш сайт будет работать неограниченное время (на триальном ключе только 30 дней)&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD_%22%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%22&amp;diff=7965</id>
		<title>Демо-дизайн &quot;Современный&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD_%22%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%22&amp;diff=7965"/>
		<updated>2015-09-30T12:40:18Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Первое знакомство&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Вы решили использовать демо-дизайн &amp;quot;Современный&amp;quot;, то Вам предстоит познакомиться с устройством шаблонов. Эта статья должна Вам в этом немного помочь.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все шаблоны xslt-шаблонизатора находятся в папке xsltTpls. По умолчанию, входной точкой во все шаблоны является default.xsl&lt;br /&gt;
Этот шаблон нужен только для того, чтобы пред-определить все наиболее часто встречающиеся значения и присвоить их переменным, а также подключить основные шаблоны.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме шаблона default.xsl в папке xsltTpls находятся другие подпапки. В первую очередь стоит обратить внимание на папку &amp;quot;layouts&amp;quot;. В ней находится только один шаблон default.xsl. Это основной шаблон, который определяет общий внешний вид страницы. Именно в нём задаётся основная разметка и &amp;quot;вход&amp;quot; в шаблоны &amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:template match=&amp;quot;/&amp;quot; mode=&amp;quot;layout&amp;quot;&amp;gt;. &lt;br /&gt;
Сам шаблон можно условно поделить следующие части: шапка, дно, левое меню, правое меню и контент. Все поля, кроме контента, не меняют своего содержания, т.е. отвечают за вывод одних и тех же элементов оформления (будь то вывод последних новостей или меню).&lt;br /&gt;
Иначе дело обстоит с контентом.&amp;lt;br&amp;gt;&lt;br /&gt;
В xslt-шаблонизаторе для всех страниц определён метод и модуль, т.е. способ их формирования. Можно посмотреть как выглядит страница в виде xml-документа, если после адреса страницы дописать .xml (к примеру так www.ваш_сайт.ru/любая_страница/.xml). В первой строке буде узел result и у него два атрибута module и method.&amp;lt;br&amp;gt;&lt;br /&gt;
Если Вы открываете страницу контента, то шаблонизатор вернёт заголовок result:&amp;lt;br&amp;gt;&lt;br /&gt;
 module=&amp;quot;content&amp;quot; method=&amp;quot;content&amp;quot;&lt;br /&gt;
если открывать страницу с объектом каталога то заголовок result уже будет таким:&amp;lt;br&amp;gt;&lt;br /&gt;
 module=&amp;quot;catalog&amp;quot; method=&amp;quot;object&amp;quot; &lt;br /&gt;
и т.д. Для всех типов страниц предусмотрены свои заголовки, по названию модуля и метода, которые отвечают за их выполнение. Если посмотреть в шаблон - в основном центральном блоке стоит обработчик, который ищет подходящий шаблон на основании этих заголовков:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:apply-templates select=&amp;quot;result&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь вернёмся к организации шаблонов. Все шаблоны подключаются в главном файле через вызов вида:&amp;lt;br&amp;gt;&lt;br /&gt;
 modules/имя_модуля/common.xsl&lt;br /&gt;
Сам файл common.xsl не содержит какой-либо полезной информации, он просто подключает все шаблоны из этой же папки. Шаблоны, для удобства, называются также как макросы, за результат отработки которых они отвечают.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельно нужно ответить шаблоны:&amp;lt;br&amp;gt;&lt;br /&gt;
common.xsl в папке xsltTpls  здесь лежат те макросы, которые на языке tpl называются системными (system)&amp;lt;br&amp;gt;&lt;br /&gt;
папка library также содержит шаблоны, отвечающие за обработку системных макросов.&amp;lt;br&amp;gt;&lt;br /&gt;
sample.xsl в папке xsltTpls содержит пример самой простой страницы на xslt&amp;lt;br&amp;gt;&lt;br /&gt;
папка sys-tpls содержит шаблоны преобразования данных для служебных целей (печать заказов, карта google и другие)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для знакомства с xslt-шаблонизатором имеет смысл ознакомиться с учебным пособием, которое можно скачать здесь: &lt;br /&gt;
 http://docs.umi-cms.ru/xslt-umi-devbook/&lt;br /&gt;
[[Категория:Верстка в XSLT|Современный]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD_%22%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%22&amp;diff=7964</id>
		<title>Демо-дизайн &quot;Современный&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD_%22%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%22&amp;diff=7964"/>
		<updated>2015-09-30T12:38:37Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Первое знакомство&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Вы решили использовать демо-дизайн &amp;quot;Современный&amp;quot;, то Вам предстоит познакомиться с устройством шаблонов. Эта статья должна Вам в этом немного помочь.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все шаблоны xslt-шаблонизатора находятся в папке xsltTpls. По умолчанию, входной точкой во все шаблоны является default.xsl&lt;br /&gt;
Этот шаблон нужен только для того, чтобы пред-определить все наиболее часто встречающиеся значения и присвоить их переменным, а также подключить основные шаблоны.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме шаблона default.xsl в папке xsltTpls находятся другие подпапки. В первую очередь стоит обратить внимание на папку &amp;quot;layouts&amp;quot;. В ней находится только один шаблон default.xsl. Это основной шаблон, который определяет общий внешний вид страницы. Именно в нём задаётся основная разметка и &amp;quot;вход&amp;quot; в шаблоны &amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:template match=&amp;quot;/&amp;quot; mode=&amp;quot;layout&amp;quot;&amp;gt;. &lt;br /&gt;
Сам шаблон можно условно поделить следующие части: шапка, дно, левое меню, правое меню и контент. Все поля, кроме контента, не меняют своего содержания, т.е. отвечают за вывод одних и тех же элементов оформления (будь то вывод последних новостей или меню).&lt;br /&gt;
Иначе дело обстоит с контентом.&amp;lt;br&amp;gt;&lt;br /&gt;
В xslt-шаблонизаторе для всех страниц определён метод и модуль, т.е. способ их формирования. Можно посмотреть как выглядит страница в виде xml-документа, если после адреса страницы дописать .xml (к примеру так www.ваш_сайт.ru/любая_страница/.xml). В первой строке буде узел result и у него два атрибута module и method.&amp;lt;br&amp;gt;&lt;br /&gt;
Если Вы открываете страницу контента, то шаблонизатор вернёт заголовок result:&amp;lt;br&amp;gt;&lt;br /&gt;
 module=&amp;quot;content&amp;quot; method=&amp;quot;content&amp;quot;&lt;br /&gt;
если открывать страницу с объектом каталога то заголовок result уже будет таким:&amp;lt;br&amp;gt;&lt;br /&gt;
 module=&amp;quot;catalog&amp;quot; method=&amp;quot;object&amp;quot; &lt;br /&gt;
и т.д. Для всех типов страниц предусмотрены свои заголовки, по названию модуля и метода, которые отвечают за их выполнение. Если посмотреть в шаблон - в основном центральном блоке стоит обработчик, который ищет подходящий шаблон на основании этих заголовков:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:apply-templates select=&amp;quot;result&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь вернёмся к организации шаблонов. Все шаблоны подключаются в главном файле через вызов вида:&amp;lt;br&amp;gt;&lt;br /&gt;
 modules/имя_модуля/common.xsl&lt;br /&gt;
Сам файл common.xsl не содержит какой-либо полезной информации, он просто подключает все шаблоны из этой же папки. Шаблоны, для удобства, называются также как макросы, за результат отработки которых они отвечают.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельно нужно ответить шаблоны:&amp;lt;br&amp;gt;&lt;br /&gt;
common.xsl в папке xsltTpls  здесь лежат те макросы, которые на языке tpl называются системными (system)&amp;lt;br&amp;gt;&lt;br /&gt;
папка library также содержит шаблоны, отвечающие за обработку системных макросов.&amp;lt;br&amp;gt;&lt;br /&gt;
sample.xsl в папке xsltTpls содержит пример самой простой страницы на xslt&amp;lt;br&amp;gt;&lt;br /&gt;
папка sys-tpls содержит шаблоны преобразования данных для служебных целей (печать заказов, карта google и другие)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для знакомства с xslt-шаблонизатором имеет смысл ознакомиться с учебным пособием, которое можно скачать здесь: &lt;br /&gt;
 http://www.umi-cms.ru/support/docs/xslt-umi-devbook/&lt;br /&gt;
[[Категория:Верстка в XSLT|Современный]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD_%22%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%22&amp;diff=7963</id>
		<title>Демо-дизайн &quot;Современный&quot;</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%94%D0%B5%D0%BC%D0%BE-%D0%B4%D0%B8%D0%B7%D0%B0%D0%B9%D0%BD_%22%D0%A1%D0%BE%D0%B2%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D0%B9%22&amp;diff=7963"/>
		<updated>2015-09-30T12:38:02Z</updated>

		<summary type="html">&lt;p&gt;Alexei: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;lt;b&amp;gt;Первое знакомство&amp;lt;/b&amp;gt;&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если Вы решили использовать демо-дизайн &amp;quot;Современный&amp;quot;, то Вам предстоит познакомиться с устройством шаблонов. Эта статья должна Вам в этом немного помочь.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Все шаблоны xsl-шаблонизатора находятся в папке xsltTpls. По умолчанию, входной точкой во все шаблоны является default.xsl&lt;br /&gt;
Этот шаблон нужен только для того, чтобы пред-определить все наиболее часто встречающиеся значения и присвоить их переменным, а также подключить основные шаблоны.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Кроме шаблона default.xsl в папке xsltTpls находятся другие подпапки. В первую очередь стоит обратить внимание на папку &amp;quot;layouts&amp;quot;. В ней находится только один шаблон default.xsl. Это основной шаблон, который определяет общий внешний вид страницы. Именно в нём задаётся основная разметка и &amp;quot;вход&amp;quot; в шаблоны &amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:template match=&amp;quot;/&amp;quot; mode=&amp;quot;layout&amp;quot;&amp;gt;. &lt;br /&gt;
Сам шаблон можно условно поделить следующие части: шапка, дно, левое меню, правое меню и контент. Все поля, кроме контента, не меняют своего содержания, т.е. отвечают за вывод одних и тех же элементов оформления (будь то вывод последних новостей или меню).&lt;br /&gt;
Иначе дело обстоит с контентом.&amp;lt;br&amp;gt;&lt;br /&gt;
В xslt-шаблонизаторе для всех страниц определён метод и модуль, т.е. способ их формирования. Можно посмотреть как выглядит страница в виде xml-документа, если после адреса страницы дописать .xml (к примеру так www.ваш_сайт.ru/любая_страница/.xml). В первой строке буде узел result и у него два атрибута module и method.&amp;lt;br&amp;gt;&lt;br /&gt;
Если Вы открываете страницу контента, то шаблонизатор вернёт заголовок result:&amp;lt;br&amp;gt;&lt;br /&gt;
 module=&amp;quot;content&amp;quot; method=&amp;quot;content&amp;quot;&lt;br /&gt;
если открывать страницу с объектом каталога то заголовок result уже будет таким:&amp;lt;br&amp;gt;&lt;br /&gt;
 module=&amp;quot;catalog&amp;quot; method=&amp;quot;object&amp;quot; &lt;br /&gt;
и т.д. Для всех типов страниц предусмотрены свои заголовки, по названию модуля и метода, которые отвечают за их выполнение. Если посмотреть в шаблон - в основном центральном блоке стоит обработчик, который ищет подходящий шаблон на основании этих заголовков:&amp;lt;br&amp;gt;&lt;br /&gt;
 &amp;lt;div class=&amp;quot;content&amp;quot;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:apply-templates select=&amp;quot;result&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;/div&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь вернёмся к организации шаблонов. Все шаблоны подключаются в главном файле через вызов вида:&amp;lt;br&amp;gt;&lt;br /&gt;
 modules/имя_модуля/common.xsl&lt;br /&gt;
Сам файл common.xsl не содержит какой-либо полезной информации, он просто подключает все шаблоны из этой же папки. Шаблоны, для удобства, называются также как макросы, за результат отработки которых они отвечают.&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Отдельно нужно ответить шаблоны:&amp;lt;br&amp;gt;&lt;br /&gt;
common.xsl в папке xsltTpls  здесь лежат те макросы, которые на языке tpl называются системными (system)&amp;lt;br&amp;gt;&lt;br /&gt;
папка library также содержит шаблоны, отвечающие за обработку системных макросов.&amp;lt;br&amp;gt;&lt;br /&gt;
sample.xsl в папке xsltTpls содержит пример самой простой страницы на xslt&amp;lt;br&amp;gt;&lt;br /&gt;
папка sys-tpls содержит шаблоны преобразования данных для служебных целей (печать заказов, карта google и другие)&amp;lt;br&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Для знакомства с xslt-шаблонизатором имеет смысл ознакомиться с учебным пособием, которое можно скачать здесь: &lt;br /&gt;
 http://www.umi-cms.ru/support/docs/xslt-umi-devbook/&lt;br /&gt;
[[Категория:Верстка в XSLT|Современный]]&lt;/div&gt;</summary>
		<author><name>Alexei</name></author>
		
	</entry>
</feed>