<?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=Vitaliks</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=Vitaliks"/>
	<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/Vitaliks"/>
	<updated>2026-06-04T07:20:27Z</updated>
	<subtitle>Вклад участника</subtitle>
	<generator>MediaWiki 1.31.0</generator>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%B5%D0%B1%D0%B0%D0%B6%D0%B8%D1%82%D1%8C_PHP&amp;diff=9413</id>
		<title>Как дебажить PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%B5%D0%B1%D0%B0%D0%B6%D0%B8%D1%82%D1%8C_PHP&amp;diff=9413"/>
		<updated>2020-10-02T13:42:58Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Отладка ошибки 500 при помощи register_shutdown_function===&lt;br /&gt;
&lt;br /&gt;
Иногда причину 500 ошибки можно определить при помощи вывода последней ошибки, которая произошла перед завершением скрипта. Для ее вывода в начало выполняемого PHP файла необходимо добавить следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
register_shutdown_function(function(){&lt;br /&gt;
	if (error_get_last()) {&lt;br /&gt;
		var_export(error_get_last());&lt;br /&gt;
	}&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данный код регистрирует функцию, которая будет выполняться по завершении скрипта. В функции происходит вывод последней ошибки, которая была зафиксирована при выполнении скрипта.&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.register-shutdown-function.php Документация по register_shutdown_function]&lt;br /&gt;
&lt;br /&gt;
===Вывод данных отладки в браузере===&lt;br /&gt;
Наиболее простой способ вывести любую переменную это функции &amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;var_dump()&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039; - выводит структуру переменной в удобочитаемом виде&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.print-r.php Документация по print_r]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;var_dump()&amp;#039;&amp;#039;&amp;#039; - также выводит тип данных для всех переменных&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.var-dump.php Документация по var_dump]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039; - выводит структуру переменно в формате пригодным для выполнения в PHP&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.var-export.php Документация var_export]&lt;br /&gt;
&lt;br /&gt;
По умолчанию выводы этих функций используют &amp;#039;\n&amp;#039; в качестве переносов на новую строку.&lt;br /&gt;
&lt;br /&gt;
Так как в браузере эти символы удаляются, то для того, чтобы результат было удобно читать, можно поместить его в тег &amp;amp;lt;pre&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;&lt;br /&gt;
print_r($var);&lt;br /&gt;
echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; . print_r($var, true) . &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В качестве второго аргумента для функций &amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039; можно указать true, если необходимо, чтобы функция возвращала результат, а не выводила его.&lt;br /&gt;
&lt;br /&gt;
Код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;&lt;br /&gt;
print_r($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
var_dump($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
var_export($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
Array&lt;br /&gt;
(&lt;br /&gt;
    [id] =&amp;gt; 3&lt;br /&gt;
    [type] =&amp;gt; guest&lt;br /&gt;
)&lt;br /&gt;
array(2) {&lt;br /&gt;
  [&amp;quot;id&amp;quot;]=&amp;gt;&lt;br /&gt;
  int(3)&lt;br /&gt;
  [&amp;quot;type&amp;quot;]=&amp;gt;&lt;br /&gt;
  string(5) &amp;quot;guest&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
array (&lt;br /&gt;
  &amp;#039;id&amp;#039; =&amp;gt; 3,&lt;br /&gt;
  &amp;#039;type&amp;#039; =&amp;gt; &amp;#039;guest&amp;#039;,&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Иногда необходимо вывести все доступные в текущей области видимости переменные, в этом случае можно воспользоваться функцией get_defined_vars&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.get-defined-vars.php Документация по get_defined_vars]&lt;br /&gt;
&lt;br /&gt;
===Вывод данных отладки в файл===&lt;br /&gt;
&lt;br /&gt;
Иногда вывести переменные в браузер нет возможности: важно не нарушать работу сайта, либо скрипт выполняет редирект на другую станицу, а также по другим причинам.&lt;br /&gt;
&lt;br /&gt;
Для записи данных отладки в файл нам поможет функция file_put_contents, можно использовать ее со следующими аргументами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $variable], true).PHP_EOL, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате выполнения данной функции рядом с файлом, из которого было запущено выполнение PHP (обычно это index.php в корне сайта), будет создан файл umitest в который запишется имя файла, строка в нем и содержимое переменной $variable.&lt;br /&gt;
&lt;br /&gt;
__FILE__ - это волшебная константа PHP которая всегда содержит имя текущего файла.&lt;br /&gt;
&lt;br /&gt;
__LINE__ - это волшебная константа PHP которая всегда содержит номер строки в файле в котором она была вызвана.&lt;br /&gt;
&lt;br /&gt;
Эти константы рекомендуется добавлять в вывод по нескольким причинам:&lt;br /&gt;
&lt;br /&gt;
1) Удобство отслеживания из какого файла и строки в нем была сделана запись&lt;br /&gt;
&lt;br /&gt;
2) При отладке большого количества файлов можно забыть куда именно был добавлен отладочный код, эта информация поможет быстро найти его.&lt;br /&gt;
&lt;br /&gt;
FILE_APPEND - сообщает о том, что данные необходимо записывать в конец файла, без него файл будет каждый раз перезаписываться.&lt;br /&gt;
&lt;br /&gt;
LOCK_EX - блокирует файл для записи, чтобы в него не смогли писать другие скрипты.&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, get_defined_vars()], true).PHP_EOL, FILE_APPEND | LOCK_EX);&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $var1, $var2], true).PHP_EOL, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.file-put-contents.php Документация по file_put_contents]&lt;br /&gt;
&lt;br /&gt;
===Получить стек вызова функции при помощи debug_backtrace===&lt;br /&gt;
&lt;br /&gt;
Данная функция может помочь нам, если мы знаем, какая функция вызывается, но не знаем, откуда она вызывается, а также просто проследить цепочку вызова функций.&lt;br /&gt;
При вызове этой функции без параметров можно легко получить переполнение памяти, поэтому необходимо вызвать эту функцию с указанием первого аргумента DEBUG_BACKTRACE_IGNORE_ARGS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$debug_arr = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&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;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; . print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), true) . &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.debug-backtrace.php Документация по debug_backtrace]&lt;br /&gt;
&lt;br /&gt;
===Получить расположение используемого класса, метода или функции===&lt;br /&gt;
&lt;br /&gt;
Стек вызовов дает информацию откуда была вызвана функция, но иногда необходимо узнать где находится используемый в коде класс, метод или функция. Для решения этой задачи в PHP есть специальные классы ReflectionFunction, ReflectionClass и ReflectionMethod, методы которых дают возможность получить всю необходимую для этого информацию.&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;
$reflectionMethod = new ReflectionFunction(&amp;#039;function_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится функция &amp;#039;function_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionfunction.php Документация по ReflectionFunction]&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;
$reflectionClass = new ReflectionClass(&amp;#039;class_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionClass-&amp;gt;getFileName(), $reflectionClass-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится класс &amp;#039;class_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionclass.php Документация по ReflectionClass]&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;
$reflectionMethod = new ReflectionMethod(&amp;#039;class_name&amp;#039;, &amp;#039;method_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится метод &amp;#039;method_name&amp;#039; класса &amp;#039;class_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Первым аргументом при создании ReflectionMethod можно передавать не только имя класса, но и его экземпляр, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
namespace DebugNamespace;&lt;br /&gt;
&lt;br /&gt;
$className = new class_name();&lt;br /&gt;
$reflectionMethod = new \ReflectionMethod($className, &amp;#039;method_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что в данном случае в файле задан namespace &amp;#039;DebugNamespace&amp;#039;, поэтому при получении экземпляра класса \ReflectionMethod необходимо наличие косой черты в начале иначе произойдет ошибка: &lt;br /&gt;
Ошибка (Error): Class &amp;#039;DebugNamespace\ReflectionMethod&amp;#039; not found&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionmethod.php Документация по ReflectionMethod]&lt;br /&gt;
&lt;br /&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;
$start = microtime(true);&lt;br /&gt;
// тут код время выполнения которого необходимо посчитать&lt;br /&gt;
$stop = microtime(true) - $start;&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $stop], true).PHP_EOL, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.microtime.php Документация по microtime]&lt;br /&gt;
&lt;br /&gt;
[[category:Решение проблем и ошибок]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%B5%D0%B1%D0%B0%D0%B6%D0%B8%D1%82%D1%8C_PHP&amp;diff=9393</id>
		<title>Как дебажить PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%B5%D0%B1%D0%B0%D0%B6%D0%B8%D1%82%D1%8C_PHP&amp;diff=9393"/>
		<updated>2020-01-21T14:04:09Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Отладка ошибки 500 при помощи register_shutdown_function===&lt;br /&gt;
&lt;br /&gt;
Иногда причину 500 ошибки можно определить при помощи вывода последней ошибки, которая произошла перед завершением скрипта. Для ее вывода в начало выполняемого PHP файла необходимо добавить следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
register_shutdown_function(function(){&lt;br /&gt;
	if (error_get_last()) {&lt;br /&gt;
		var_export(error_get_last());&lt;br /&gt;
	}&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данный код регистрирует функцию, которая будет выполняться по завершении скрипта. В функции происходит вывод последней ошибки, которая была зафиксирована при выполнении скрипта.&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.register-shutdown-function.php Документация по register_shutdown_function]&lt;br /&gt;
&lt;br /&gt;
===Вывод данных отладки в браузере===&lt;br /&gt;
Наиболее простой способ вывести любую переменную это функции &amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;var_dump()&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039; - выводит структуру переменной в удобочитаемом виде&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.print-r.php Документация по print_r]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;var_dump()&amp;#039;&amp;#039;&amp;#039; - также выводит тип данных для всех переменных&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.var-dump.php Документация по var_dump]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039; - выводит структуру переменно в формате пригодным для выполнения в PHP&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.var-export.php Документация var_export]&lt;br /&gt;
&lt;br /&gt;
По умолчанию выводы этих функций используют &amp;#039;\n&amp;#039; в качестве переносов на новую строку.&lt;br /&gt;
&lt;br /&gt;
Так как в браузере эти символы удаляются, то для того, чтобы результат было удобно читать, можно поместить его в тег &amp;amp;lt;pre&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;&lt;br /&gt;
print_r($var);&lt;br /&gt;
echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; . print_r($var, true) . &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В качестве второго аргумента для функций &amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039; можно указать true, если необходимо, чтобы функция возвращала результат, а не выводила его.&lt;br /&gt;
&lt;br /&gt;
Код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;&lt;br /&gt;
print_r($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
var_dump($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
var_export($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
Array&lt;br /&gt;
(&lt;br /&gt;
    [id] =&amp;gt; 3&lt;br /&gt;
    [type] =&amp;gt; guest&lt;br /&gt;
)&lt;br /&gt;
array(2) {&lt;br /&gt;
  [&amp;quot;id&amp;quot;]=&amp;gt;&lt;br /&gt;
  int(3)&lt;br /&gt;
  [&amp;quot;type&amp;quot;]=&amp;gt;&lt;br /&gt;
  string(5) &amp;quot;guest&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
array (&lt;br /&gt;
  &amp;#039;id&amp;#039; =&amp;gt; 3,&lt;br /&gt;
  &amp;#039;type&amp;#039; =&amp;gt; &amp;#039;guest&amp;#039;,&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Иногда необходимо вывести все доступные в текущей области видимости переменные, в этом случае можно воспользоваться функцией get_defined_vars&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.get-defined-vars.php Документация по get_defined_vars]&lt;br /&gt;
&lt;br /&gt;
===Вывод данных отладки в файл===&lt;br /&gt;
&lt;br /&gt;
Иногда вывести переменные в браузер нет возможности: важно не нарушать работу сайта, либо скрипт выполняет редирект на другую станицу, а также по другим причинам.&lt;br /&gt;
&lt;br /&gt;
Для записи данных отладки в файл нам поможет функция file_put_contents, можно использовать ее со следующими аргументами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $variable], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате выполнения данной функции рядом с файлом, из которого было запущено выполнение PHP (обычно это index.php в корне сайта), будет создан файл umitest в который запишется имя файла, строка в нем и содержимое переменной $variable.&lt;br /&gt;
&lt;br /&gt;
__FILE__ - это волшебная константа PHP которая всегда содержит имя текущего файла.&lt;br /&gt;
&lt;br /&gt;
__LINE__ - это волшебная константа PHP которая всегда содержит номер строки в файле в котором она была вызвана.&lt;br /&gt;
&lt;br /&gt;
Эти константы рекомендуется добавлять в вывод по нескольким причинам:&lt;br /&gt;
&lt;br /&gt;
1) Удобство отслеживания из какого файла и строки в нем была сделана запись&lt;br /&gt;
&lt;br /&gt;
2) При отладке большого количества файлов можно забыть куда именно был добавлен отладочный код, эта информация поможет быстро найти его.&lt;br /&gt;
&lt;br /&gt;
FILE_APPEND - сообщает о том, что данные необходимо записывать в конец файла, без него файл будет каждый раз перезаписываться.&lt;br /&gt;
&lt;br /&gt;
LOCK_EX - блокирует файл для записи, чтобы в него не смогли писать другие скрипты.&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, get_defined_vars()], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $var1, $var2], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.file-put-contents.php Документация по file_put_contents]&lt;br /&gt;
&lt;br /&gt;
===Получить стек вызова функции при помощи debug_backtrace===&lt;br /&gt;
&lt;br /&gt;
Данная функция может помочь нам, если мы знаем, какая функция вызывается, но не знаем, откуда она вызывается, а также просто проследить цепочку вызова функций.&lt;br /&gt;
При вызове этой функции без параметров можно легко получить переполнение памяти, поэтому необходимо вызвать эту функцию с указанием первого аргумента DEBUG_BACKTRACE_IGNORE_ARGS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$debug_arr = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&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;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; . print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), true) . &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.debug-backtrace.php Документация по debug_backtrace]&lt;br /&gt;
&lt;br /&gt;
===Получить расположение используемого класса, метода или функции===&lt;br /&gt;
&lt;br /&gt;
Стек вызовов дает информацию откуда была вызвана функция, но иногда необходимо узнать где находится используемый в коде класс, метод или функция. Для решения этой задачи в PHP есть специальные классы ReflectionFunction, ReflectionClass и ReflectionMethod, методы которых дают возможность получить всю необходимую для этого информацию.&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;
$reflectionMethod = new ReflectionFunction(&amp;#039;function_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится функция &amp;#039;function_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionfunction.php Документация по ReflectionFunction]&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;
$reflectionClass = new ReflectionClass(&amp;#039;class_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionClass-&amp;gt;getFileName(), $reflectionClass-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится класс &amp;#039;class_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionclass.php Документация по ReflectionClass]&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;
$reflectionMethod = new ReflectionMethod(&amp;#039;class_name&amp;#039;, &amp;#039;method_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится метод &amp;#039;method_name&amp;#039; класса &amp;#039;class_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Первым аргументом при создании ReflectionMethod можно передавать не только имя класса, но и его экземпляр, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
namespace DebugNamespace;&lt;br /&gt;
&lt;br /&gt;
$className = new class_name();&lt;br /&gt;
$reflectionMethod = new \ReflectionMethod($className, &amp;#039;method_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что в данном случае в файле задан namespace &amp;#039;DebugNamespace&amp;#039;, поэтому при получении экземпляра класса \ReflectionMethod необходимо наличие косой черты в начале иначе произойдет ошибка: &lt;br /&gt;
Ошибка (Error): Class &amp;#039;DebugNamespace\ReflectionMethod&amp;#039; not found&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionmethod.php Документация по ReflectionMethod]&lt;br /&gt;
&lt;br /&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;
$start = microtime(true);&lt;br /&gt;
// тут код время выполнения которого необходимо посчитать&lt;br /&gt;
$stop = microtime(true) - $start;&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $stop], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.microtime.php Документация по microtime]&lt;br /&gt;
&lt;br /&gt;
[[category:Решение проблем и ошибок]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%B5%D0%B1%D0%B0%D0%B6%D0%B8%D1%82%D1%8C_PHP&amp;diff=9392</id>
		<title>Как дебажить PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%B5%D0%B1%D0%B0%D0%B6%D0%B8%D1%82%D1%8C_PHP&amp;diff=9392"/>
		<updated>2020-01-21T14:03:03Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Добавлен раздел получения информации об используемом классе, методе или функции&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Отладка ошибки 500 при помощи register_shutdown_function===&lt;br /&gt;
&lt;br /&gt;
Иногда причину 500 ошибки можно определить при помощи вывода последней ошибки, которая произошла перед завершением скрипта. Для ее вывода в начало выполняемого PHP файла необходимо добавить следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
register_shutdown_function(function(){&lt;br /&gt;
	if (error_get_last()) {&lt;br /&gt;
		var_export(error_get_last());&lt;br /&gt;
	}&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данный код регистрирует функцию, которая будет выполняться по завершении скрипта. В функции происходит вывод последней ошибки, которая была зафиксирована при выполнении скрипта.&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.register-shutdown-function.php Документация по register_shutdown_function]&lt;br /&gt;
&lt;br /&gt;
===Вывод данных отладки в браузере===&lt;br /&gt;
Наиболее простой способ вывести любую переменную это функции &amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;var_dump()&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039; - выводит структуру переменной в удобочитаемом виде&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.print-r.php Документация по print_r]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;var_dump()&amp;#039;&amp;#039;&amp;#039; - также выводит тип данных для всех переменных&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.var-dump.php Документация по var_dump]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039; - выводит структуру переменно в формате пригодным для выполнения в PHP&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.var-export.php Документация var_export]&lt;br /&gt;
&lt;br /&gt;
По умолчанию выводы этих функций используют &amp;#039;\n&amp;#039; в качестве переносов на новую строку.&lt;br /&gt;
&lt;br /&gt;
Так как в браузере эти символы удаляются, то для того, чтобы результат было удобно читать, можно поместить его в тег &amp;amp;lt;pre&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;&lt;br /&gt;
print_r($var);&lt;br /&gt;
echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; . print_r($var, true) . &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В качестве второго аргумента для функций &amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039; можно указать true, если необходимо, чтобы функция возвращала результат, а не выводила его.&lt;br /&gt;
&lt;br /&gt;
Код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;&lt;br /&gt;
print_r($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
var_dump($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
var_export($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
Array&lt;br /&gt;
(&lt;br /&gt;
    [id] =&amp;gt; 3&lt;br /&gt;
    [type] =&amp;gt; guest&lt;br /&gt;
)&lt;br /&gt;
array(2) {&lt;br /&gt;
  [&amp;quot;id&amp;quot;]=&amp;gt;&lt;br /&gt;
  int(3)&lt;br /&gt;
  [&amp;quot;type&amp;quot;]=&amp;gt;&lt;br /&gt;
  string(5) &amp;quot;guest&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
array (&lt;br /&gt;
  &amp;#039;id&amp;#039; =&amp;gt; 3,&lt;br /&gt;
  &amp;#039;type&amp;#039; =&amp;gt; &amp;#039;guest&amp;#039;,&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Иногда необходимо вывести все доступные в текущей области видимости переменные, в этом случае можно воспользоваться функцией get_defined_vars&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.get-defined-vars.php Документация по get_defined_vars]&lt;br /&gt;
&lt;br /&gt;
===Вывод данных отладки в файл===&lt;br /&gt;
&lt;br /&gt;
Иногда вывести переменные в браузер нет возможности: важно не нарушать работу сайта, либо скрипт выполняет редирект на другую станицу, а также по другим причинам.&lt;br /&gt;
&lt;br /&gt;
Для записи данных отладки в файл нам поможет функция file_put_contents, можно использовать ее со следующими аргументами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $variable], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате выполнения данной функции рядом с файлом, из которого было запущено выполнение PHP (обычно это index.php в корне сайта), будет создан файл umitest в который запишется имя файла, строка в нем и содержимое переменной $variable.&lt;br /&gt;
&lt;br /&gt;
__FILE__ - это волшебная константа PHP которая всегда содержит имя текущего файла.&lt;br /&gt;
&lt;br /&gt;
__LINE__ - это волшебная константа PHP которая всегда содержит номер строки в файле в котором она была вызвана.&lt;br /&gt;
&lt;br /&gt;
Эти константы рекомендуется добавлять в вывод по нескольким причинам:&lt;br /&gt;
&lt;br /&gt;
1) Удобство отслеживания из какого файла и строки в нем была сделана запись&lt;br /&gt;
&lt;br /&gt;
2) При отладке большого количества файлов можно забыть куда именно был добавлен отладочный код, эта информация поможет быстро найти его.&lt;br /&gt;
&lt;br /&gt;
FILE_APPEND - сообщает о том, что данные необходимо записывать в конец файла, без него файл будет каждый раз перезаписываться.&lt;br /&gt;
&lt;br /&gt;
LOCK_EX - блокирует файл для записи, чтобы в него не смогли писать другие скрипты.&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, get_defined_vars()], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $var1, $var2], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.file-put-contents.php Документация по file_put_contents]&lt;br /&gt;
&lt;br /&gt;
===Получить стек вызова функции при помощи debug_backtrace===&lt;br /&gt;
&lt;br /&gt;
Данная функция может помочь нам, если мы знаем, какая функция вызывается, но не знаем, откуда она вызывается, а также просто проследить цепочку вызова функций.&lt;br /&gt;
При вызове этой функции без параметров можно легко получить переполнение памяти, поэтому необходимо вызвать эту функцию с указанием первого аргумента DEBUG_BACKTRACE_IGNORE_ARGS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$debug_arr = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&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;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; . print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), true) . &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.debug-backtrace.php Документация по debug_backtrace]&lt;br /&gt;
&lt;br /&gt;
===Получить расположение используемого класса, метода или функции===&lt;br /&gt;
&lt;br /&gt;
Стек вызовов дает информацию откуда была вызвана функция, но иногда необходимо узнать где находится используемый в коде класс, метод или функция. Для решения этой задачи в PHP есть специальные классы ReflectionMethod, методы которого дают возможность получить всю необходимую для этого информацию.&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;
$reflectionMethod = new ReflectionFunction(&amp;#039;function_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится функция &amp;#039;function_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionfunction.php Документация по ReflectionFunction]&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;
$reflectionClass = new ReflectionClass(&amp;#039;class_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionClass-&amp;gt;getFileName(), $reflectionClass-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится класс &amp;#039;class_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionclass.php Документация по ReflectionClass]&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;
$reflectionMethod = new ReflectionMethod(&amp;#039;class_name&amp;#039;, &amp;#039;method_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Этот код запишет в файл umitest путь до файла и номер строки в нем в которой находится метод &amp;#039;method_name&amp;#039; класса &amp;#039;class_name&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Первым аргументом при создании ReflectionMethod можно передавать не только имя класса, но и его экземпляр, например:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
namespace DebugNamespace;&lt;br /&gt;
&lt;br /&gt;
$className = new class_name();&lt;br /&gt;
$reflectionMethod = new \ReflectionMethod($className, &amp;#039;method_name&amp;#039;);&lt;br /&gt;
file_put_contents(&amp;quot;umicheck&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $reflectionMethod-&amp;gt;getFileName(), $reflectionMethod-&amp;gt;getStartLine()], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Обратите внимание, что в данном случае в файле задан namespace &amp;#039;DebugNamespace&amp;#039;, поэтому при получении экземпляра класса \ReflectionMethod необходимо наличие косой черты в начале иначе произойдет ошибка: &lt;br /&gt;
Ошибка (Error): Class &amp;#039;DebugNamespace\ReflectionMethod&amp;#039; not found&lt;br /&gt;
&lt;br /&gt;
[https://www.php.net/manual/ru/class.reflectionmethod.php Документация по ReflectionMethod]&lt;br /&gt;
&lt;br /&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;
$start = microtime(true);&lt;br /&gt;
// тут код время выполнения которого необходимо посчитать&lt;br /&gt;
$stop = microtime(true) - $start;&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $stop], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.microtime.php Документация по microtime]&lt;br /&gt;
&lt;br /&gt;
[[category:Решение проблем и ошибок]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%B5%D0%B1%D0%B0%D0%B6%D0%B8%D1%82%D1%8C_PHP&amp;diff=9390</id>
		<title>Как дебажить PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%B5%D0%B1%D0%B0%D0%B6%D0%B8%D1%82%D1%8C_PHP&amp;diff=9390"/>
		<updated>2020-01-15T14:32:44Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;===Отладка ошибки 500 при помощи register_shutdown_function===&lt;br /&gt;
&lt;br /&gt;
Иногда причину 500 ошибки можно определить при помощи вывода последней ошибки, которая произошла перед завершением скрипта. Для ее вывода в начало выполняемого PHP файла необходимо добавить следующий код:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
register_shutdown_function(function(){&lt;br /&gt;
	if (error_get_last()) {&lt;br /&gt;
		var_export(error_get_last());&lt;br /&gt;
	}&lt;br /&gt;
});&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Данный код регистрирует функцию, которая будет выполняться по завершении скрипта. В функции происходит вывод последней ошибки, которая была зафиксирована при выполнении скрипта.&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.register-shutdown-function.php Документация по register_shutdown_function]&lt;br /&gt;
&lt;br /&gt;
===Вывод данных отладки в браузере===&lt;br /&gt;
Наиболее простой способ вывести любую переменную это функции &amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039;, &amp;#039;&amp;#039;&amp;#039;var_dump()&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039; - выводит структуру переменной в удобочитаемом виде&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.print-r.php Документация по print_r]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;var_dump()&amp;#039;&amp;#039;&amp;#039; - также выводит тип данных для всех переменных&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.var-dump.php Документация по var_dump]&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039; - выводит структуру переменно в формате пригодным для выполнения в PHP&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.var-export.php Документация var_export]&lt;br /&gt;
&lt;br /&gt;
По умолчанию выводы этих функций используют &amp;#039;\n&amp;#039; в качестве переносов на новую строку.&lt;br /&gt;
&lt;br /&gt;
Так как в браузере эти символы удаляются, то для того, чтобы результат было удобно читать, можно поместить его в тег &amp;amp;lt;pre&amp;amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;&lt;br /&gt;
print_r($var);&lt;br /&gt;
echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; . print_r($var, true) . &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
В качестве второго аргумента для функций &amp;#039;&amp;#039;&amp;#039;print_r()&amp;#039;&amp;#039;&amp;#039; и &amp;#039;&amp;#039;&amp;#039;var_export()&amp;#039;&amp;#039;&amp;#039; можно указать true, если необходимо, чтобы функция возвращала результат, а не выводила его.&lt;br /&gt;
&lt;br /&gt;
Код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039;;&lt;br /&gt;
print_r($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
var_dump($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
var_export($variables[&amp;#039;user&amp;#039;]);&lt;br /&gt;
echo &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
Array&lt;br /&gt;
(&lt;br /&gt;
    [id] =&amp;gt; 3&lt;br /&gt;
    [type] =&amp;gt; guest&lt;br /&gt;
)&lt;br /&gt;
array(2) {&lt;br /&gt;
  [&amp;quot;id&amp;quot;]=&amp;gt;&lt;br /&gt;
  int(3)&lt;br /&gt;
  [&amp;quot;type&amp;quot;]=&amp;gt;&lt;br /&gt;
  string(5) &amp;quot;guest&amp;quot;&lt;br /&gt;
}&lt;br /&gt;
array (&lt;br /&gt;
  &amp;#039;id&amp;#039; =&amp;gt; 3,&lt;br /&gt;
  &amp;#039;type&amp;#039; =&amp;gt; &amp;#039;guest&amp;#039;,&lt;br /&gt;
)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Иногда необходимо вывести все доступные в текущей области видимости переменные, в этом случае можно воспользоваться функцией get_defined_vars&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.get-defined-vars.php Документация по get_defined_vars]&lt;br /&gt;
&lt;br /&gt;
===Вывод данных отладки в файл===&lt;br /&gt;
&lt;br /&gt;
Иногда вывести переменные в браузер нет возможности: важно не нарушать работу сайта, либо скрипт выполняет редирект на другую станицу, а также по другим причинам.&lt;br /&gt;
&lt;br /&gt;
Для записи данных отладки в файл нам поможет функция file_put_contents, можно использовать ее со следующими аргументами:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $variable], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В результате выполнения данной функции рядом с файлом, из которого было запущено выполнение PHP (обычно это index.php в корне сайта), будет создан файл umitest в который запишется имя файла, строка в нем и содержимое переменной $variable.&lt;br /&gt;
&lt;br /&gt;
__FILE__ - это волшебная константа PHP которая всегда содержит имя текущего файла.&lt;br /&gt;
&lt;br /&gt;
__LINE__ - это волшебная константа PHP которая всегда содержит номер строки в файле в котором она была вызвана.&lt;br /&gt;
&lt;br /&gt;
Эти константы рекомендуется добавлять в вывод по нескольким причинам:&lt;br /&gt;
&lt;br /&gt;
1) Удобство отслеживания из какого файла и строки в нем была сделана запись&lt;br /&gt;
&lt;br /&gt;
2) При отладке большого количества файлов можно забыть куда именно был добавлен отладочный код, эта информация поможет быстро найти его.&lt;br /&gt;
&lt;br /&gt;
FILE_APPEND - сообщает о том, что данные необходимо записывать в конец файла, без него файл будет каждый раз перезаписываться.&lt;br /&gt;
&lt;br /&gt;
LOCK_EX - блокирует файл для записи, чтобы в него не смогли писать другие скрипты.&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, get_defined_vars()], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $var1, $var2], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.file-put-contents.php Документация по file_put_contents]&lt;br /&gt;
&lt;br /&gt;
===Получить стек вызова функции при помощи debug_backtrace===&lt;br /&gt;
&lt;br /&gt;
Данная функция может помочь нам, если мы знаем, какая функция вызывается, но не знаем, откуда она вызывается, а также просто проследить цепочку вызова функций.&lt;br /&gt;
При вызове этой функции без параметров можно легко получить переполнение памяти, поэтому необходимо вызвать эту функцию с указанием первого аргумента DEBUG_BACKTRACE_IGNORE_ARGS&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$debug_arr = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&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;
echo &amp;#039;&amp;lt;pre&amp;gt;&amp;#039; . print_r(debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS), true) . &amp;#039;&amp;lt;/pre&amp;gt;&amp;#039;;&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;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS)], true), FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.debug-backtrace.php Документация по debug_backtrace]&lt;br /&gt;
&lt;br /&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;
$start = microtime(true);&lt;br /&gt;
// тут код время выполнения которого необходимо посчитать&lt;br /&gt;
$stop = microtime(true) - $start;&lt;br /&gt;
file_put_contents(&amp;quot;umitest&amp;quot;, print_r([__FILE__.&amp;#039; &amp;#039;.__LINE__, $stop], true).&amp;quot;\n&amp;quot;, FILE_APPEND | LOCK_EX);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[http://php.net/manual/ru/function.microtime.php Документация по microtime]&lt;br /&gt;
&lt;br /&gt;
[[category:Решение проблем и ошибок]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%B7_%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D0%B8_(%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8)&amp;diff=9389</id>
		<title>Установка из консоли (командной строки)</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8%D0%B7_%D0%BA%D0%BE%D0%BD%D1%81%D0%BE%D0%BB%D0%B8_(%D0%BA%D0%BE%D0%BC%D0%B0%D0%BD%D0%B4%D0%BD%D0%BE%D0%B9_%D1%81%D1%82%D1%80%D0%BE%D0%BA%D0%B8)&amp;diff=9389"/>
		<updated>2020-01-09T07:22:05Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Актуализация статьи&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Для установки потребуется:&lt;br /&gt;
&lt;br /&gt;
0) Соответствие сервера системным требованиям UMI.CMS:&lt;br /&gt;
&lt;br /&gt;
Ознакомиться с ними можно по ссылке:&lt;br /&gt;
http://www.umi-cms.ru/support/umi_cms_system_requirements/&lt;br /&gt;
&lt;br /&gt;
Консольный инсталлятор проверяет соответствие системным требованиям при установке. Если вы используете отдельно консольный php и отдельно модуль apache - обратите внимание, что требования должны соблюдаться для обоих из них (иногда они используют разные конфигурационные файлы).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
1) Консольный инсталлятор:&lt;br /&gt;
&lt;br /&gt;
Скачать его можно по ссылке:&lt;br /&gt;
[[Файл:Installer.zip]]&lt;br /&gt;
&lt;br /&gt;
Файл installer.php должен быть помещён в корневую директорию сайта, на который производится установка UMI.CMS. Рекомендуется, чтобы эта директория была пустой. Необходимо чтобы она имела права на чтение и запись из php (если затрудняетесь выбрать - ставьте 777).&lt;br /&gt;
&lt;br /&gt;
Права на сам файл installer.php должны быть такими, чтобы php мог его переписать.&lt;br /&gt;
&lt;br /&gt;
Инсталлятор обращается к внешним ресурсам для скачивания необходимых файлов и проверки аутентификационных данных. На хостинге для консольного php должны быть разрешены исходящие соединения.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
2) Файл install.ini с настройками для установки конкретного сайта:&lt;br /&gt;
&lt;br /&gt;
Скачать пример этого файла можно по ссылке:&lt;br /&gt;
http://www.umi-cms.ru/install/files/hosters/install.ini&lt;br /&gt;
&lt;br /&gt;
Права на файл install.ini должны быть такими, чтобы php мог его переписать. Файл install.ini должен быть помещён в ту же директорию, где находится installer.php, до начала установки. После установки его рекомендуется удалять.&lt;br /&gt;
&lt;br /&gt;
В файле указаны доступы к базе данных. Перед началом установки она уже должна существовать. Рекомендуется, чтобы она была пустая.&lt;br /&gt;
&lt;br /&gt;
Если вы уже пользовались консольным установщиком UMI.CMS, то многие параметры менять не потребуется. Просто проверьте их корректность и правильный синтаксис. Подробная инструкция ниже.&lt;br /&gt;
&lt;br /&gt;
Файл должен быть сохранен в кодировке utf-8. Значения параметров, содержащие не латинские символы, а также спецсимволы необходимо брать в двойные кавычки &amp;quot;&amp;quot;; (например, пароль)&lt;br /&gt;
&lt;br /&gt;
Пример файла:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
;=======================================================&lt;br /&gt;
;= инструкции для инсталлятора umi.cms в режиме CLI&lt;br /&gt;
;= Обязательные секции и их опции отмечены *&lt;br /&gt;
;=======================================================&lt;br /&gt;
&lt;br /&gt;
; информация о PHP &lt;br /&gt;
[SERVER]&lt;br /&gt;
; phppath=&amp;quot;php7.3&amp;quot; ; необходимо указать если версия php в консоли по умолчанию &amp;lt; 7.0 (для проверки выполнить &amp;#039;php -v&amp;#039;).&lt;br /&gt;
; phpini=/etc/php5/cli/php.ini - больше не используется.&lt;br /&gt;
 &lt;br /&gt;
;Информация о лицензии *&lt;br /&gt;
;-------------------------------------------------------&lt;br /&gt;
;Информация о лицензии *&lt;br /&gt;
[LICENSE]&lt;br /&gt;
domain=example.com		; доменное имя *&lt;br /&gt;
ip=127.0.1.7			; ip - адрес *&lt;br /&gt;
key=*-*-*			; лицензионный ключ *&lt;br /&gt;
 &lt;br /&gt;
;Доступ к базе данных. *&lt;br /&gt;
;База данных должна быть создана&lt;br /&gt;
;-------------------------------------------------------&lt;br /&gt;
[DB]&lt;br /&gt;
host=localhost			; имя хоста *&lt;br /&gt;
user=root			; логин *&lt;br /&gt;
password=&amp;quot;;\pass;&amp;quot;		; пароль *&lt;br /&gt;
dbname=installer		; имя базы *&lt;br /&gt;
&lt;br /&gt;
;Информация о супервайзере *&lt;br /&gt;
;-------------------------------------------------------&lt;br /&gt;
[SUPERVISOR]&lt;br /&gt;
login=sv			; логин для входа в админку *&lt;br /&gt;
password=&amp;quot;1&amp;quot;			; пароль *&lt;br /&gt;
lname=Installer			; фамилия&lt;br /&gt;
fname=cli			; имя&lt;br /&gt;
mname=Vasilievich		; отчество&lt;br /&gt;
&lt;br /&gt;
[BRAND]&lt;br /&gt;
;Ссылка &amp;quot;Купить UMI.CMS&amp;quot;&lt;br /&gt;
buy-lbl=&amp;quot;Купить UMI.CMS&amp;quot;	; Текст ссылки&lt;br /&gt;
buy-link=&amp;quot;http://www.umi-cms.ru/purchase/how-to-buy/&amp;quot; ; Ru URL&lt;br /&gt;
en-buy-lbl=&amp;quot;Buy UMI.CMS&amp;quot;	; Link text&lt;br /&gt;
en-buy-link=&amp;quot;http://www.umi-cms.ru/purchase/how-to-buy/&amp;quot; ; En URL&lt;br /&gt;
&lt;br /&gt;
[BACKUP]&lt;br /&gt;
mode = &amp;quot;none&amp;quot; ; all или none&lt;br /&gt;
&lt;br /&gt;
[DEMOSITE]&lt;br /&gt;
name=&amp;quot;_blank&amp;quot;		; Имя предустановленного демо-сайта (demomarket,demodizzy,demohunt,demoold,demooldschool,_blank)&lt;br /&gt;
&lt;br /&gt;
[SETUP]&lt;br /&gt;
sleep=500		; Время простоя для снижения нагрузки на сервер. Указывается в миллисекундах. Одна миллисекунда - одна тясячная одной секунды (500 = полсекунды)&lt;br /&gt;
download_by=1024	; Размер запрашиваемого пакета с сервера обновлений. Указывается в килобайтах.&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;
[SETUP]&lt;br /&gt;
sleep=1 ; Пауза между запросами в миллисекундах, чем меньше - тем быстрее.&lt;br /&gt;
download_by=1024 ; Размер запрашиваемого пакета с сервера обновлений. Указывается в килобайтах, чем больше - тем быстрее.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
3) Выбор соответствующего демо-сайта для установки:&lt;br /&gt;
&lt;br /&gt;
Консольный установщик может устанавливать любой из демо-сайтов UMI.CMS, с учётом ограничений, описанных далее. Примеры этих сайтов можно увидеть по ссылке: http://demo.umi-cms.ru/ . Демо-сайт государственной организации (Gov) в настоящее время автоматически не устанавливается.&lt;br /&gt;
&lt;br /&gt;
Клиент вправе выбирать любой демо-сайт для любой редакции UMI.CMS. Однако следует учесть, что некоторые демосайты (например интернет-магазины) неразумно использовать для младших редакций, в которых нет соответствующих модулей (например модуля магазина). Но с другой стороны, если клиент докупил необходимые модули, то он сможет получить соответствующий демо-сайт (набор модулей определяется по лицензионному ключу). В силу этих причин установщик может выдать ошибку http://errors.umi-cms.ru/14022/ , если данный демосайт не подходит.&lt;br /&gt;
&lt;br /&gt;
Если хостер не предоставляет клиентам выбор демо-сайта (как в большинстве случаев, когда он предлагает только Commerce Trial), то рекомендуется использовать следующие:&lt;br /&gt;
&lt;br /&gt;
Для редакции Commerce Trial:&lt;br /&gt;
[DEMOSITE]&lt;br /&gt;
name=&amp;quot;demomarket&amp;quot;&lt;br /&gt;
&lt;br /&gt;
Либо сайт без шаблонов (не рекомендуется):&lt;br /&gt;
[DEMOSITE]&lt;br /&gt;
name=&amp;quot;_blank&amp;quot;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
4) Персональный гейт для выдачи лицензионных ключей UMI.CMS:&lt;br /&gt;
&lt;br /&gt;
Со стороны компании &amp;quot;Юмисофт&amp;quot; существует специальный гейт, выдающий лицензионные ключи необходимого типа (Commerce Trial). При регистрации хостера на гейте ему выдаётся уникальный идентификатор (ID), а также инструкции, куда отсылать запросы на получение лицензионных ключей.&lt;br /&gt;
&lt;br /&gt;
Если вы уже пользуетесь таким гейтом, то в 99% случаев вам не нужно ничего менять.&lt;br /&gt;
&lt;br /&gt;
Если вы НЕ регистрировались на этом гейте и НЕ получали свой уникальный ID, обратитесь на partner@umisoft.ru за ним. Полученный ID нужно будет использовать в запросе лицензионных ключей UMI.CMS (см. ниже).&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
5) Инструкция:&lt;br /&gt;
&lt;br /&gt;
* Загрузите файл installer.php в корень сервера (DOCUMENT_ROOT) &lt;br /&gt;
* Создайте файл install.ini в (DOCUMENT_ROOT), укажите в нем все необходимые данные. Кодировка файла utf-8&lt;br /&gt;
* Зайдите на сервер по ssh.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	ssh example.com -llogin&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Сделайте корневую директорию сервера (DOCUMENT_ROOT) текущей.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	cd /home/www/example.com/htdocs&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
* Запустите инсталлятор&lt;br /&gt;
&amp;lt;source lang=&amp;quot;bash&amp;quot;&amp;gt;&lt;br /&gt;
	php -f installer.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Если консольный инсталлятор потребляет слишком много ресурсов сервера (процессор, память и т.д.) - обратитесь к специальным настройкам install.ini, позволяющих умерить их потребление. &lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
6) Коды ошибок:&lt;br /&gt;
&lt;br /&gt;
Практически все коды доступны по ссылке вида http://errors.umi-cms.ru/15000/&lt;br /&gt;
где 15000 - числовой код ошибки.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
--------------------------------------------------------------------------------------------------------------------------------------------------&lt;br /&gt;
&lt;br /&gt;
Справочная информация:&lt;br /&gt;
&lt;br /&gt;
Описание гейта для выдачи ключей:&lt;br /&gt;
&lt;br /&gt;
Хостер должен получать очередной ключ на каждый очередной экземпляр системы, устанавливаемой клиенту. Для получения ключа нужно обращаться по URL:&lt;br /&gt;
&lt;br /&gt;
для редакции Commerce Trial:&lt;br /&gt;
http://updateserver.umihost.ru/udata/custom/generateLicenseGate/SFNUFTDJYFT/client@email.ru/FirstName/LastName/client.domain.ru/client.ip.address/trial&lt;br /&gt;
&lt;br /&gt;
SFNUFTDJYFT - пример уникального ID вашего хостинга (см. выше про выдачу ключа персонального гейта)&lt;br /&gt;
следующие параметры по порядку:&lt;br /&gt;
e-mail клиента&lt;br /&gt;
имя клиента&lt;br /&gt;
фамилия клиента&lt;br /&gt;
домен клиента&lt;br /&gt;
IP-адрес, на котором расположен сайт с этим доменом&lt;br /&gt;
&lt;br /&gt;
В результате выполнения этого запроса вы получаете XML-данные. Из них вам нужно извлечь значение параметра &amp;quot;domain-keycode&amp;quot; - это доменный ключ, который нужно записать в файл install.ini для инсталлятора UMI.CMS. После этого запустить инсталлятор.&lt;br /&gt;
[[Категория:Вопросы установки настройки и переноса]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%B7_%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8&amp;diff=9352</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_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%B7_%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8&amp;diff=9352"/>
		<updated>2019-10-31T10:48:34Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: /* Использование макроса в PHP */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Написание кастомных макросов]]&lt;br /&gt;
 [[category:Верстка в XSLT]]&lt;br /&gt;
 [[category:Верстка в TPL]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&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;getRandomImage&amp;quot;. Код макроса нужно поместить в файл &amp;quot;/classes/components/custom.php&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	public function getRandomImage($folder, $template = &amp;#039;default&amp;#039;) {&lt;br /&gt;
		if (!file_exists($folder)) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$exts = [&amp;#039;gif&amp;#039;, &amp;#039;jpg&amp;#039;, &amp;#039;jpeg&amp;#039;, &amp;#039;png&amp;#039;];&lt;br /&gt;
		$images = [];&lt;br /&gt;
		$dh = opendir($folder);&lt;br /&gt;
		while (($file = readdir($dh)) == true) {&lt;br /&gt;
			$fileExt = pathinfo($file, PATHINFO_EXTENSION);&lt;br /&gt;
			if (in_array($fileExt, $exts)) {&lt;br /&gt;
				$images[] = $file;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		closedir($dh);&lt;br /&gt;
		&lt;br /&gt;
		$fileName = null;&lt;br /&gt;
		$imagesCount = count($images);&lt;br /&gt;
		if ($imagesCount &amp;gt; 0) {&lt;br /&gt;
			$imageNumber = time() % $imagesCount;&lt;br /&gt;
			$fileName = $folder.$images[$imageNumber];&lt;br /&gt;
		}&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;
		list($image) = def_module::loadTemplates(&amp;#039;random/&amp;#039;.$template, &amp;#039;image&amp;#039;);&lt;br /&gt;
		&lt;br /&gt;
		$blockArr = [];&lt;br /&gt;
		$blockArr[&amp;#039;filename&amp;#039;] = $fileName;&lt;br /&gt;
		&lt;br /&gt;
		return def_module::parseTemplate($image, $blockArr);&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;
Если же Вы используете TPL, то необходимо создать файл &amp;quot;tpls/random/default.tpl&amp;quot; (это будет шаблон вывода по умолчанию, если не будет указан другой) со следующим содержанием:&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;image&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;img src=&amp;quot;%filename%&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&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;
=== Использование макроса в TPL ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%custom getRandomImage(&amp;#039;/images/&amp;#039;)%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование макроса в XSLT ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:apply-templates select=&amp;quot;document(&amp;#039;udata://custom/getRandomImage/(./images/cms)/&amp;#039;)/udata&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;udata[@module = &amp;#039;custom&amp;#039;][@method = &amp;#039;getRandomImage&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:variable name=&amp;quot;img&amp;quot; select=&amp;quot;filename&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;img src=&amp;quot;{$img}&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot; /&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;
=== Использование макроса в 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;
	$imageData = $this-&amp;gt;macros(&amp;#039;custom&amp;#039;, &amp;#039;getRandomImage&amp;#039;, [&amp;#039;./images/&amp;#039;]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;&amp;lt;?=$imageData[&amp;#039;filename&amp;#039;]?&amp;gt;&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%B7_%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8&amp;diff=9351</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_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%B7_%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8&amp;diff=9351"/>
		<updated>2019-10-31T10:48:01Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Написание кастомных макросов]]&lt;br /&gt;
 [[category:Верстка в XSLT]]&lt;br /&gt;
 [[category:Верстка в TPL]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&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;getRandomImage&amp;quot;. Код макроса нужно поместить в файл &amp;quot;/classes/components/custom.php&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	public function getRandomImage($folder, $template = &amp;#039;default&amp;#039;) {&lt;br /&gt;
		if (!file_exists($folder)) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$exts = [&amp;#039;gif&amp;#039;, &amp;#039;jpg&amp;#039;, &amp;#039;jpeg&amp;#039;, &amp;#039;png&amp;#039;];&lt;br /&gt;
		$images = [];&lt;br /&gt;
		$dh = opendir($folder);&lt;br /&gt;
		while (($file = readdir($dh)) == true) {&lt;br /&gt;
			$fileExt = pathinfo($file, PATHINFO_EXTENSION);&lt;br /&gt;
			if (in_array($fileExt, $exts)) {&lt;br /&gt;
				$images[] = $file;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		closedir($dh);&lt;br /&gt;
		&lt;br /&gt;
		$fileName = null;&lt;br /&gt;
		$imagesCount = count($images);&lt;br /&gt;
		if ($imagesCount &amp;gt; 0) {&lt;br /&gt;
			$imageNumber = time() % $imagesCount;&lt;br /&gt;
			$fileName = $folder.$images[$imageNumber];&lt;br /&gt;
		}&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;
		list($image) = def_module::loadTemplates(&amp;#039;random/&amp;#039;.$template, &amp;#039;image&amp;#039;);&lt;br /&gt;
		&lt;br /&gt;
		$blockArr = [];&lt;br /&gt;
		$blockArr[&amp;#039;filename&amp;#039;] = $fileName;&lt;br /&gt;
		&lt;br /&gt;
		return def_module::parseTemplate($image, $blockArr);&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;
Если же Вы используете TPL, то необходимо создать файл &amp;quot;tpls/random/default.tpl&amp;quot; (это будет шаблон вывода по умолчанию, если не будет указан другой) со следующим содержанием:&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;image&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;img src=&amp;quot;%filename%&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&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;
=== Использование макроса в TPL ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%custom getRandomImage(&amp;#039;/images/&amp;#039;)%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование макроса в XSLT ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:apply-templates select=&amp;quot;document(&amp;#039;udata://custom/getRandomImage/(./images/cms)/&amp;#039;)/udata&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;udata[@module = &amp;#039;custom&amp;#039;][@method = &amp;#039;getRandomImage&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:variable name=&amp;quot;img&amp;quot; select=&amp;quot;filename&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;img src=&amp;quot;{$img}&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot; /&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;
=== Использование макроса в 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;
	$imageData = $this-&amp;gt;macros(&amp;#039;custom&amp;#039;, &amp;#039;getRandomImage&amp;#039;, [&amp;#039;./images/&amp;#039;]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;{$imageData[&amp;#039;filename&amp;#039;]}&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%B7_%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8&amp;diff=9350</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_%D1%81%D0%BB%D1%83%D1%87%D0%B0%D0%B9%D0%BD%D0%BE%D0%B3%D0%BE_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F_%D0%B8%D0%B7_%D0%BF%D0%B0%D0%BF%D0%BA%D0%B8&amp;diff=9350"/>
		<updated>2019-10-31T10:46:41Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Написание кастомных макросов]]&lt;br /&gt;
 [[category:Верстка в XSLT]]&lt;br /&gt;
 [[category:Верстка в TPL]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&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;getRandomImage&amp;quot;. Код макроса нужно поместить в файл &amp;quot;/classes/modules/custom.php&amp;quot;.&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
	public function getRandomImage($folder, $template = &amp;#039;default&amp;#039;) {&lt;br /&gt;
		if (!file_exists($folder)) {&lt;br /&gt;
			return;&lt;br /&gt;
		}&lt;br /&gt;
&lt;br /&gt;
		$exts = [&amp;#039;gif&amp;#039;, &amp;#039;jpg&amp;#039;, &amp;#039;jpeg&amp;#039;, &amp;#039;png&amp;#039;];&lt;br /&gt;
		$images = [];&lt;br /&gt;
		$dh = opendir($folder);&lt;br /&gt;
		while (($file = readdir($dh)) == true) {&lt;br /&gt;
			$fileExt = pathinfo($file, PATHINFO_EXTENSION);&lt;br /&gt;
			if (in_array($fileExt, $exts)) {&lt;br /&gt;
				$images[] = $file;&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
		&lt;br /&gt;
		closedir($dh);&lt;br /&gt;
		&lt;br /&gt;
		$fileName = null;&lt;br /&gt;
		$imagesCount = count($images);&lt;br /&gt;
		if ($imagesCount &amp;gt; 0) {&lt;br /&gt;
			$imageNumber = time() % $imagesCount;&lt;br /&gt;
			$fileName = $folder.$images[$imageNumber];&lt;br /&gt;
		}&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;
		list($image) = def_module::loadTemplates(&amp;#039;random/&amp;#039;.$template, &amp;#039;image&amp;#039;);&lt;br /&gt;
		&lt;br /&gt;
		$blockArr = [];&lt;br /&gt;
		$blockArr[&amp;#039;filename&amp;#039;] = $fileName;&lt;br /&gt;
		&lt;br /&gt;
		return def_module::parseTemplate($image, $blockArr);&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Макрос принимает два параметра: папку с изображениями и шаблон вывода. В XSLT шаблон вывода не используется. Если же Вы используете TPL, то необходимо создать файл &amp;quot;tpls/random/default.tpl&amp;quot; (это будет шаблон вывода по умолчанию, если не будет указан другой) со следующим содержанием:&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;image&amp;#039;] = &amp;lt;&amp;lt;&amp;lt;END&lt;br /&gt;
 &lt;br /&gt;
&amp;lt;img src=&amp;quot;%filename%&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot; /&amp;gt;&lt;br /&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;
=== Использование макроса в TPL ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%custom getRandomImage(&amp;#039;/images/&amp;#039;)%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Использование макроса в XSLT ===&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;html4strict&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:apply-templates select=&amp;quot;document(&amp;#039;udata://custom/getRandomImage/(./images/cms)/&amp;#039;)/udata&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;xsl:template match=&amp;quot;udata[@module = &amp;#039;custom&amp;#039;][@method = &amp;#039;getRandomImage&amp;#039;]&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:variable name=&amp;quot;img&amp;quot; select=&amp;quot;filename&amp;quot; /&amp;gt;&lt;br /&gt;
	&amp;lt;img src=&amp;quot;{$img}&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot; /&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;
=== Использование макроса в 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;
	$imageData = $this-&amp;gt;macros(&amp;#039;custom&amp;#039;, &amp;#039;getRandomImage&amp;#039;, [&amp;#039;./images/&amp;#039;]);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;img src=&amp;quot;{$imageData[&amp;#039;filename&amp;#039;]}&amp;quot; alt=&amp;quot;random image&amp;quot; border=&amp;quot;0&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_%D0%B2_%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D0%BE%D0%BC_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B5&amp;diff=9349</id>
		<title>Получение текущего шаблона в кастомном методе</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D1%82%D0%B5%D0%BA%D1%83%D1%89%D0%B5%D0%B3%D0%BE_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_%D0%B2_%D0%BA%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%BD%D0%BE%D0%BC_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B5&amp;diff=9349"/>
		<updated>2019-10-31T10:26:49Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
В кастомном методе узнать какой шаблон используется системой, если шаблоны хранятся в [http://help-dev.umi-cms.ru/chapter.newTemplates.html новом формате].&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&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;
// Полный путь к файлам используемого шаблона&lt;br /&gt;
$template_path = cmsController::getInstance()-&amp;gt;getResourcesDirectory(true);&lt;br /&gt;
&lt;br /&gt;
// Имя папки используемого шаблона&lt;br /&gt;
$template_name = cmsController::getInstance()-&amp;gt;detectCurrentDesignTemplate()-&amp;gt;getName();&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
При использовании старого формата хранения шаблонов, функции возвращают NULL.&lt;br /&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;
Данный функционал был проверен на работоспособность в версии системы 2.8.5.1.&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9.&amp;diff=9348</id>
		<title>Отключение возможности регистрации пользователей.</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9E%D1%82%D0%BA%D0%BB%D1%8E%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B2%D0%BE%D0%B7%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE%D1%81%D1%82%D0%B8_%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%B9.&amp;diff=9348"/>
		<updated>2019-10-31T10:12:43Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; [[category:Модуль Пользователи]][[Категория:Написание кастомных макросов]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&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;Пользователи&amp;#039;&amp;#039;»). При попытке перехода по ссылке [[«Забыли пароль?»]] (для восстановления пароля) попадаем на страницу авторизации.&lt;br /&gt;
Для того, чтобы при отключенной регистрации у пользователей оставалась возможность восстановления пароля, необходимо добавить файл &amp;#039;&amp;#039;&amp;#039;permissions.custom.php&amp;#039;&amp;#039;&amp;#039; в директорию &amp;#039;&amp;#039;/classes/components/users/&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(&lt;br /&gt;
        &amp;#039;login&amp;#039; =&amp;gt; Array(&amp;#039;forget&amp;#039;, &amp;#039;forget_do&amp;#039;, &amp;#039;restore&amp;#039;),&lt;br /&gt;
    );&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%BE%D0%B5_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B0%D0%BD%D0%BE%D0%BD%D1%81%D0%B0_%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8&amp;diff=9347</id>
		<title>Автоматическое формирование анонса новости</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%BE%D0%B5_%D1%84%D0%BE%D1%80%D0%BC%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D0%B0%D0%BD%D0%BE%D0%BD%D1%81%D0%B0_%D0%BD%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D0%B8&amp;diff=9347"/>
		<updated>2019-10-31T10:08:55Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Если анонс новости из себя представляет первые несколько предложений из полной новости, то для его формирования можно использовать кастомный метод, работающий по событиям systemCreateElement и systemModifyElement.&lt;br /&gt;
Добавим вызов нашего будущего метода в файл ~/classes/components/news/custom_events.php&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;#039;systemCreateElement&amp;#039;, &amp;#039;news&amp;#039;, &amp;#039;anonsGenerate&amp;#039;);&lt;br /&gt;
	new umiEventListener(&amp;#039;systemModifyElement&amp;#039;, &amp;#039;news&amp;#039;, &amp;#039;anonsGenerate&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
после этого напишем сам обработчик в файл ~/classes/components/news/customAdmin.php&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	public function anonsGenerate(iUmiEventPoint $oEventPoint){&lt;br /&gt;
		if ($oEventPoint-&amp;gt;getMode() === &amp;quot;after&amp;quot;){&lt;br /&gt;
			$object = $oEventPoint-&amp;gt;getRef(&amp;quot;element&amp;quot;);&lt;br /&gt;
			$content = $object-&amp;gt;getValue(&amp;#039;content&amp;#039;);&lt;br /&gt;
			$limit = 199;&lt;br /&gt;
			$result = substr($content, 0, $limit) . &amp;#039;...&amp;#039;;&lt;br /&gt;
			$object-&amp;gt;setValue(&amp;#039;anons&amp;#039;, $result);&lt;br /&gt;
			$object-&amp;gt;commit();&lt;br /&gt;
			return true;&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
в данной функции происходит получение содержимого поля content новости, и в поле anons записывается первые 199 символов содержимого поля content, это ограничение указывается в переменной $limit.&lt;br /&gt;
Для правильной работы, необходимо не забыть добавить запись об этой функции в файл permissions.custom.php.&lt;br /&gt;
Теперь, при добавлении/редактировании новости, анонс будет формироваться автоматически.&lt;br /&gt;
&amp;lt;p&amp;gt;&lt;br /&gt;
Данный функционал был проверен на работоспособность в версии системы 2.8.5.2.&lt;br /&gt;
&amp;lt;/p&amp;gt;&lt;br /&gt;
[[Категория:Написание кастомных макросов]][[Категория:Модуль Новости]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC_%D0%B2_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5_FAQ&amp;diff=9346</id>
		<title>Добавление полей для ввода пользователем в модуле FAQ</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%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC_%D0%B2_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5_FAQ&amp;diff=9346"/>
		<updated>2019-10-31T09:01:05Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В системе UMI.CMS для модуля FAQ предусмотрен ввод пользователем вопроса, ника, адреса его электронной почты и темы. Если требуется ввод дополнительных данных (возраст, профессия и т.д.) добавить поле в тип данных &amp;quot;Вопрос в FAQ&amp;quot; и создать одноимённое поле в форме недостаточно.&lt;br /&gt;
Для того чтобы заполнить произвольное поле для вопроса в FAQ, нужно создать кастомный метод в файле customMacros.php модуля &amp;quot;FAQ&amp;quot;.&lt;br /&gt;
Содержимое метода должно быть примерно следующее:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function onQuestionPostDopPolja(iUmiEventPoint $event) {&lt;br /&gt;
        if ($event-&amp;gt;getMode() == &amp;#039;after&amp;#039;) {&lt;br /&gt;
            $questionId = $event-&amp;gt;getParam(&amp;#039;element_id&amp;#039;);&lt;br /&gt;
            $string = getRequest(&amp;#039;new_pole&amp;#039;);&lt;br /&gt;
            $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
            $faq = $hierarchy-&amp;gt;getElement($questionId);&lt;br /&gt;
            $faq-&amp;gt;setValue(&amp;#039;new_pole&amp;#039;, $string);&lt;br /&gt;
            $faq-&amp;gt;commit();&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
где new_pole - идентификатор поля, которое нужно записать.&lt;br /&gt;
&lt;br /&gt;
Этот метод должен запускаться обработчиком событий, который нужно поместить в файл 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;#039;faq_post_question&amp;#039;, &amp;#039;faq&amp;#039;, &amp;#039;onQuestionPostDopPolja&amp;#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Категория:Написание кастомных макросов]][[Категория:Модуль FAQ]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC_%D0%B2_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5_FAQ&amp;diff=9345</id>
		<title>Добавление полей для ввода пользователем в модуле FAQ</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%BF%D0%BE%D0%BB%D0%B5%D0%B9_%D0%B4%D0%BB%D1%8F_%D0%B2%D0%B2%D0%BE%D0%B4%D0%B0_%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D1%82%D0%B5%D0%BB%D0%B5%D0%BC_%D0%B2_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5_FAQ&amp;diff=9345"/>
		<updated>2019-10-31T09:00:48Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Актуализация статьи&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В системе UMI.CMS для модуля FAQ предусмотрен ввод пользователем вопроса, ника, адреса его электронной почты и темы. Если требуется ввод дополнительных данных (возраст, профессия и т.д.) добавить поле в тип данных &amp;quot;Вопрос в FAQ&amp;quot; и создать одноимённое поле в форме недостаточно.&lt;br /&gt;
Для того чтобы заполнить произвольное поле для вопроса в FAQ, нужно создать кастомный метод в файле customMacros.php модуля &amp;quot;FAQ&amp;quot;.&lt;br /&gt;
Содержимое метода должно быть примерно следующее:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
public function onQuestionPostDopPolja(iUmiEventPoint $event) {&lt;br /&gt;
        if ($event-&amp;gt;getMode() == &amp;#039;after&amp;#039;) {&lt;br /&gt;
            $questionId = $event-&amp;gt;getParam(&amp;#039;element_id&amp;#039;);&lt;br /&gt;
            $string = getRequest(&amp;#039;new_pole&amp;#039;);&lt;br /&gt;
            $hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
            $faq = $hierarchy-&amp;gt;getElement($questionId);&lt;br /&gt;
            $faq-&amp;gt;setValue(&amp;#039;new_pole&amp;#039;,$string);&lt;br /&gt;
            $faq-&amp;gt;commit();&lt;br /&gt;
        }&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
где new_pole - идентификатор поля, которое нужно записать.&lt;br /&gt;
&lt;br /&gt;
Этот метод должен запускаться обработчиком событий, который нужно поместить в файл 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;#039;faq_post_question&amp;#039;, &amp;#039;faq&amp;#039;, &amp;#039;onQuestionPostDopPolja&amp;#039;);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Категория:Написание кастомных макросов]][[Категория:Модуль FAQ]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%B8_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=9344</id>
		<title>Описание структуры файлов и таблиц базы данных</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%B8_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=9344"/>
		<updated>2019-10-15T09:12:26Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Обновил&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Файловая структура ==&lt;br /&gt;
&lt;br /&gt;
* classes - ядро и модули системы&lt;br /&gt;
** components - модули системы&lt;br /&gt;
** system - ядро системы&lt;br /&gt;
** vendor - зависимости Composer-а&lt;br /&gt;
* files - пользовательские файлы&lt;br /&gt;
* images - пользовательские изображения&lt;br /&gt;
** cms - миниатюры изображений и пользовательские изображения&lt;br /&gt;
* styles - шаблоны и стили админки&lt;br /&gt;
** common - файлы оформления системных страниц&lt;br /&gt;
** skins - скины админки&lt;br /&gt;
* sys-temp - вспомогательные файлы системы&lt;br /&gt;
** manifest - директория для временных файлов манифестов&lt;br /&gt;
** runtime-cache - временные файлы системы&lt;br /&gt;
** static-cache - директория для файлов статического кеша&lt;br /&gt;
** updates - файлы обновления системы&lt;br /&gt;
** uploads - директория для загрузки файлов из форм&lt;br /&gt;
** logs - директория с логами&lt;br /&gt;
** yml - кеш импорта/экспорта YML&lt;br /&gt;
** packer - собранные пакеты модулей/решений/расширений для маркета&lt;br /&gt;
* templates - шаблоны&lt;br /&gt;
* tests - тесты&lt;br /&gt;
** core - тесты ядра&lt;br /&gt;
** install - тесты установки&lt;br /&gt;
** logs - логи тестов&lt;br /&gt;
** modules - тесты модулей&lt;br /&gt;
** PHPUnit - тесты на PHPUnit&lt;br /&gt;
** Runner - функционал для запуска тестов&lt;br /&gt;
** simpletest - файлы фреймворка SimpleTest для выполнения тестов&lt;br /&gt;
** updates - тесты обновления&lt;br /&gt;
&lt;br /&gt;
== Структура базы данных ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Название таблицы !! Описание таблицы&lt;br /&gt;
|-&lt;br /&gt;
||cms3_apiship_orders || заявки на доставку через ApiShip&lt;br /&gt;
|-&lt;br /&gt;
||cms3_appointment_employee_schedule || расписания сотрудников записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_appointment_employees || сотрудники записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_appointment_employees_services || связи сотрудник-услуга для записи на примем&lt;br /&gt;
|-&lt;br /&gt;
||cms3_appointment_orders || заявки записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_appointment_service_groups || группы услуг для записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_appointment_services || услуги для записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_data_cache || кеш&lt;br /&gt;
|-&lt;br /&gt;
||cms3_domain_mirrows || зеркала для доменов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_domains || домены сайтов в системе&lt;br /&gt;
|-&lt;br /&gt;
||cms3_emarket_top || статистика о популярных товарах&lt;br /&gt;
|-&lt;br /&gt;
||cms3_fields_controller || связи между полями и группами полей в типах данных&lt;br /&gt;
|-&lt;br /&gt;
||cms3_hierarchy || страницы сайта&lt;br /&gt;
|-&lt;br /&gt;
||cms3_hierarchy_relations || иерархические связи страниц сайта&lt;br /&gt;
|-&lt;br /&gt;
||cms3_hierarchy_types || базовые типы данных&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_apiship_orders || связи импорта заказов из ApiShip&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_appointment_employee_schedule || связи импорта расписания сотрудников записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_appointment_employees || связи импорта сотрудников записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_appointment_employees_services || связи импорта связей сотрудник-услуга для записи на примем&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_appointment_orders || связи импорта заявок записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_appointment_service_groups || связи импорта групп услуг для записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_appointment_services || связи импорта услуг для записи на прием&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_domain_mirrors || связи импорта зеркал для доменов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_domains || связи импорта доменов в системе&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_fields || связи полей с внешними сущностями&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_groups || связи групп полей с внешними сущностями&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_langs || связи импорта языков в системе&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_links || связи импорта ссылок сайта&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_links_sources || связи импорта источников ссылок&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_mail_notifications || связи импорта шаблонов уведомлений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_mail_templates || связи импорта данных шаблонов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_mail_variables || связи импорта &lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_objects || связи импорта объектов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_offer_list ||  связи импорта торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_offer_price_list || связи импорта цен торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_offer_price_type_list || связи импорта типов цен торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_redirects || связи импорта редиректов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_relations || связи импорта иерархические связей страниц сайта&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_restrictions || связи импорта ограничений полей&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_sliders || связи импорта слайдеров&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_slides || связи импорта слайдов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_sources || связи импорта источников ссылок&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_stock_balance_list || связи импорта складских остатков торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_templates || связи импорта шаблонов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_import_types || связи импорта типов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_langs || языки в системе&lt;br /&gt;
|-&lt;br /&gt;
||cms3_links || список всех ссылок сайта для модуля SEO&lt;br /&gt;
|-&lt;br /&gt;
||cms3_links_sources || источники ссылок&lt;br /&gt;
|-&lt;br /&gt;
||cms3_mail_notifications || данные о шаблонах писем уведомлений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_mail_templates || шаблоны писем уведомлений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_mail_variables || данные о переменных в шаблонах писем уведомлений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_messages || для системных сообщений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_messages_inbox || информация об открытии системных сообщений пользователями&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_content || значения полей с типами &amp;quot;Кнопка-флажок&amp;quot;, &amp;quot;Цвет&amp;quot;, &amp;quot;Дата&amp;quot;, &amp;quot;Число с точкой&amp;quot;, &amp;quot;Число&amp;quot;, &amp;quot;Ссылка на объектный тип данных&amp;quot;, &amp;quot;Составное&amp;quot;, &amp;quot;Пароль&amp;quot;, &amp;quot;Цена&amp;quot;, &amp;quot;Выпадающий список&amp;quot;, &amp;quot;Выпадающий список с множественным выбором&amp;quot;, &amp;quot;Строка&amp;quot;, &amp;quot;Ссылка на дерево&amp;quot;, &amp;quot;Теги&amp;quot;, &amp;quot;Простой текст&amp;quot;, &amp;quot;HTML-текст&amp;quot; для всех объектов в системе&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_content_cnt || хранилище для значений полей типа &amp;quot;Счетчик&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_domain_id_list || хранилище для значений полей типа &amp;quot;Ссылка на домен&amp;quot; и &amp;quot;Ссылка на список доменов&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_field_groups || группы полей объектов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_field_types || типы полей объектов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_fields || поля объектов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_fields_restrictions || ограничения полей&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_files || хранилище для значений полей типа &amp;quot;Файл&amp;quot; и &amp;quot;Набор файлов&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_images || хранилище для значений полей типа &amp;quot;Изображение&amp;quot;, &amp;quot;Набор изображений&amp;quot; и &amp;quot;Флеш-ролик&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_offer_id_list || хранилище для значений полей типа &amp;quot;Ссылка на торговое предложение&amp;quot; и &amp;quot;Ссылка на список торговых предложений&amp;quot;&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_type_tree || иерархия типов данных объектов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_object_types || типы объектов&lt;br /&gt;
|-&lt;br /&gt;
||cms3_objects || объекты системы&lt;br /&gt;
|-&lt;br /&gt;
||cms3_objects_expiration || время действия временных объектов до удаления&lt;br /&gt;
|-&lt;br /&gt;
||cms3_offer_list || торговые предложения&lt;br /&gt;
|-&lt;br /&gt;
||cms3_offer_price_list || цены торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_offer_price_type_list || типы цен торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_permissions || права доступа к страницам сайта&lt;br /&gt;
|-&lt;br /&gt;
||cms3_redirects || редиректы&lt;br /&gt;
|-&lt;br /&gt;
||cms3_response_error_entry_list || лог записей обработки ответа с ошибкой&lt;br /&gt;
|-&lt;br /&gt;
||cms3_search || время индексации страниц сайта&lt;br /&gt;
|-&lt;br /&gt;
||cms3_search_index || данные индексации страниц сайта&lt;br /&gt;
|-&lt;br /&gt;
||cms3_search_index_words || данные о проидексированых словах&lt;br /&gt;
|-&lt;br /&gt;
||cms3_sliders || слайдеры&lt;br /&gt;
|-&lt;br /&gt;
||cms3_slides || слайды&lt;br /&gt;
|-&lt;br /&gt;
||cms3_stock_balance_list || складские остатки торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
||cms3_templates || шаблоны в системе&lt;br /&gt;
|-&lt;br /&gt;
||cms_backup || резервные копии страниц&lt;br /&gt;
|-&lt;br /&gt;
||cms_permissions || права доступа на модули и методы&lt;br /&gt;
|-&lt;br /&gt;
||cms_reg || данные системного реестра&lt;br /&gt;
|-&lt;br /&gt;
||cms_sitemap || карта сайта&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_domains || статистика по доменам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_entry_points || статистика точек входа&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_entry_points_events || статистика событий точек входа&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_events || статистика событий&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_events_collected || статистика собранных событий&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_events_rel || статистика связей событий&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_events_urls || статистика событий ссылок&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_finders || статистика поиска&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_hits || статистика попадений&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_holidays || статистика по выходным&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_pages || статистика по страницам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_paths || статистика по путям&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_phrases || статистика по фразам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sites || статистика по сайтам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sites_groups || статистика&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources || статистика источников&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_coupon || статистика источников купонов&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_coupon_events || статистика источников событий купонов&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_openstat || статистика источников из openstat&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_openstat_ad || статистика источников из openstat по рекламным объявлениям&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_openstat_campaign || статистика источников из openstat компании&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_openstat_service || статистика источников из openstat сервисы&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_openstat_source || статистика источников из openstat источники&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_pr || статистикам источников от рекламной компании&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_pr_events || статистика источников событий рекламной компании&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_pr_sites || статистика источников от рекламной компании по сайтам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_search || статистика источников поиска&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_search_engines || статистика источников по поисковым движкам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_search_queries || статистика источников по поисковым запросам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_sites || статистика источников по сайтам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_sites_domains || статистика источников по доменам&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_sources_ticket || статистика источников заявок&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_users || статистика пользователей&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_users_browsers || статистика по браузерам пользователей&lt;br /&gt;
|-&lt;br /&gt;
||cms_stat_users_os || статистика по операционным системам пользователей&lt;br /&gt;
|-&lt;br /&gt;
||umi_event_feeds || события для модуля События&lt;br /&gt;
|-&lt;br /&gt;
||umi_event_types || типы событий для модуля События&lt;br /&gt;
|-&lt;br /&gt;
||umi_event_user_history ||  история событий пользователей для модуля События&lt;br /&gt;
|-&lt;br /&gt;
||umi_event_users || события пользователей для модуля События&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Решение проблем и ошибок]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%B8_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=9338</id>
		<title>Описание структуры файлов и таблиц базы данных</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9E%D0%BF%D0%B8%D1%81%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D1%82%D1%80%D1%83%D0%BA%D1%82%D1%83%D1%80%D1%8B_%D1%84%D0%B0%D0%B9%D0%BB%D0%BE%D0%B2_%D0%B8_%D1%82%D0%B0%D0%B1%D0%BB%D0%B8%D1%86_%D0%B1%D0%B0%D0%B7%D1%8B_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D1%85&amp;diff=9338"/>
		<updated>2019-09-30T16:32:01Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Новая страница: «&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;  == Файловая структура ==  * classes - ядро, модули системы и пакеты ав…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Файловая структура ==&lt;br /&gt;
&lt;br /&gt;
* classes - ядро, модули системы и пакеты автозагрузки&lt;br /&gt;
** components - модули системы&lt;br /&gt;
** system - файлы ядра системы&lt;br /&gt;
** vendor - пакеты автозагрузки&lt;br /&gt;
* files - пользовательские файлы&lt;br /&gt;
* images - пользовательские изображения&lt;br /&gt;
** cms - системные изображения&lt;br /&gt;
** icons - иконки сайта&lt;br /&gt;
* styles - шаблоны и стили админки&lt;br /&gt;
** common - файлы оформления системных страниц&lt;br /&gt;
** skins - скины админки&lt;br /&gt;
* sys-temp - веременные файлы системы&lt;br /&gt;
** manifest - директория для временных операций, которыми занимаются манифесты&lt;br /&gt;
** runtime-cache - временные файлы системы&lt;br /&gt;
** static-cache - директория для временных операций статического кэширования&lt;br /&gt;
** updates - файлы обновления системы&lt;br /&gt;
** uploads - директория для загрузки файлов из форм&lt;br /&gt;
* templates - шаблоны&lt;br /&gt;
* tests - тесты&lt;br /&gt;
** core - тесты ядра&lt;br /&gt;
** install - тесты установки&lt;br /&gt;
** logs - логи тестов&lt;br /&gt;
** modules - тесты модулей&lt;br /&gt;
** PHPUnit - тесты на PHPUnit&lt;br /&gt;
** Runner - функционал для запуска тестов&lt;br /&gt;
** simpletest - файлы фреймворка SimpleTest для выполнения тестов&lt;br /&gt;
** updates - тесты обновления&lt;br /&gt;
&lt;br /&gt;
== Структура базы данных ==&lt;br /&gt;
&lt;br /&gt;
{|class=&amp;quot;wikitable&amp;quot;&lt;br /&gt;
!Название таблицы!!Описание таблицы&lt;br /&gt;
|-&lt;br /&gt;
||cms3_apiship_orders || Хранит заказы оформелнные с доставкой через ApiShip&lt;br /&gt;
|-&lt;br /&gt;
|cms3_appointment_employee_schedule || Хранит расписания сотрудников записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_appointment_employees || Хранит сотрудников записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_appointment_employees_services || Хранит связи сотрудник-услуга для записи на примем&lt;br /&gt;
|-&lt;br /&gt;
|cms3_appointment_orders || Хранит заявки записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_appointment_service_groups || Хранит группы услуг для записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_appointment_services || Хранит услуги для записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_data_cache || Хранит кеш&lt;br /&gt;
|-&lt;br /&gt;
|cms3_domain_mirrows || Хранит зеркала для доменов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_domains || Хранит домены сайтов в системе&lt;br /&gt;
|-&lt;br /&gt;
|cms3_emarket_top || Хранит статистику о популярных товарах&lt;br /&gt;
|-&lt;br /&gt;
|cms3_fields_controller || Хранит связи между полями и группами полей в типах данных&lt;br /&gt;
|-&lt;br /&gt;
|cms3_hierarchy || Хранит все страницы структуры сайта&lt;br /&gt;
|-&lt;br /&gt;
|cms3_hierarchy_relations || Хранит иерархические связи страниц структуры сайта&lt;br /&gt;
|-&lt;br /&gt;
|cms3_hierarchy_types || Хранит типы данных страниц структуры сайта&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_apiship_orders || Хранит связи импорта заказов из ApiShip&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_appointment_employee_schedule || Хранит связи импорта расписания сотрудников записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_appointment_employees || Хранит связи импорта сотрудников записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_appointment_employees_services || Хранит связи импорта связей сотрудник-услуга для записи на примем&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_appointment_orders || Хранит связи импорта заявок записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_appointment_service_groups || Хранит связи импорта групп услуг для записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_appointment_services || Хранит связи импорта услуг для записи на прием&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_domain_mirrors || Хранит связи импорта зеркал для доменов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_domains || Хранит связи импорта доменов в системе&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_fields || Хранит связи полей с внешними сущностями&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_groups || Хранит связи групп полей с внешними сущностями&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_langs || Хранит связи импорта языков в системе&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_links || Хранит связи импорта ссылок сайта&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_links_sources || Хранит связи импорта источников ссылок&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_mail_notifications || Хранит связи импорта шаблонов уведомлений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_mail_templates || Хранит связи импорта данных шаблонов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_mail_variables || Хранит связи импорта &lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_objects || Хранит связи импорта объектов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_offer_list ||  Хранит связи импорта торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_offer_price_list || Хранит связи импорта цен торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_offer_price_type_list || Хранит связи импорта типов цен торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_redirects || Хранит связи импорта редиректов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_relations || Хранит связи импорта иерархические связей страниц структуры сайта&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_restrictions || Хранит связи импорта рестрикшенов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_sliders || Хранит связи импорта слайдеров&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_slides || Хранит связи импорта слайдов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_sources || Хранит связи импорта испточников ссылок&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_stock_balance_list || Хранит связи импорта ?&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_templates || Хранит связи импорта шаблонов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_import_types || Хранит связи импорта типов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_langs || Хранит языки в системе&lt;br /&gt;
|-&lt;br /&gt;
|cms3_links || Хранит список всех ссылок сайта для модуля SEO&lt;br /&gt;
|-&lt;br /&gt;
|cms3_links_sources || Хранит источники ссылок&lt;br /&gt;
|-&lt;br /&gt;
|cms3_mail_notifications || Хранит данные о шаблонах писем уведомлений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_mail_templates || Хранит шаблоны писем уведомлений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_mail_variables || Хранит данные о переменных в шаблонах писем уведомлений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_messages || ? класс umiMessage протокол umess&lt;br /&gt;
|-&lt;br /&gt;
|cms3_messages_inbox || ? класс umiMessage протокол umess&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_content || Хранит поля всех объектов в системе&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_content_cnt || Хранит счетчики&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_domain_id_list || Хранит ссылки на домены&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_field_groups || Хранит группы полей объектов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_field_types || Хранит типы полей объектов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_fields || Хранит поля объектов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_fields_restrictions || Хранит рестрикшены&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_files || Хранит данные объектов типа файл&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_images || Хранит данные объектов типа изображение&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_offer_id_list || Хранит ссылки на торговые предложения&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_type_tree || Хранит иерархию типов данных объектов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_object_types || Хранит типы объектов&lt;br /&gt;
|-&lt;br /&gt;
|cms3_objects || Хранит объекты системы&lt;br /&gt;
|-&lt;br /&gt;
|cms3_objects_expiration || Хранит время действия временых объектов до удаления&lt;br /&gt;
|-&lt;br /&gt;
|cms3_offer_list || Хранит все торговые предложения&lt;br /&gt;
|-&lt;br /&gt;
|cms3_offer_price_list || Хранит цену торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_offer_price_type_list || Хранит типы цен торговых предложений&lt;br /&gt;
|-&lt;br /&gt;
|cms3_permissions || Хранит права доступа к страницам сайта&lt;br /&gt;
|-&lt;br /&gt;
|cms3_redirects || Хранит редиректы&lt;br /&gt;
|-&lt;br /&gt;
|cms3_response_error_entry_list || ?&lt;br /&gt;
|-&lt;br /&gt;
|cms3_search || Хранит время индексации страниц сайта&lt;br /&gt;
|-&lt;br /&gt;
|cms3_search_index || Хранит данные индексации страниц сайта&lt;br /&gt;
|-&lt;br /&gt;
|cms3_search_index_words || Хранит данные о проидексированых словах&lt;br /&gt;
|-&lt;br /&gt;
|cms3_sliders || Хранит слайдеры&lt;br /&gt;
|-&lt;br /&gt;
|cms3_slides || Хранит слайды&lt;br /&gt;
|-&lt;br /&gt;
|cms3_stock_balance_list || ?&lt;br /&gt;
|-&lt;br /&gt;
|cms3_templates || Хранит шаблоны в системе&lt;br /&gt;
|-&lt;br /&gt;
|cms_backup || Хранит резервные копии страниц&lt;br /&gt;
|-&lt;br /&gt;
|cms_permissions || Хранит права доступа на модули и методы&lt;br /&gt;
|-&lt;br /&gt;
|cms_reg || Хранит данные системного реестра&lt;br /&gt;
|-&lt;br /&gt;
|cms_sitemap || Хранит сайтмап&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_domains || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_entry_points || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_entry_points_events || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_events || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_events_collected || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_events_rel || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_events_urls || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_finders || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_hits || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_holidays || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_pages || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_paths || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_phrases || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sites || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sites_groups || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_coupon || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_coupon_events || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_openstat || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_openstat_ad || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_openstat_campaign || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_openstat_service || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_openstat_source || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_pr || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_pr_events || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_pr_sites || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_search || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_search_engines || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_search_queries || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_sites || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_sites_domains || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_sources_ticket || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_users || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_users_browsers || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|cms_stat_users_os || Хранит статистику&lt;br /&gt;
|-&lt;br /&gt;
|umi_event_feeds || Хранит события для модуля События&lt;br /&gt;
|-&lt;br /&gt;
|umi_event_types || Хранит типы событий для модуля События&lt;br /&gt;
|-&lt;br /&gt;
|umi_event_user_history ||  Хранит историю событий пользователей для модуля События&lt;br /&gt;
|-&lt;br /&gt;
|umi_event_users || Хранит события пользователей для модуля События&lt;br /&gt;
|}&lt;br /&gt;
&lt;br /&gt;
[[Категория:Решение проблем и ошибок]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%B8%D0%B7_1%D0%A1_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%D0%BC&amp;diff=9311</id>
		<title>Выгрузка из 1С информации по складам</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%B8%D0%B7_1%D0%A1_%D0%B8%D0%BD%D1%84%D0%BE%D1%80%D0%BC%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D0%BE_%D1%81%D0%BA%D0%BB%D0%B0%D0%B4%D0%B0%D0%BC&amp;diff=9311"/>
		<updated>2019-09-05T07:24:08Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Проверено, обновлено&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Если Вы хотите, чтобы из 1С в систему выгружалась информация из тегов:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;xml&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;Склад ИдСклада=&amp;quot;6257b501-c90c-11e2-bd93-001e67494c74&amp;quot; КоличествоНаСкладе=&amp;quot;84&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;Склад ИдСклада=&amp;quot;885f414e-4d67-11e5-ac2e-001e67494c75&amp;quot; КоличествоНаСкладе=&amp;quot;20&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
То вам необходимо добавить следующий шаблон в файл /xsl/import/custom/commerceML2.xsl&lt;br /&gt;
&amp;lt;source lang=&amp;#039;xml&amp;#039;&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;ПакетПредложений&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;objects&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:for-each select=&amp;quot;Склады/Склад&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;object id=&amp;quot;{Ид}&amp;quot; type-id=&amp;quot;81&amp;quot; name=&amp;quot;{Наименование}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
		&amp;lt;/objects&amp;gt;&lt;br /&gt;
		&amp;lt;pages&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;Предложения/Предложение&amp;quot; /&amp;gt;&lt;br /&gt;
		&amp;lt;/pages&amp;gt;&lt;br /&gt;
		&amp;lt;options&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:apply-templates select=&amp;quot;Предложения/Предложение&amp;quot; mode=&amp;quot;stores_state&amp;quot; /&amp;gt;&lt;br /&gt;
   		&amp;lt;/options&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;stores_state&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;entity page-id=&amp;quot;{Ид}&amp;quot; field-name=&amp;quot;stores_state&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:for-each select=&amp;quot;Склад&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;option int=&amp;quot;{@КоличествоНаСкладе}&amp;quot; float=&amp;quot;0&amp;quot; object-id=&amp;quot;{@ИдСклада}&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:for-each&amp;gt;&lt;br /&gt;
		&amp;lt;/entity&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
 [[category:Интеграция с 1С]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=Google_reCAPTCHA_v3_%D0%B2_Demomarket&amp;diff=9310</id>
		<title>Google reCAPTCHA v3 в Demomarket</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=Google_reCAPTCHA_v3_%D0%B2_Demomarket&amp;diff=9310"/>
		<updated>2019-08-31T10:22:42Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
Реализовать использование Google reCaptcha v3 в шаблоне Demomarket.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
Для использования Google reCaptcha v3 необходимо внести небольшие изменения в несколько файлов шаблона:&lt;br /&gt;
&lt;br /&gt;
===DemomarketPhpExtension.php===&lt;br /&gt;
Файл находится по адресу /templates/demomarket/php/library/DemomarketPhpExtension.php&lt;br /&gt;
&lt;br /&gt;
В файле нужно изменить метод &amp;#039;&amp;#039;&amp;#039;getRecaptchaUrl&amp;#039;&amp;#039;&amp;#039; так, чтобы в GET параметре render передавался SiteKey Google reCaptcha v3:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;php&amp;#039;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Возвращает url скрипта recaptcha&lt;br /&gt;
 * @param array $variables описание страницы&lt;br /&gt;
 *&lt;br /&gt;
 * [&lt;br /&gt;
 *    &amp;#039;lang&amp;#039; =&amp;gt; string // код языка&lt;br /&gt;
 * ]&lt;br /&gt;
 *&lt;br /&gt;
 * @return string&lt;br /&gt;
 */&lt;br /&gt;
public function getRecaptchaUrl(array $variables) {&lt;br /&gt;
	$lang = isset($variables[&amp;#039;lang&amp;#039;]) ? $variables[&amp;#039;lang&amp;#039;] : &amp;#039;ru&amp;#039;;&lt;br /&gt;
	return &amp;quot;https://www.google.com/recaptcha/api.js?render=&amp;quot;.$this-&amp;gt;getRecaptchaSiteKey().&amp;quot;&amp;amp;onload=CaptchaCallback&amp;amp;render=explicit&amp;amp;hl={$lang}&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===head.phtml=== &lt;br /&gt;
Файл находится по адресу /templates/demomarket/php/layout/head.phtml&lt;br /&gt;
&lt;br /&gt;
Этот файл отвечает за код который размещается в теге &amp;lt;head&amp;gt; всех страниц сайта и тут нужно поменять код инициализации Google reCaptcha v3:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;php&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Содержимое html-тега &amp;lt;head&amp;gt;.&lt;br /&gt;
 *&lt;br /&gt;
 * @var umiTemplaterPHP|ViewPhpExtension|DemomarketPhpExtension $this&lt;br /&gt;
 * @var array $variables&lt;br /&gt;
 */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;base href=&amp;quot;&amp;lt;?= $this-&amp;gt;getResourceDirectory() ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;&amp;lt;?= $this-&amp;gt;escape($variables[&amp;#039;title&amp;#039;]) ?&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;&amp;lt;?= $this-&amp;gt;escape($variables[&amp;#039;meta&amp;#039;][&amp;#039;description&amp;#039;]) ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;&amp;lt;?= $this-&amp;gt;escape($variables[&amp;#039;meta&amp;#039;][&amp;#039;keywords&amp;#039;]) ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Umisoft&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?= $this-&amp;gt;macros(&amp;#039;content&amp;#039;, &amp;#039;includeFrontendResources&amp;#039;) ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;compiled/demomarket.lib.min.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;compiled/demomarket.min.css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?= $this-&amp;gt;getCanonicalLinkTag($variables) ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/ulang/&amp;lt;?= $variables[&amp;#039;lang&amp;#039;] ?&amp;gt;/common/emarket/?js&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;compiled/demomarket.lib-min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;compiled/demomarket-min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($this-&amp;gt;isRecaptchaEnabled()): ?&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;&amp;lt;?= $this-&amp;gt;getRecaptchaUrl($variables) ?&amp;gt;&amp;quot; async defer&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--suppress JSUnusedLocalSymbols --&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		var CaptchaCallback = function() {&lt;br /&gt;
			$(&amp;#039;.g-recaptcha&amp;#039;)&lt;br /&gt;
				.append(&amp;#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;g-recaptcha-response&amp;quot; class=&amp;quot;g-recaptcha-response&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
				.append(&amp;#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;action&amp;quot; class=&amp;quot;recaptcha-action&amp;quot; value=&amp;quot;homepage&amp;quot;&amp;gt;&amp;#039;);&lt;br /&gt;
			&lt;br /&gt;
			grecaptcha.ready(function() {&lt;br /&gt;
				grecaptcha.execute(&amp;quot;&amp;lt;?=$this-&amp;gt;getRecaptchaSiteKey()?&amp;gt;&amp;quot;, {action: &amp;#039;homepage&amp;#039;}).then(function(token) {&lt;br /&gt;
					$(&amp;#039;.g-recaptcha-response&amp;#039;).val(token);&lt;br /&gt;
					$(&amp;#039;.recaptcha-action&amp;#039;).val(&amp;#039;homepage&amp;#039;);&lt;br /&gt;
				});&lt;br /&gt;
			});&lt;br /&gt;
		};&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
	&amp;lt;?= $this-&amp;gt;getUserCss() ?&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Результат===&lt;br /&gt;
Если все сделано правильно в правом нижнем углу сайта появится виджет:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Google reCaptcha v3.png]]&lt;br /&gt;
&lt;br /&gt;
Благодаря тому, что Google reCaptcha v3 работает в фоне и не отвлекает пользователя от выполнения действий на сайте повышается удобство его использования и соответственно увеличивается конверсия.&lt;br /&gt;
&lt;br /&gt;
[[category:Верстка в PHP]][[category:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=Google_reCAPTCHA_v3_%D0%B2_Demomarket&amp;diff=9309</id>
		<title>Google reCAPTCHA v3 в Demomarket</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=Google_reCAPTCHA_v3_%D0%B2_Demomarket&amp;diff=9309"/>
		<updated>2019-08-31T10:22:12Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Новая страница: «&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;  == Задача == Реализовать использование Google reCaptcha v3 в шаблоне Demoma…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
Реализовать использование Google reCaptcha v3 в шаблоне Demomarket.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
Для использования Google reCaptcha v3 необходимо внести небольшие изменения в несколько файлов шаблона:&lt;br /&gt;
&lt;br /&gt;
===DemomarketPhpExtension.php===&lt;br /&gt;
Файл находится по адресу /templates/demomarket/php/library/DemomarketPhpExtension.php&lt;br /&gt;
&lt;br /&gt;
В файле нужно изменить метод &amp;#039;&amp;#039;&amp;#039;getRecaptchaUrl&amp;#039;&amp;#039;&amp;#039; так, чтобы в GET параметре render передавался SiteKey Google reCaptcha v3:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;php&amp;#039;&amp;gt;&lt;br /&gt;
/**&lt;br /&gt;
 * Возвращает url скрипта recaptcha&lt;br /&gt;
 * @param array $variables описание страницы&lt;br /&gt;
 *&lt;br /&gt;
 * [&lt;br /&gt;
 *    &amp;#039;lang&amp;#039; =&amp;gt; string // код языка&lt;br /&gt;
 * ]&lt;br /&gt;
 *&lt;br /&gt;
 * @return string&lt;br /&gt;
 */&lt;br /&gt;
public function getRecaptchaUrl(array $variables) {&lt;br /&gt;
	$lang = isset($variables[&amp;#039;lang&amp;#039;]) ? $variables[&amp;#039;lang&amp;#039;] : &amp;#039;ru&amp;#039;;&lt;br /&gt;
	return &amp;quot;https://www.google.com/recaptcha/api.js?render=&amp;quot;.$this-&amp;gt;getRecaptchaSiteKey().&amp;quot;&amp;amp;onload=CaptchaCallback&amp;amp;render=explicit&amp;amp;hl={$lang}&amp;quot;;&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===head.phtml=== &lt;br /&gt;
Файл находится по адресу /templates/demomarket/php/layout/head.phtml&lt;br /&gt;
&lt;br /&gt;
Этот файл отвечает за код который размещается в теге &amp;lt;head&amp;gt; всех страниц сайта и тут нужно поменять код инициализации Google reCaptcha v3:&lt;br /&gt;
&amp;lt;source lang=&amp;#039;php&amp;#039;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
/**&lt;br /&gt;
 * Содержимое html-тега &amp;lt;head&amp;gt;.&lt;br /&gt;
 *&lt;br /&gt;
 * @var umiTemplaterPHP|ViewPhpExtension|DemomarketPhpExtension $this&lt;br /&gt;
 * @var array $variables&lt;br /&gt;
 */&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;base href=&amp;quot;&amp;lt;?= $this-&amp;gt;getResourceDirectory() ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;title&amp;gt;&amp;lt;?= $this-&amp;gt;escape($variables[&amp;#039;title&amp;#039;]) ?&amp;gt;&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;meta charset=&amp;quot;utf-8&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;viewport&amp;quot; content=&amp;quot;width=device-width, initial-scale=1&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;description&amp;quot; content=&amp;quot;&amp;lt;?= $this-&amp;gt;escape($variables[&amp;#039;meta&amp;#039;][&amp;#039;description&amp;#039;]) ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;keywords&amp;quot; content=&amp;quot;&amp;lt;?= $this-&amp;gt;escape($variables[&amp;#039;meta&amp;#039;][&amp;#039;keywords&amp;#039;]) ?&amp;gt;&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;meta name=&amp;quot;author&amp;quot; content=&amp;quot;Umisoft&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?= $this-&amp;gt;macros(&amp;#039;content&amp;#039;, &amp;#039;includeFrontendResources&amp;#039;) ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;compiled/demomarket.lib.min.css&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;link rel=&amp;quot;stylesheet&amp;quot; href=&amp;quot;compiled/demomarket.min.css&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?= $this-&amp;gt;getCanonicalLinkTag($variables) ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;script type=&amp;quot;text/javascript&amp;quot; src=&amp;quot;/ulang/&amp;lt;?= $variables[&amp;#039;lang&amp;#039;] ?&amp;gt;/common/emarket/?js&amp;quot; charset=&amp;quot;utf-8&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;compiled/demomarket.lib-min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;script src=&amp;quot;compiled/demomarket-min.js&amp;quot;&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;?php if ($this-&amp;gt;isRecaptchaEnabled()): ?&amp;gt;&lt;br /&gt;
	&amp;lt;script src=&amp;quot;&amp;lt;?= $this-&amp;gt;getRecaptchaUrl($variables) ?&amp;gt;&amp;quot; async defer&amp;gt;&amp;lt;/script&amp;gt;&lt;br /&gt;
&lt;br /&gt;
	&amp;lt;!--suppress JSUnusedLocalSymbols --&amp;gt;&lt;br /&gt;
	&amp;lt;script&amp;gt;&lt;br /&gt;
		var CaptchaCallback = function() {&lt;br /&gt;
			$(&amp;#039;.g-recaptcha&amp;#039;)&lt;br /&gt;
				.append(&amp;#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;g-recaptcha-response&amp;quot; class=&amp;quot;g-recaptcha-response&amp;quot;&amp;gt;&amp;#039;)&lt;br /&gt;
				.append(&amp;#039;&amp;lt;input type=&amp;quot;hidden&amp;quot; name=&amp;quot;action&amp;quot; class=&amp;quot;recaptcha-action&amp;quot; value=&amp;quot;homepage&amp;quot;&amp;gt;&amp;#039;);&lt;br /&gt;
			&lt;br /&gt;
			grecaptcha.ready(function() {&lt;br /&gt;
				grecaptcha.execute(&amp;quot;&amp;lt;?=$this-&amp;gt;getRecaptchaSiteKey()?&amp;gt;&amp;quot;, {action: &amp;#039;homepage&amp;#039;}).then(function(token) {&lt;br /&gt;
					$(&amp;#039;.g-recaptcha-response&amp;#039;).val(token);&lt;br /&gt;
					$(&amp;#039;.recaptcha-action&amp;#039;).val(&amp;#039;homepage&amp;#039;);&lt;br /&gt;
				});&lt;br /&gt;
			});&lt;br /&gt;
		};&lt;br /&gt;
	&amp;lt;/script&amp;gt;&lt;br /&gt;
&amp;lt;?php endif; ?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;style&amp;gt;&lt;br /&gt;
	&amp;lt;?= $this-&amp;gt;getUserCss() ?&amp;gt;&lt;br /&gt;
&amp;lt;/style&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
===Результат===&lt;br /&gt;
Если все сделано правильно в правом нижнем углу сайта появится виджет:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Google reCaptcha v3.png]]&lt;br /&gt;
&lt;br /&gt;
Благодаря тому, что Google reCaptcha v3 работает в фоне и не отвлекает пользователя от выполнения действий на сайте повышается его удобство использования и соответственно увеличивается конверсия.&lt;br /&gt;
&lt;br /&gt;
[[category:Верстка в PHP]][[category:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Google_reCaptcha_v3.png&amp;diff=9308</id>
		<title>Файл:Google reCaptcha v3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Google_reCaptcha_v3.png&amp;diff=9308"/>
		<updated>2019-08-31T10:09:54Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B2_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%BC_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B5&amp;diff=9301</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_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B2_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%BC_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B5&amp;diff=9301"/>
		<updated>2019-08-28T09:18:16Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Выводить фотографии фотоальбома в обратном или случайном порядке. &lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Для реализации данной задачи необходимо переопределить макрос album из файла /classes/components/photoalbum/macros.php в файле /classes/components/photoalbum/customMacros.php добавив к нему возможность сортировки.&lt;br /&gt;
&lt;br /&gt;
1. Добавим к макросу album параметр $sort = &amp;#039;asc&amp;#039;, которым сможет принимать значения &amp;#039;asc&amp;#039; для сортировки по умолчанию, &amp;#039;desc&amp;#039; для вывода в обратном порядке, &amp;#039;rand&amp;#039; для вывода в случайном порядке.&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 album($path = false, $template = &amp;#039;default&amp;#039;, $limit = false, $ignore_paging = false, $sort = &amp;#039;asc&amp;#039;) {&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2. Добавляем в макрос конструкцию switch case для вывода фотографий в соответствии с указанным способом сортировки:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$photos-&amp;gt;types(&amp;#039;hierarchy-type&amp;#039;)-&amp;gt;name(&amp;#039;photoalbum&amp;#039;, &amp;#039;photo&amp;#039;);&lt;br /&gt;
// Сортировка			&lt;br /&gt;
switch ($sort) {&lt;br /&gt;
	case &amp;#039;asc&amp;#039;:&lt;br /&gt;
		$photos-&amp;gt;order(&amp;#039;ord&amp;#039;)-&amp;gt;asc();&lt;br /&gt;
		break;&lt;br /&gt;
	case &amp;#039;desc&amp;#039;:&lt;br /&gt;
		$photos-&amp;gt;order(&amp;#039;ord&amp;#039;)-&amp;gt;desc();&lt;br /&gt;
		break;&lt;br /&gt;
	case &amp;#039;rand&amp;#039;:&lt;br /&gt;
		$$photos-&amp;gt;order(&amp;#039;rand&amp;#039;);&lt;br /&gt;
		break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. В итоге код макроса в файле /classes/components/photoalbum/customMacros.php должен получиться такой:&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;
	/** Класс пользовательских макросов */&lt;br /&gt;
	class PhotoAlbumCustomMacros {&lt;br /&gt;
&lt;br /&gt;
		/** @var photoalbum $module */&lt;br /&gt;
		public $module;&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		 * Возвращает фотографии заданного фотоальбома&lt;br /&gt;
		 * @param bool|int|string $path идентификатор или адрес фотоальбома&lt;br /&gt;
		 * @param string $template имя шаблона (для tpl)&lt;br /&gt;
		 * @param bool|int $limit ограничение на количество выводимых элементов&lt;br /&gt;
		 * @param bool $ignore_paging игнорировать пагинацию&lt;br /&gt;
		 * @return mixed&lt;br /&gt;
		 * @throws ErrorException&lt;br /&gt;
		 * @throws coreException&lt;br /&gt;
		 * @throws publicException&lt;br /&gt;
		 * @throws selectorException&lt;br /&gt;
		 */&lt;br /&gt;
		public function album($path = false, $template = &amp;#039;default&amp;#039;, $limit = false, $ignore_paging = false, $sort = &amp;#039;asc&amp;#039;) {&lt;br /&gt;
			$curr_page = (int) getRequest(&amp;#039;p&amp;#039;);&lt;br /&gt;
			$per_page = $limit ?: $this-&amp;gt;module-&amp;gt;per_page;&lt;br /&gt;
&lt;br /&gt;
			$element_id = $this-&amp;gt;module-&amp;gt;analyzeRequiredPath($path);&lt;br /&gt;
&lt;br /&gt;
			if ($element_id === false &amp;amp;&amp;amp; $path != KEYWORD_GRAB_ALL) {&lt;br /&gt;
				throw new publicException(getLabel(&amp;#039;error-page-does-not-exist&amp;#039;, null, $path));&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			list($template_block, $template_block_empty, $template_line) = photoalbum::loadTemplates(&lt;br /&gt;
				&amp;#039;photoalbum/&amp;#039; . $template,&lt;br /&gt;
				&amp;#039;album_block&amp;#039;,&lt;br /&gt;
				&amp;#039;album_block_empty&amp;#039;,&lt;br /&gt;
				&amp;#039;album_block_line&amp;#039;&lt;br /&gt;
			);&lt;br /&gt;
&lt;br /&gt;
			$photos = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
			$photos-&amp;gt;types(&amp;#039;hierarchy-type&amp;#039;)-&amp;gt;name(&amp;#039;photoalbum&amp;#039;, &amp;#039;photo&amp;#039;);&lt;br /&gt;
			// Сортировка			&lt;br /&gt;
			switch ($sort) {&lt;br /&gt;
				case &amp;#039;asc&amp;#039;:&lt;br /&gt;
					$photos-&amp;gt;order(&amp;#039;ord&amp;#039;)-&amp;gt;asc();&lt;br /&gt;
					break;&lt;br /&gt;
				case &amp;#039;desc&amp;#039;:&lt;br /&gt;
					$photos-&amp;gt;order(&amp;#039;ord&amp;#039;)-&amp;gt;desc();&lt;br /&gt;
					break;&lt;br /&gt;
				case &amp;#039;rand&amp;#039;:&lt;br /&gt;
					$$photos-&amp;gt;order(&amp;#039;rand&amp;#039;);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ($path != KEYWORD_GRAB_ALL) {&lt;br /&gt;
				$photos-&amp;gt;where(&amp;#039;hierarchy&amp;#039;)-&amp;gt;page($element_id);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$photos-&amp;gt;option(&amp;#039;load-all-props&amp;#039;)-&amp;gt;value(true);&lt;br /&gt;
			$this-&amp;gt;module-&amp;gt;setAlbumListLimit($photos, $curr_page, $per_page, $ignore_paging);&lt;br /&gt;
			$result = $photos-&amp;gt;result();&lt;br /&gt;
			$total = $photos-&amp;gt;length();&lt;br /&gt;
&lt;br /&gt;
			$block_arr = [];&lt;br /&gt;
			$block_arr[&amp;#039;id&amp;#039;] = $block_arr[&amp;#039;void:album_id&amp;#039;] = $element_id;&lt;br /&gt;
&lt;br /&gt;
			if ($total == 0) {&lt;br /&gt;
				return photoalbum::parseTemplate($template_block_empty, $block_arr, $element_id);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$lines = [];&lt;br /&gt;
			$umiLinksHelper = umiLinksHelper::getInstance();&lt;br /&gt;
&lt;br /&gt;
			foreach ($result as $photo) {&lt;br /&gt;
				$line_arr = [];&lt;br /&gt;
&lt;br /&gt;
				if (!$photo instanceof iUmiHierarchyElement) {&lt;br /&gt;
					continue;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				$photo_element_id = $photo-&amp;gt;getId();&lt;br /&gt;
				$line_arr[&amp;#039;attribute:id&amp;#039;] = $photo_element_id;&lt;br /&gt;
				$line_arr[&amp;#039;attribute:link&amp;#039;] = $umiLinksHelper-&amp;gt;getLinkByParts($photo);&lt;br /&gt;
				$line_arr[&amp;#039;xlink:href&amp;#039;] = &amp;#039;upage://&amp;#039; . $photo_element_id;&lt;br /&gt;
				$line_arr[&amp;#039;node:name&amp;#039;] = $photo-&amp;gt;getName();&lt;br /&gt;
&lt;br /&gt;
				photoalbum::pushEditable(&amp;#039;photoalbum&amp;#039;, &amp;#039;photo&amp;#039;, $photo_element_id);&lt;br /&gt;
				$lines[] = photoalbum::parseTemplate($template_line, $line_arr, $photo_element_id);&lt;br /&gt;
			}&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;
			$block_arr[&amp;#039;total&amp;#039;] = $total;&lt;br /&gt;
			$block_arr[&amp;#039;per_page&amp;#039;] = $per_page;&lt;br /&gt;
			$block_arr[&amp;#039;link&amp;#039;] = umiHierarchy::getInstance()-&amp;gt;getPathById($element_id);&lt;br /&gt;
			return photoalbum::parseTemplate($template_block, $block_arr, $element_id);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь в макросе album можно использовать пятый, необязательный параметр, устанавливая его в значение &amp;#039;asc&amp;#039;, &amp;#039;desc&amp;#039; или &amp;#039;rand&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Вызов в PHP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$albums = $this-&amp;gt;macros(&amp;#039;photoalbum&amp;#039;, &amp;#039;album&amp;#039;, [$page-&amp;gt;getId(),null,null,null,&amp;#039;desc&amp;#039;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вызов в XSLT:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:variable name=&amp;quot;albums&amp;quot; select=&amp;quot;document(&amp;#039;udata://photoalbum/album/47////desc/&amp;#039;)/udata&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вызов в TPL: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
%photoalbum album(&amp;#039;47&amp;#039;,0,0,0,&amp;#039;desc&amp;#039;)%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]][[Категория:Модуль Фотогалереи]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D1%83%D1%82%D0%B5%D0%B9_%D0%B2_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5&amp;diff=9300</id>
		<title>Кастомизация маршрутизации путей в системе</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D1%81%D1%82%D0%BE%D0%BC%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D1%8F_%D0%BC%D0%B0%D1%80%D1%88%D1%80%D1%83%D1%82%D0%B8%D0%B7%D0%B0%D1%86%D0%B8%D0%B8_%D0%BF%D1%83%D1%82%D0%B5%D0%B9_%D0%B2_%D1%81%D0%B8%D1%81%D1%82%D0%B5%D0%BC%D0%B5&amp;diff=9300"/>
		<updated>2019-08-28T09:13:12Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Новая страница: «&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;  == Задача == Иногда появляется необходимость, что-бы по определ…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
Иногда появляется необходимость, что-бы по определенному пути открывалась определенная страница или вызывался определенный макрос.&lt;br /&gt;
&lt;br /&gt;
Например сделать чтобы по адресу site.ru/order/ открывалось &amp;quot;Оформление заказа в один клик&amp;quot; site.ru/emarket/purchasing_one_step/&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
Эту задачу можно решить при помощи кастомизации роутинга (маршрутизации) в системе. Для этого мы воспользуемся событием &amp;#039;routing&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Создать слушатель этого события можно в любом модуле, но лучше создавать его в рамках того модуля для которого необходимо выполнить маршрутизацию. &lt;br /&gt;
&lt;br /&gt;
Создадим слушатель в модуле Интернет-магазин (emarket), для этого в директории /classes/components/emarket/ добавим файл &amp;#039;&amp;#039;&amp;#039;custom_events.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;
	new umiEventListener(&amp;quot;routing&amp;quot;, &amp;quot;emarket&amp;quot;, &amp;quot;route&amp;quot;);&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В файл &amp;#039;&amp;#039;&amp;#039;customMacros.php&amp;#039;&amp;#039;&amp;#039; добавляем метод для обработки события и класс &amp;#039;&amp;#039;&amp;#039;FakeRouter&amp;#039;&amp;#039;&amp;#039; с методом &amp;#039;&amp;#039;&amp;#039;analyzePath&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;
	use UmiCms\Service;&lt;br /&gt;
	/**&lt;br /&gt;
	 * Класс пользовательских макросов&lt;br /&gt;
	 */&lt;br /&gt;
	class EmarketCustomMacros {&lt;br /&gt;
		/**&lt;br /&gt;
		 * @var emarket $module&lt;br /&gt;
		 */&lt;br /&gt;
		public $module;&lt;br /&gt;
 &lt;br /&gt;
		public function route(iUmiEventPoint $eventPoint) {&lt;br /&gt;
			if (Service::Request()-&amp;gt;isAdmin() || $eventPoint-&amp;gt;getMode() !== &amp;#039;before&amp;#039;) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
 &lt;br /&gt;
			$request = Service::Request();&lt;br /&gt;
			$path = $request-&amp;gt;getPath();&lt;br /&gt;
 &lt;br /&gt;
			if ($path == &amp;#039;order&amp;#039;) {&lt;br /&gt;
				$router = new FakeRouter(&amp;#039;emarket&amp;#039;,&amp;#039;purchasing_one_step&amp;#039;);&lt;br /&gt;
				$eventPoint-&amp;gt;setParam(&amp;#039;router&amp;#039;, $router);&lt;br /&gt;
			}&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
 &lt;br /&gt;
	class FakeRouter {&lt;br /&gt;
 &lt;br /&gt;
		private $module;&lt;br /&gt;
 &lt;br /&gt;
		private $method;&lt;br /&gt;
 &lt;br /&gt;
		private $elementId;&lt;br /&gt;
 &lt;br /&gt;
		function __construct($module, $method, $elementId = false) {&lt;br /&gt;
			$this-&amp;gt;module = $module;&lt;br /&gt;
			$this-&amp;gt;method = $method;&lt;br /&gt;
			$this-&amp;gt;elementId = $elementId;			&lt;br /&gt;
		}&lt;br /&gt;
 &lt;br /&gt;
		public function analyzePath() {&lt;br /&gt;
			$cmsController = cmsController::getInstance();&lt;br /&gt;
			$cmsController-&amp;gt;setCurrentModule($this-&amp;gt;module);&lt;br /&gt;
			$cmsController-&amp;gt;setCurrentMethod($this-&amp;gt;method);&lt;br /&gt;
			$cmsController-&amp;gt;setCurrentElementId($this-&amp;gt;elementId);		&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь при переходе по адресу site.ru/order/ будет открываться страница &amp;quot;Оформление заказа в один клик&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
[[category:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_Cron.php_%D0%B8_%D0%B4%D0%BB%D1%8F_%D1%87%D0%B5%D0%B3%D0%BE_%D0%BE%D0%BD_%D0%BD%D1%83%D0%B6%D0%B5%D0%BD&amp;diff=9276</id>
		<title>Что такое Cron.php и для чего он нужен</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_Cron.php_%D0%B8_%D0%B4%D0%BB%D1%8F_%D1%87%D0%B5%D0%B3%D0%BE_%D0%BE%D0%BD_%D0%BD%D1%83%D0%B6%D0%B5%D0%BD&amp;diff=9276"/>
		<updated>2019-06-28T10:02:16Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Vitaliks переименовал страницу Что такое Cron.php и для чего он нужен? в Что такое Cron.php и для чего он нужен&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Что такое Сron.php? ==&lt;br /&gt;
&lt;br /&gt;
Сron.php - это скрипт позволяющий настроить выполнение определенных действий в системе по расписанию без участия администратора сайта.&lt;br /&gt;
&lt;br /&gt;
== Настройка выполнения Cron.php ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм настройки выполнения Cron.php зависит от используемого хостинга. &lt;br /&gt;
&lt;br /&gt;
Обычно в админке хостинга есть раздел с названием «Планировщик заданий» или «Управление Crontab» в котором и выполняется настройка.&lt;br /&gt;
&lt;br /&gt;
Запускать Cron.php можно командой&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;bash&amp;#039;&amp;gt;&lt;br /&gt;
wget http://ваш_сайт/cron.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
но иногда на хостинге есть и другие варианты запуска, поэтому лучше ознакомиться с документацией хостинга по данному вопросу либо уточнить его в техподдержке хостинга.&lt;br /&gt;
&lt;br /&gt;
О различных вариантах запуска Cron.php описано в нашей документации:&lt;br /&gt;
&lt;br /&gt;
http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/&lt;br /&gt;
&lt;br /&gt;
== Системные функции Сron.php в модулях ==&lt;br /&gt;
&lt;br /&gt;
Тут перечислены системные модули и функции в них которые могут выполняться при запуске Cron.php.&lt;br /&gt;
&lt;br /&gt;
При необходимости вы можете добавить свои функции, которые будут выполняться по расписанию, например:&lt;br /&gt;
&lt;br /&gt;
[http://wiki.umisoft.ru/%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%22%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%22_%D0%BF%D0%BE_cron Очистка справочника &amp;quot;Незарегистрированный покупатель&amp;quot; по cron]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.umisoft.ru/Автоматическая_подготовка_экспорта_в_формат_YML_с_помощью_cron Автоматическая подготовка экспорта в формат YML с помощью cron]&lt;br /&gt;
&lt;br /&gt;
=== Интеренет-магазин (emarket) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronSyncCurrency&amp;#039;&amp;#039;&amp;#039; - Синхронизирует курсы валют с цб&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronCheckExpiredCustomers&amp;#039;&amp;#039;&amp;#039; - Удаляют &amp;quot;просроченные&amp;quot; объекты  незарегистрированных покупателей&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronCheckExpiredOrders&amp;#039;&amp;#039;&amp;#039; - Удаляют &amp;quot;просроченные&amp;quot; объекты незавершенных заказов&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronCheckExpiredCustomersOneClick&amp;#039;&amp;#039;&amp;#039; - Удаляют &amp;quot;просроченные&amp;quot; объекты незавершенных заказов в 1 клик&lt;br /&gt;
&lt;br /&gt;
=== Резервирование (backup) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronCleanChangesHistory&amp;#039;&amp;#039;&amp;#039; - Очищает историю изменений модуля &amp;quot;Резервирование&amp;quot; в соответствии с настройками времени хранения событий&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация (config) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;maintainDataBaseCache&amp;#039;&amp;#039;&amp;#039; - Выполняет операции по обслуживанию кеширования через базу данных&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;runGarbageCollector&amp;#039;&amp;#039;&amp;#039; - Запускает системный сборщик мусора(в частности устаревшие файлы файлового кэша и мусор в БД);&lt;br /&gt;
&lt;br /&gt;
=== Структура (content) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;cronSendNotification&amp;#039;&amp;#039;&amp;#039; - Проверяет необходимость послать уведомление об окончании срока публикации, и, соответственно, посылка таковых;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;cronUnpublishPage&amp;#039;&amp;#039;&amp;#039; - Проверяет окончание срока публикации и деактивация таких объектов;&lt;br /&gt;
&lt;br /&gt;
=== Новости (news) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;feedsImportListener&amp;#039;&amp;#039;&amp;#039; - Импортирует все фиды RSS.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;cronActivateNews&amp;#039;&amp;#039;&amp;#039; - Активирует новости с подходящей датой публикации&lt;br /&gt;
&lt;br /&gt;
=== Каталог (catalog) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;reIndexOnCron&amp;#039;&amp;#039;&amp;#039; - Выполняет переиндексацию фильтров разделов каталога&lt;br /&gt;
&lt;br /&gt;
=== Рассылки (dispatches) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onAutosendDispathes&amp;#039;&amp;#039;&amp;#039; - Выполняет отправку запланированных рассылок&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_Cron.php_%D0%B8_%D0%B4%D0%BB%D1%8F_%D1%87%D0%B5%D0%B3%D0%BE_%D0%BE%D0%BD_%D0%BD%D1%83%D0%B6%D0%B5%D0%BD%3F&amp;diff=9277</id>
		<title>Что такое Cron.php и для чего он нужен?</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_Cron.php_%D0%B8_%D0%B4%D0%BB%D1%8F_%D1%87%D0%B5%D0%B3%D0%BE_%D0%BE%D0%BD_%D0%BD%D1%83%D0%B6%D0%B5%D0%BD%3F&amp;diff=9277"/>
		<updated>2019-06-28T10:02:16Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Vitaliks переименовал страницу Что такое Cron.php и для чего он нужен? в Что такое Cron.php и для чего он нужен&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;#перенаправление [[Что такое Cron.php и для чего он нужен]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_Cron.php_%D0%B8_%D0%B4%D0%BB%D1%8F_%D1%87%D0%B5%D0%B3%D0%BE_%D0%BE%D0%BD_%D0%BD%D1%83%D0%B6%D0%B5%D0%BD&amp;diff=9275</id>
		<title>Что такое Cron.php и для чего он нужен</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A7%D1%82%D0%BE_%D1%82%D0%B0%D0%BA%D0%BE%D0%B5_Cron.php_%D0%B8_%D0%B4%D0%BB%D1%8F_%D1%87%D0%B5%D0%B3%D0%BE_%D0%BE%D0%BD_%D0%BD%D1%83%D0%B6%D0%B5%D0%BD&amp;diff=9275"/>
		<updated>2019-06-28T09:59:55Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Об&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Что такое Сron.php? ==&lt;br /&gt;
&lt;br /&gt;
Сron.php - это скрипт позволяющий настроить выполнение определенных действий в системе по расписанию без участия администратора сайта.&lt;br /&gt;
&lt;br /&gt;
== Настройка выполнения Cron.php ==&lt;br /&gt;
&lt;br /&gt;
Алгоритм настройки выполнения Cron.php зависит от используемого хостинга. &lt;br /&gt;
&lt;br /&gt;
Обычно в админке хостинга есть раздел с названием «Планировщик заданий» или «Управление Crontab» в котором и выполняется настройка.&lt;br /&gt;
&lt;br /&gt;
Запускать Cron.php можно командой&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;#039;bash&amp;#039;&amp;gt;&lt;br /&gt;
wget http://ваш_сайт/cron.php&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
но иногда на хостинге есть и другие варианты запуска, поэтому лучше ознакомиться с документацией хостинга по данному вопросу либо уточнить его в техподдержке хостинга.&lt;br /&gt;
&lt;br /&gt;
О различных вариантах запуска Cron.php описано в нашей документации:&lt;br /&gt;
&lt;br /&gt;
http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/&lt;br /&gt;
&lt;br /&gt;
== Системные функции Сron.php в модулях ==&lt;br /&gt;
&lt;br /&gt;
Тут перечислены системные модули и функции в них которые могут выполняться при запуске Cron.php.&lt;br /&gt;
&lt;br /&gt;
При необходимости вы можете добавить свои функции, которые будут выполняться по расписанию, например:&lt;br /&gt;
&lt;br /&gt;
[http://wiki.umisoft.ru/%D0%9E%D1%87%D0%B8%D1%81%D1%82%D0%BA%D0%B0_%D1%81%D0%BF%D1%80%D0%B0%D0%B2%D0%BE%D1%87%D0%BD%D0%B8%D0%BA%D0%B0_%22%D0%9D%D0%B5%D0%B7%D0%B0%D1%80%D0%B5%D0%B3%D0%B8%D1%81%D1%82%D1%80%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BF%D0%BE%D0%BA%D1%83%D0%BF%D0%B0%D1%82%D0%B5%D0%BB%D1%8C%22_%D0%BF%D0%BE_cron Очистка справочника &amp;quot;Незарегистрированный покупатель&amp;quot; по cron]&lt;br /&gt;
&lt;br /&gt;
[http://wiki.umisoft.ru/Автоматическая_подготовка_экспорта_в_формат_YML_с_помощью_cron Автоматическая подготовка экспорта в формат YML с помощью cron]&lt;br /&gt;
&lt;br /&gt;
=== Интеренет-магазин (emarket) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronSyncCurrency&amp;#039;&amp;#039;&amp;#039; - Синхронизирует курсы валют с цб&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronCheckExpiredCustomers&amp;#039;&amp;#039;&amp;#039; - Удаляют &amp;quot;просроченные&amp;quot; объекты  незарегистрированных покупателей&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronCheckExpiredOrders&amp;#039;&amp;#039;&amp;#039; - Удаляют &amp;quot;просроченные&amp;quot; объекты незавершенных заказов&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronCheckExpiredCustomersOneClick&amp;#039;&amp;#039;&amp;#039; - Удаляют &amp;quot;просроченные&amp;quot; объекты незавершенных заказов в 1 клик&lt;br /&gt;
&lt;br /&gt;
=== Резервирование (backup) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onCronCleanChangesHistory&amp;#039;&amp;#039;&amp;#039; - Очищает историю изменений модуля &amp;quot;Резервирование&amp;quot; в соответствии с настройками времени хранения событий&lt;br /&gt;
&lt;br /&gt;
=== Конфигурация (config) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;maintainDataBaseCache&amp;#039;&amp;#039;&amp;#039; - Выполняет операции по обслуживанию кеширования через базу данных&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;runGarbageCollector&amp;#039;&amp;#039;&amp;#039; - Запускает системный сборщик мусора(в частности устаревшие файлы файлового кэша и мусор в БД);&lt;br /&gt;
&lt;br /&gt;
=== Структура (content) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;cronSendNotification&amp;#039;&amp;#039;&amp;#039; - Проверяет необходимость послать уведомление об окончании срока публикации, и, соответственно, посылка таковых;&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;cronUnpublishPage&amp;#039;&amp;#039;&amp;#039; - Проверяет окончание срока публикации и деактивация таких объектов;&lt;br /&gt;
&lt;br /&gt;
=== Новости (news) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;feedsImportListener&amp;#039;&amp;#039;&amp;#039; - Импортирует все фиды RSS.&lt;br /&gt;
&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;cronActivateNews&amp;#039;&amp;#039;&amp;#039; - Активирует новости с подходящей датой публикации&lt;br /&gt;
&lt;br /&gt;
=== Каталог (catalog) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;reIndexOnCron&amp;#039;&amp;#039;&amp;#039; - Выполняет переиндексацию фильтров разделов каталога&lt;br /&gt;
&lt;br /&gt;
=== Рассылки (dispatches) ===&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;onAutosendDispathes&amp;#039;&amp;#039;&amp;#039; - Выполняет отправку запланированных рассылок&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0_%D0%BA_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0%D0%BC_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9&amp;diff=9272</id>
		<title>Получение доступа к методам модулей</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%BB%D1%83%D1%87%D0%B5%D0%BD%D0%B8%D0%B5_%D0%B4%D0%BE%D1%81%D1%82%D1%83%D0%BF%D0%B0_%D0%BA_%D0%BC%D0%B5%D1%82%D0%BE%D0%B4%D0%B0%D0%BC_%D0%BC%D0%BE%D0%B4%D1%83%D0%BB%D0%B5%D0%B9&amp;diff=9272"/>
		<updated>2019-06-28T08:13:06Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Проверена актуальность&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Написание кастомных макросов]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Для того, чтобы получить доступ к методам какого либо модуля, необходимо получить&lt;br /&gt;
экземпляр этого модуля. Допустим, если необходимо в кастомном методе выполнить метод&lt;br /&gt;
basket, модуля emarket, то берем экземпляр этого модуля и выполняем нужный  метод:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$ini = cmsController::getInstance()-&amp;gt;getModule(&amp;#039;emarket&amp;#039;);&lt;br /&gt;
$ini-&amp;gt;basket(&amp;#039;put&amp;#039;, &amp;#039;element&amp;#039;, 45);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Аналогичный принцип и для всех остальных модулей.&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_XSLT-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0%D1%85&amp;diff=9265</id>
		<title>Использование серверных переменных в XSLT-шаблонах</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%98%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80%D0%BD%D1%8B%D1%85_%D0%BF%D0%B5%D1%80%D0%B5%D0%BC%D0%B5%D0%BD%D0%BD%D1%8B%D1%85_%D0%B2_XSLT-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0%D1%85&amp;diff=9265"/>
		<updated>2019-06-26T12:34:50Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Проверена актуальность&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Верстка в XSLT]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
В UMI.CMS предусмотрена возможность использования серверных переменных (массив $_SERVER) в XSLT-шаблонах. Для этого серверные переменные необходимо инициализировать как глобальные параметры в шаблоне при помощи инструкции &amp;lt;xsl:param&amp;gt; (после инструкции &amp;lt;xsl:output&amp;gt;, на одном уровне c &amp;lt;xsl:template&amp;gt;).&lt;br /&gt;
&lt;br /&gt;
Имя параметра должно начинаться с &amp;quot;_&amp;quot; (нижнее подчеркивание), например: &amp;#039;&amp;#039;&amp;#039;_http_user_agent&amp;#039;&amp;#039;&amp;#039;. После этого параметр можно использовать в шаблоне указав &amp;#039;&amp;#039;&amp;#039;$_http_user_agent&amp;#039;&amp;#039;&amp;#039;.&lt;br /&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;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;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;&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:output method=&amp;quot;html&amp;quot; encoding=&amp;quot;UTF-8&amp;quot; indent=&amp;quot;yes&amp;quot;/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_request_time&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_query_string&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_http_accept&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_http_accept_charset&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_http_accept_encoding&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_http_accept_language&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_http_host&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_http_referer&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_http_user_agent&amp;quot; /&amp;gt;&lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_remote_addr&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_remote_host&amp;quot; /&amp;gt; &lt;br /&gt;
 &amp;lt;xsl:param name=&amp;quot;_request_uri&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;!-- main template --&amp;gt;&lt;br /&gt;
&lt;br /&gt;
 &amp;lt;xsl:template match=&amp;quot;/&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
  &amp;lt;html&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;head&amp;gt;&amp;lt;/head&amp;gt;&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;body&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
    &amp;lt;ul&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_request_time:         &amp;lt;xsl:value-of select=&amp;quot;$_request_time&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_query_string:         &amp;lt;xsl:value-of select=&amp;quot;$_query_string&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_http_accept: 	    &amp;lt;xsl:value-of select=&amp;quot;$_http_accept&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_http_accept_charset:  &amp;lt;xsl:value-of select=&amp;quot;$_http_accept_charset&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_http_accept_encoding: &amp;lt;xsl:value-of select=&amp;quot;$_http_accept_encoding&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_http_accept_language: &amp;lt;xsl:value-of select=&amp;quot;$_http_accept_language&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_http_host:	    &amp;lt;xsl:value-of select=&amp;quot;$_http_host&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_http_referer: 	    &amp;lt;xsl:value-of select=&amp;quot;$_http_referer&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_http_user_agent: 	    &amp;lt;xsl:value-of select=&amp;quot;$_http_user_agent&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_remote_addr: 	    &amp;lt;xsl:value-of select=&amp;quot;$_remote_addr&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_remote_host: 	    &amp;lt;xsl:value-of select=&amp;quot;$_remote_host&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
	&amp;lt;li&amp;gt;$_request_uri: 	    &amp;lt;xsl:value-of select=&amp;quot;$_request_uri&amp;quot; /&amp;gt;&amp;lt;/li&amp;gt;&lt;br /&gt;
    &amp;lt;/ul&amp;gt;&lt;br /&gt;
&lt;br /&gt;
    &amp;lt;p&amp;gt;&lt;br /&gt;
      &amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:when test=&amp;quot;contains($_http_user_agent, &amp;#039;Firefox&amp;#039;)&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:text&amp;gt;You are using Firefox.&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:when test=&amp;quot;contains($_http_user_agent, &amp;#039;Chrome&amp;#039;)&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:text&amp;gt;You are using Chrome.&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:when test=&amp;quot;contains($_http_user_agent, &amp;#039;MSIE&amp;#039;)&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:text&amp;gt;You are using MSIE.&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:when test=&amp;quot;contains($_http_user_agent, &amp;#039;Opera&amp;#039;)&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:text&amp;gt;You are using Opera.&amp;lt;/xsl:text&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
	&amp;lt;xsl:when test=&amp;quot;contains($_http_user_agent, &amp;#039;Safari&amp;#039;)&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:text&amp;gt;You are using Safari.&amp;lt;/xsl:text&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;xsl:text&amp;gt;Browser was not identified.&amp;lt;/xsl:text&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;/p&amp;gt;	&lt;br /&gt;
&lt;br /&gt;
   &amp;lt;/body&amp;gt;&lt;br /&gt;
  &lt;br /&gt;
  &amp;lt;/html&amp;gt;&lt;br /&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;
То страница, выведенная по этому шаблону в браузере Firefox, будет выглядеть примерно следующим образом:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;text&amp;quot;&amp;gt;&lt;br /&gt;
    * $_request_time: 1283867773&lt;br /&gt;
    * $_query_string: path=about/&lt;br /&gt;
    * $_http_accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8&lt;br /&gt;
    * $_http_accept_charset: windows-1251,utf-8;q=0.7,*;q=0.7&lt;br /&gt;
    * $_http_accept_encoding: gzip,deflate&lt;br /&gt;
    * $_http_accept_language: ru,en-us;q=0.7,en;q=0.3&lt;br /&gt;
    * $_http_host: localhost&lt;br /&gt;
    * $_http_referer:&lt;br /&gt;
    * $_http_user_agent: Mozilla/5.0 (Windows; U; Windows NT 6.0; ru; rv:1.9.2.8) Gecko/20100722 Firefox/3.6.8&lt;br /&gt;
    * $_remote_addr: 127.0.0.1&lt;br /&gt;
    * $_remote_host:&lt;br /&gt;
    * $_request_uri: /about/&lt;br /&gt;
&lt;br /&gt;
You are using Firefox.&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RBS.zip&amp;diff=9244</id>
		<title>Файл:RBS.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RBS.zip&amp;diff=9244"/>
		<updated>2019-06-11T08:54:45Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Vitaliks загрузил новую версию Файл:RBS.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RBS.zip&amp;diff=9243</id>
		<title>Файл:RBS.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RBS.zip&amp;diff=9243"/>
		<updated>2019-06-05T14:38:12Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Vitaliks загрузил новую версию Файл:RBS.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RBS.zip&amp;diff=9242</id>
		<title>Файл:RBS.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RBS.zip&amp;diff=9242"/>
		<updated>2019-06-04T11:49:46Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Vitaliks загрузил новую версию Файл:RBS.zip&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%B0_%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D1%8B_%D0%A1%D0%B1%D0%B5%D1%80%D0%B1%D0%B0%D0%BD%D0%BA_%D1%8D%D0%BA%D0%B2%D0%B0%D0%B9%D1%80%D0%B8%D0%BD%D0%B3&amp;diff=9241</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%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%B0_%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D1%8B_%D0%A1%D0%B1%D0%B5%D1%80%D0%B1%D0%B0%D0%BD%D0%BA_%D1%8D%D0%BA%D0%B2%D0%B0%D0%B9%D1%80%D0%B8%D0%BD%D0%B3&amp;diff=9241"/>
		<updated>2019-06-04T11:47:55Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Добавить способ оплаты Сбербанк эквайринг.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
=== Установка способа оплаты ===&lt;br /&gt;
&lt;br /&gt;
Для установки способа оплаты Сбербанк эквайринг нужно скачать [[Файл:RBS.zip]] со следующими файлами: &lt;br /&gt;
&lt;br /&gt;
# Директория classes - содержит классы и методы необходимые для работы способа оплаты. &amp;lt;br&amp;gt; Eе нужно скопировать в корень сайта и проверить, что файл rbs.php появился в директории ~/classes/modules/emarket/classes/payment/systems/&lt;br /&gt;
# Директория templates - содержит шаблон для отображения способа оплаты на сайте. &amp;lt;br&amp;gt; Папку &amp;#039;php&amp;#039; необходимо скопировать в директорию с шаблоном:  ~/templates/{Ваш шаблон}/. В директории ~/templates/{Ваш шаблон}/php/emarket/payment/ должен появиться файл rbs.phtml.&lt;br /&gt;
# rbspayment_install.php - установщик, который создает тип данных способа оплаты RBS Payment со всеми необходимыми полями. &amp;lt;br&amp;gt; Этот файл нужно разместить в корневую папку сайта и запустить его &amp;lt;nowiki&amp;gt;http://{Ваш сайт}/rbspayment_install.php&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка способа оплаты ===&lt;br /&gt;
&lt;br /&gt;
Для добавления способа оплаты нужно в модуле Интернет-магазин на вкладке Оплата нажать кнопку Добавить способ и выбрать &amp;quot;RBS Payment&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для работы оплаты необходимо заполнить поля:&lt;br /&gt;
&lt;br /&gt;
# Логин - Логин магазина, полученный при подключении&lt;br /&gt;
# Пароль - Пароль магазина, полученный при подключении&lt;br /&gt;
&lt;br /&gt;
Необязательные поля:&lt;br /&gt;
&lt;br /&gt;
# Двух-стадийность платежа - использование дополнительного подтверждения платежеспособности карты с блокированием средств на счету клиента&lt;br /&gt;
# Тестовый режим - использование тестового платежного шлюза&lt;br /&gt;
# Передавать данные для печати чека - передавать данные для печати чека по ФЗ-54&lt;br /&gt;
# Вести журнал - в файл rbs_payment.log в корне сайта будет записываться лог ответов от платежного шлюза&lt;br /&gt;
&lt;br /&gt;
[[Файл:sbr.png]]&lt;br /&gt;
&lt;br /&gt;
=== Итоги ===&lt;br /&gt;
&lt;br /&gt;
Мы установили и настроили способ оплаты Сбербанк эквайринг и теперь он доступен во время оформления заказа при выборе способа оплаты:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sbs_pay.png]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%B0_%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D1%8B_%D0%A1%D0%B1%D0%B5%D1%80%D0%B1%D0%B0%D0%BD%D0%BA_%D1%8D%D0%BA%D0%B2%D0%B0%D0%B9%D1%80%D0%B8%D0%BD%D0%B3&amp;diff=9240</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%D0%BF%D0%BE%D1%81%D0%BE%D0%B1%D0%B0_%D0%BE%D0%BF%D0%BB%D0%B0%D1%82%D1%8B_%D0%A1%D0%B1%D0%B5%D1%80%D0%B1%D0%B0%D0%BD%D0%BA_%D1%8D%D0%BA%D0%B2%D0%B0%D0%B9%D1%80%D0%B8%D0%BD%D0%B3&amp;diff=9240"/>
		<updated>2019-06-04T11:47:35Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Новая страница: «&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20.&amp;#039;&amp;#039;&amp;#039;  == Задача ==  Добавить способ оплаты Сбербанк эквайринг.  == Реше…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Добавить способ оплаты Сбербанк эквайринг.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
=== Установка способа оплаты ===&lt;br /&gt;
&lt;br /&gt;
Для установки способа оплаты Сбербанк эквайринг нужно скачать [[Файл:RBS.zip]] со следующими файлами: &lt;br /&gt;
&lt;br /&gt;
# Директория classes - содержит классы и методы необходимые для работы способа оплаты. &amp;lt;br&amp;gt; Eе нужно скопировать в корень сайта и проверить, что файл rbs.php появился в директории ~/classes/modules/emarket/classes/payment/systems/&lt;br /&gt;
# Директория templates - содержит шаблон для отображения способа оплаты на сайте. &amp;lt;br&amp;gt; Папку &amp;#039;php&amp;#039; необходимо скопировать в директорию с шаблоном:  ~/templates/{Ваш шаблон}/. В директории ~/templates/{Ваш шаблон}/php/emarket/payment/ должен появиться файл rbs.phtml.&lt;br /&gt;
# rbspayment_install.php - установщик, который создает тип данных способа оплаты RBS Payment со всеми необходимыми полями. &amp;lt;br&amp;gt; Этот файл нужно разместить в корневую папку сайта и запустить его &amp;lt;nowiki&amp;gt;http://{Ваш сайт}/rbspayment_install.php&amp;lt;/nowiki&amp;gt;&lt;br /&gt;
&lt;br /&gt;
=== Настройка способа оплаты ===&lt;br /&gt;
&lt;br /&gt;
Для добавления способа оплаты нужно в модуле Интернет-магазин на вкладке Оплата нажать кнопку Добавить способ и выбрать &amp;quot;RBS Payment&amp;quot;.&lt;br /&gt;
&lt;br /&gt;
Для работы оплаты необходимо заполнить поля:&lt;br /&gt;
&lt;br /&gt;
# Логин - Логин магазина, полученный при подключении&lt;br /&gt;
# Пароль - Пароль магазина, полученный при подключении&lt;br /&gt;
&lt;br /&gt;
Необязательные поля:&lt;br /&gt;
&lt;br /&gt;
# Двух-стадийность платежа - использование дополнительного подтверждения платежеспособности карты с блокированием средств на счету клиента&lt;br /&gt;
# Тестовый режим - использование тестового платежного шлюза&lt;br /&gt;
# Передавать данные для печати чека - передавать данные для печати чека по ФЗ-54&lt;br /&gt;
# Вести журнал - в файл rbs_payment.log в корне сайта будет записываться лог ответов от платежного шлюза&lt;br /&gt;
&lt;br /&gt;
[[Файл:sbr.png]]&lt;br /&gt;
&lt;br /&gt;
=== Итог ===&lt;br /&gt;
&lt;br /&gt;
Мы установили и настроили способ оплаты Сбербанк эквайринг и теперь он доступен во время оформления заказа при выборе способа оплаты:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Sbs_pay.png]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Sbs_pay.png&amp;diff=9239</id>
		<title>Файл:Sbs pay.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Sbs_pay.png&amp;diff=9239"/>
		<updated>2019-06-04T11:46:22Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Sbr.png&amp;diff=9238</id>
		<title>Файл:Sbr.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Sbr.png&amp;diff=9238"/>
		<updated>2019-06-04T11:10:52Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RBS.zip&amp;diff=9237</id>
		<title>Файл:RBS.zip</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:RBS.zip&amp;diff=9237"/>
		<updated>2019-06-04T10:25:24Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%BE%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D1%83%D1%8E_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E&amp;diff=9236</id>
		<title>Автоматическое копирование фотографии в другую языковую версию</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%BE%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D1%83%D1%8E_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E&amp;diff=9236"/>
		<updated>2019-05-31T12:06:41Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
При создании новой фотографии для фотогалереи копировать эту фотографию в другую языковую версию&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Если на сайте несколько языковых версий, то добавлять материалы, не содержащие текста, такие как фотографии можно одинаковые во все языковые версии. Воспользуемся для этого событийной моделью UMI.CMS.&lt;br /&gt;
Для того, чтобы при добавлении фотографии, создавалась её виртуальная копия в другой языковой версии, напишем обработчик события systemCreateElement.&lt;br /&gt;
&lt;br /&gt;
1. Для добавления обработчика события нужно создать файл ~/classes/components/content/custom_events.php и в него добавить сдедующий код::&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;#039;systemCreateElement&amp;#039;, &amp;#039;content&amp;#039;, &amp;#039;copy_on_other_lang&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Сам обработчик нужно поместить в файл ~/classes/components/content/customMacros.php. Код обработчика будет примерно следующий:&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;
	/** Класс пользовательских макросов */&lt;br /&gt;
	class ContentCustomMacros {&lt;br /&gt;
&lt;br /&gt;
		/** @var content $module */&lt;br /&gt;
		public $module;&lt;br /&gt;
		&lt;br /&gt;
		public function copy_on_other_lang(iUmiEventPoint $oEventPoint) {&lt;br /&gt;
			if ($oEventPoint-&amp;gt;getMode() === &amp;quot;after&amp;quot;) {&lt;br /&gt;
				$object = $oEventPoint-&amp;gt;getRef(&amp;quot;element&amp;quot;);						&lt;br /&gt;
				$module = $object-&amp;gt;getModule();&lt;br /&gt;
				//Если модуль photoalbum, выполняем копирование&lt;br /&gt;
				if ($module == &amp;#039;photoalbum&amp;#039;) {&lt;br /&gt;
					$hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
					$parentId = $object-&amp;gt;getParentId();	&lt;br /&gt;
					$newPhoto = $hierarchy-&amp;gt;copyElement($object-&amp;gt;id, $parentId);&lt;br /&gt;
					$hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
					$photo = $hierarchy-&amp;gt;getElement($newPhoto);&lt;br /&gt;
					$photo-&amp;gt;setLangId(2);&lt;br /&gt;
					$hierarchy-&amp;gt;moveFirst($newPhoto, 343);&lt;br /&gt;
					$photo-&amp;gt;commit();&lt;br /&gt;
				}&lt;br /&gt;
				return true;&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;
в данном случае, при добавлении фотографии будет создана её виртуальная копия в языковой версии с id 2 в фотогалерею с id 343. Если требуется производить копирование ещё в несколько языковых версий, следует повторить для каждой языковой версии участок кода&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$newPhoto = $hierarchy-&amp;gt;copyElement($object-&amp;gt;id, $parentId);&lt;br /&gt;
	$hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
	$photo = $hierarchy-&amp;gt;getElement($newPhoto);&lt;br /&gt;
	$photo-&amp;gt;setLangId(/*id_языковой_версии*/);&lt;br /&gt;
	$hierarchy-&amp;gt;moveFirst($newPhoto, /*id_фотогалереи_в_другой_языковой_версии*/);&lt;br /&gt;
	$photo-&amp;gt;commit();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
указывая необходимые id языковой версии и фотогалереи в ней. Если требуется копирование страницы, а не создание виртуальной копии, то в обработчике нужно заменить copyElement на cloneElement.&lt;br /&gt;
&lt;br /&gt;
3. Для работы обработчика, необходимо добавить в файл ~/classes/components/content/permissions.custom.php права на этот кастомный метод:&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;sitetree&amp;#039; =&amp;gt; Array(&amp;#039;copy_on_other_lang&amp;#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь при создании нового изображения в фотоальбоме его виртуальная копия будет создана и на других языковых версиях.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Модуль Фотогалереи]][[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%BE%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D1%83%D1%8E_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E&amp;diff=9235</id>
		<title>Автоматическое копирование фотографии в другую языковую версию</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%BE%D0%B5_%D0%BA%D0%BE%D0%BF%D0%B8%D1%80%D0%BE%D0%B2%D0%B0%D0%BD%D0%B8%D0%B5_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B8_%D0%B2_%D0%B4%D1%80%D1%83%D0%B3%D1%83%D1%8E_%D1%8F%D0%B7%D1%8B%D0%BA%D0%BE%D0%B2%D1%83%D1%8E_%D0%B2%D0%B5%D1%80%D1%81%D0%B8%D1%8E&amp;diff=9235"/>
		<updated>2019-05-31T12:00:44Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
При создании новой фотографии для фотогалереи копировать эту фотографию в другую языковую версию&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Если на сайте несколько языковых версий, то добавлять материалы, не содержащие текста, такие как фотографии можно одинаковые во все языковые версии. Воспользуемся для этого событийной моделью UMI.CMS.&lt;br /&gt;
Для того, чтобы при добавлении фотографии, создавалась её виртуальная копия в другой языковой версии, напишем обработчик события systemCreateElement.&lt;br /&gt;
&lt;br /&gt;
1. Для добавления обработчика события нужно создать файл ~/classes/components/content/custom_events.php и в него добавить сдедующий код::&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;#039;systemCreateElement&amp;#039;, &amp;#039;content&amp;#039;, &amp;#039;copy_on_other_lang&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2. Сам обработчик нужно поместить в файл ~/classes/components/content/customMacros.php. Код обработчика будет примерно следующий:&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;
	/** Класс пользовательских макросов */&lt;br /&gt;
	class ContentCustomMacros {&lt;br /&gt;
&lt;br /&gt;
		/** @var content $module */&lt;br /&gt;
		public $module;&lt;br /&gt;
		&lt;br /&gt;
		public function copy_on_other_lang(iUmiEventPoint $oEventPoint) {&lt;br /&gt;
			if ($oEventPoint-&amp;gt;getMode() === &amp;quot;after&amp;quot;) {&lt;br /&gt;
				$object = $oEventPoint-&amp;gt;getRef(&amp;quot;element&amp;quot;);						&lt;br /&gt;
				$module = $object-&amp;gt;getModule();&lt;br /&gt;
				//Если модуль photoalbum, выполняем копирование&lt;br /&gt;
				if ($module == &amp;#039;photoalbum&amp;#039;) {&lt;br /&gt;
					$hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
					$parentId = $object-&amp;gt;getParentId();	&lt;br /&gt;
					$newPhoto = $hierarchy-&amp;gt;copyElement($object-&amp;gt;id, $parentId);&lt;br /&gt;
					$hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
					$photo = $hierarchy-&amp;gt;getElement($newPhoto);&lt;br /&gt;
					$photo-&amp;gt;setLangId(2);&lt;br /&gt;
					$hierarchy-&amp;gt;moveFirst($newPhoto, 343);&lt;br /&gt;
					$photo-&amp;gt;commit();&lt;br /&gt;
				}&lt;br /&gt;
				return true;&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;
в данном случае, при добавлении фотографии будет создана её виртуальная копия в языковой версии с id 2 в фотогалерею с id 343. Если требуется производить копирование ещё в несколько языковых версий, следует повторить для каждой языковой версии участок кода&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
	$newPhoto = $hierarchy-&amp;gt;copyElement($object-&amp;gt;id, $parentId);&lt;br /&gt;
	$hierarchy = umiHierarchy::getInstance();&lt;br /&gt;
	$photo = $hierarchy-&amp;gt;getElement($newPhoto);&lt;br /&gt;
	$photo-&amp;gt;setLangId(/*id_языковой_версии*/);&lt;br /&gt;
	$hierarchy-&amp;gt;moveFirst($newPhoto, /*id_фотогалереи_в_другой_языковой_версии*/);&lt;br /&gt;
	$photo-&amp;gt;commit();&lt;br /&gt;
?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
указывая необходимые id языковой версии и фотогалереи в ней. Если требуется копирование страницы, а не создание виртуальной копии, то в обработчике нужно заменить copyElement на cloneElement.&lt;br /&gt;
3. Для работы обработчика, необходимо добавить в файл ~/classes/components/content/permissions.custom.php права на этот кастомный метод:&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;sitetree&amp;#039; =&amp;gt; Array(&amp;#039;copy_on_other_lang&amp;#039;)&lt;br /&gt;
);&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь при создании нового изображения в фотоальбоме его виртуальная копия будет создана и на других языковых версиях.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Модуль Фотогалереи]][[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B2_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%BC_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B5&amp;diff=9233</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_%D1%84%D0%BE%D1%82%D0%BE%D0%B3%D1%80%D0%B0%D1%84%D0%B8%D0%B9_%D0%B2_%D0%BE%D0%B1%D1%80%D0%B0%D1%82%D0%BD%D0%BE%D0%BC_%D0%BF%D0%BE%D1%80%D1%8F%D0%B4%D0%BA%D0%B5&amp;diff=9233"/>
		<updated>2019-05-31T10:11:07Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Обновлено&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Выводить фотографии фотоальбома в обратном или случайном порядке. &lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Для реализации данной задачи необходимо переопределить макрос album из файла /classes/components/photoalbum/macros.php в файле /classes/components/photoalbum/customMacros.php добавив к нему возможность сортировки.&lt;br /&gt;
&lt;br /&gt;
1. Добавим к макросу album параметр $sort = &amp;#039;asc&amp;#039;, которым сможет принимать значения &amp;#039;asc&amp;#039; для сортировки по умолчанию, &amp;#039;desc&amp;#039; для вывода в обратном порядке, &amp;#039;rand&amp;#039; для вывода в случайном порядке.&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 album($path = false, $template = &amp;#039;default&amp;#039;, $limit = false, $ignore_paging = false, $sort = &amp;#039;asc&amp;#039;) {&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
2. Добавляем в макрос конструкцию switch case для вывода фотографий в соответствии с указанным способом сортировки:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$photos-&amp;gt;types(&amp;#039;hierarchy-type&amp;#039;)-&amp;gt;name(&amp;#039;photoalbum&amp;#039;, &amp;#039;photo&amp;#039;);&lt;br /&gt;
// Сортировка			&lt;br /&gt;
switch ($sort) {&lt;br /&gt;
	case &amp;#039;asc&amp;#039;:&lt;br /&gt;
		$photos-&amp;gt;order(&amp;#039;ord&amp;#039;)-&amp;gt;asc();&lt;br /&gt;
		break;&lt;br /&gt;
	case &amp;#039;desc&amp;#039;:&lt;br /&gt;
		$photos-&amp;gt;order(&amp;#039;ord&amp;#039;)-&amp;gt;desc();&lt;br /&gt;
		break;&lt;br /&gt;
	case &amp;#039;rand&amp;#039;:&lt;br /&gt;
		$$photos-&amp;gt;order(&amp;#039;rand&amp;#039;);&lt;br /&gt;
		break;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
3. В итоге код макроса в файле /classes/components/photoalbum/customMacros.php должен получиться такой:&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;
	/** Класс пользовательских макросов */&lt;br /&gt;
	class PhotoAlbumCustomMacros {&lt;br /&gt;
&lt;br /&gt;
		/** @var photoalbum $module */&lt;br /&gt;
		public $module;&lt;br /&gt;
		&lt;br /&gt;
		/**&lt;br /&gt;
		 * Возвращает фотографии заданного фотоальбома&lt;br /&gt;
		 * @param bool|int|string $path идентификатор или адрес фотоальбома&lt;br /&gt;
		 * @param string $template имя шаблона (для tpl)&lt;br /&gt;
		 * @param bool|int $limit ограничение на количество выводимых элементов&lt;br /&gt;
		 * @param bool $ignore_paging игнорировать пагинацию&lt;br /&gt;
		 * @return mixed&lt;br /&gt;
		 * @throws ErrorException&lt;br /&gt;
		 * @throws coreException&lt;br /&gt;
		 * @throws publicException&lt;br /&gt;
		 * @throws selectorException&lt;br /&gt;
		 */&lt;br /&gt;
		public function album($path = false, $template = &amp;#039;default&amp;#039;, $limit = false, $ignore_paging = false, $sort = &amp;#039;asc&amp;#039;) {&lt;br /&gt;
			$curr_page = (int) getRequest(&amp;#039;p&amp;#039;);&lt;br /&gt;
			$per_page = $limit ?: $this-&amp;gt;module-&amp;gt;per_page;&lt;br /&gt;
&lt;br /&gt;
			$element_id = $this-&amp;gt;module-&amp;gt;analyzeRequiredPath($path);&lt;br /&gt;
&lt;br /&gt;
			if ($element_id === false &amp;amp;&amp;amp; $path != KEYWORD_GRAB_ALL) {&lt;br /&gt;
				throw new publicException(getLabel(&amp;#039;error-page-does-not-exist&amp;#039;, null, $path));&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			list($template_block, $template_block_empty, $template_line) = photoalbum::loadTemplates(&lt;br /&gt;
				&amp;#039;photoalbum/&amp;#039; . $template,&lt;br /&gt;
				&amp;#039;album_block&amp;#039;,&lt;br /&gt;
				&amp;#039;album_block_empty&amp;#039;,&lt;br /&gt;
				&amp;#039;album_block_line&amp;#039;&lt;br /&gt;
			);&lt;br /&gt;
&lt;br /&gt;
			$photos = new selector(&amp;#039;pages&amp;#039;);&lt;br /&gt;
			$photos-&amp;gt;types(&amp;#039;hierarchy-type&amp;#039;)-&amp;gt;name(&amp;#039;photoalbum&amp;#039;, &amp;#039;photo&amp;#039;);&lt;br /&gt;
			// Сортировка			&lt;br /&gt;
			switch ($sort) {&lt;br /&gt;
				case &amp;#039;asc&amp;#039;:&lt;br /&gt;
					$photos-&amp;gt;order(&amp;#039;ord&amp;#039;)-&amp;gt;asc();&lt;br /&gt;
					break;&lt;br /&gt;
				case &amp;#039;desc&amp;#039;:&lt;br /&gt;
					$photos-&amp;gt;order(&amp;#039;ord&amp;#039;)-&amp;gt;desc();&lt;br /&gt;
					break;&lt;br /&gt;
				case &amp;#039;rand&amp;#039;:&lt;br /&gt;
					$$photos-&amp;gt;order(&amp;#039;rand&amp;#039;);&lt;br /&gt;
					break;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			if ($path != KEYWORD_GRAB_ALL) {&lt;br /&gt;
				$photos-&amp;gt;where(&amp;#039;hierarchy&amp;#039;)-&amp;gt;page($element_id);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$photos-&amp;gt;option(&amp;#039;load-all-props&amp;#039;)-&amp;gt;value(true);&lt;br /&gt;
			$this-&amp;gt;module-&amp;gt;setAlbumListLimit($photos, $curr_page, $per_page, $ignore_paging);&lt;br /&gt;
			$result = $photos-&amp;gt;result();&lt;br /&gt;
			$total = $photos-&amp;gt;length();&lt;br /&gt;
&lt;br /&gt;
			$block_arr = [];&lt;br /&gt;
			$block_arr[&amp;#039;id&amp;#039;] = $block_arr[&amp;#039;void:album_id&amp;#039;] = $element_id;&lt;br /&gt;
&lt;br /&gt;
			if ($total == 0) {&lt;br /&gt;
				return photoalbum::parseTemplate($template_block_empty, $block_arr, $element_id);&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$lines = [];&lt;br /&gt;
			$umiLinksHelper = umiLinksHelper::getInstance();&lt;br /&gt;
&lt;br /&gt;
			foreach ($result as $photo) {&lt;br /&gt;
				$line_arr = [];&lt;br /&gt;
&lt;br /&gt;
				if (!$photo instanceof iUmiHierarchyElement) {&lt;br /&gt;
					continue;&lt;br /&gt;
				}&lt;br /&gt;
&lt;br /&gt;
				$photo_element_id = $photo-&amp;gt;getId();&lt;br /&gt;
				$line_arr[&amp;#039;attribute:id&amp;#039;] = $photo_element_id;&lt;br /&gt;
				$line_arr[&amp;#039;attribute:link&amp;#039;] = $umiLinksHelper-&amp;gt;getLinkByParts($photo);&lt;br /&gt;
				$line_arr[&amp;#039;xlink:href&amp;#039;] = &amp;#039;upage://&amp;#039; . $photo_element_id;&lt;br /&gt;
				$line_arr[&amp;#039;node:name&amp;#039;] = $photo-&amp;gt;getName();&lt;br /&gt;
&lt;br /&gt;
				photoalbum::pushEditable(&amp;#039;photoalbum&amp;#039;, &amp;#039;photo&amp;#039;, $photo_element_id);&lt;br /&gt;
				$lines[] = photoalbum::parseTemplate($template_line, $line_arr, $photo_element_id);&lt;br /&gt;
			}&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;
			$block_arr[&amp;#039;total&amp;#039;] = $total;&lt;br /&gt;
			$block_arr[&amp;#039;per_page&amp;#039;] = $per_page;&lt;br /&gt;
			$block_arr[&amp;#039;link&amp;#039;] = umiHierarchy::getInstance()-&amp;gt;getPathById($element_id);&lt;br /&gt;
			return photoalbum::parseTemplate($template_block, $block_arr, $element_id);&lt;br /&gt;
		}&lt;br /&gt;
	}&lt;br /&gt;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь в макросе album можно использовать пятый, необязательный параметр, устанавливая его в значение &amp;#039;asc&amp;#039;, &amp;#039;desc&amp;#039; или &amp;#039;rand&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Вызов в PHP:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
$albums = $this-&amp;gt;macros(&amp;#039;photoalbum&amp;#039;, &amp;#039;album&amp;#039;, [$page-&amp;gt;getId(),null,null,null,&amp;#039;desc&amp;#039;]);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вызов в XSLT:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;xsl:variable name=&amp;quot;albums&amp;quot; select=&amp;quot;document(&amp;#039;udata://photoalbum/album/47////desc/&amp;#039;)/udata&amp;quot; /&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Вызов в TPL: &lt;br /&gt;
&amp;lt;source lang=&amp;quot;tpl&amp;quot;&amp;gt;&lt;br /&gt;
%photoalbum album(&amp;#039;47&amp;#039;,0,0,0,&amp;#039;desc&amp;#039;)%&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Написание кастомных макросов]][[Категория:Модуль Фотогалереи]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</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=9232</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=9232"/>
		<updated>2019-05-31T07:59:33Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Реализовать автоматическую подготовку экспорта в формат YML c помощью cron.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Если на вашем сайте большое количество товаров и, соответственно, подготовка экспорта в формат YML занимает продолжительное время, то возникает необходимость запускать данную подготовку, например, ночью, чтобы днем была меньше нагрузка на сайт. Для выполнения данной задачи необходимо сделать следующее:&lt;br /&gt;
&lt;br /&gt;
1) В папке classes/components/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;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
2) В файле classes/components/exchange/customMacros.php добавьте следующий код:&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;
В коде необходимо указать идентификатор экспорта данных в YML настроенного в модуле Обмен данными. Его можно посмотреть в адресной строке при редактировании экспорта данных или на вкладке Экспорт данных при наведении:&lt;br /&gt;
&lt;br /&gt;
[[Файл:Export_YML_id.png]]&lt;br /&gt;
&lt;br /&gt;
Все, теперь осталось только настроить автоматический запуск cron на нужное время, это можно сделать в админке хостинга, информацию о cron в нашей документации вы можете посмотреть здесь: http://dev.docs.umi-cms.ru/nastrojka_sistemy/cron/ .&lt;br /&gt;
&lt;br /&gt;
 &amp;#039;&amp;#039;&amp;#039;Обратите внимание:&amp;#039;&amp;#039;&amp;#039; В скрипте загружаются все товары сразу, поэтому на обработку большого каталога может уйти много оперативной памяти и времени.&lt;br /&gt;
&lt;br /&gt;
[[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]][[Категория:Модуль Обмен данными]][[Категория:Написание кастомных макросов]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Export_YML_id.png&amp;diff=9231</id>
		<title>Файл:Export YML id.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Export_YML_id.png&amp;diff=9231"/>
		<updated>2019-05-31T07:56:33Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</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=9230</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=9230"/>
		<updated>2019-05-31T07:30:57Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: проверено, обновлено&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;[[category:Модуль Обмен данными]][[Категория:Написание кастомных макросов]][[category:Интеграция с 1С]]&lt;br /&gt;
&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача == &lt;br /&gt;
&lt;br /&gt;
Сделать активными только импортируемые товары, все остальные товары в каталоге должны стать неактивными.&lt;br /&gt;
&lt;br /&gt;
== Решение == &lt;br /&gt;
&lt;br /&gt;
В директорию \classes\components\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;
&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
В этой же директории в файл customMacros.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;
&lt;br /&gt;
	/** Класс пользовательских макросов */&lt;br /&gt;
	class ExchangeCustomMacros {&lt;br /&gt;
&lt;br /&gt;
		/** @var exchange $module */&lt;br /&gt;
		public $module;&lt;br /&gt;
		&lt;br /&gt;
		public function onExchangeDisactivateElements(iUmiEventPoint $event) {&lt;br /&gt;
			if ($event-&amp;gt;getMode() === &amp;#039;after&amp;#039;) {&lt;br /&gt;
				return;&lt;br /&gt;
			}&lt;br /&gt;
&lt;br /&gt;
			$element = $event-&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 $page) {&lt;br /&gt;
					$page-&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 $event) {&lt;br /&gt;
			if (file_exists(&amp;quot;onExchangeDisactivateElementsFlag&amp;quot;)) {&lt;br /&gt;
				unlink(&amp;quot;onExchangeDisactivateElementsFlag&amp;quot;);&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;
Мы добавили обработчик событий добавления и обновления элемента механизмом импорта, в котором все объекты каталога становятся неактивными, а импортируемые элементы - активными. Несколько замечаний:&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>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D0%B5%D1%80%D1%81%D1%82%D0%BA%D0%B0_%D0%B2_PHP&amp;diff=9229</id>
		<title>Категория:Верстка в PHP</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D1%82%D0%B5%D0%B3%D0%BE%D1%80%D0%B8%D1%8F:%D0%92%D0%B5%D1%80%D1%81%D1%82%D0%BA%D0%B0_%D0%B2_PHP&amp;diff=9229"/>
		<updated>2019-05-30T11:23:29Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Документация:&amp;#039;&amp;#039;&amp;#039; &lt;br /&gt;
*PHP-шаблонизатор UMI.CMS [http://dev.docs.umi-cms.ru/shablony_i_makrosy/php-shablonizator_umi_cms/ dev.docs.umi-cms.ru/shablony_i_makrosy/php-shablonizator_umi_cms/]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
{{Индекс категории}}&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BA_config.ini&amp;diff=9228</id>
		<title>Файл настроек config.ini</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B5%D0%BA_config.ini&amp;diff=9228"/>
		<updated>2019-05-30T11:17:45Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Описание ==&lt;br /&gt;
&lt;br /&gt;
Начиная с версии 2.8.х появился основной файл настройки системы &amp;#039;&amp;#039;&amp;#039;config.ini&amp;#039;&amp;#039;&amp;#039;, который располагается в корневой директории DOCUMENT_ROOT и содержит большинство настроек системы. Туда переехали почти все константы, многие настройки из реестра и появились совершенно новые. [http://help-dev.umi-cms.ru/part.Config.syntax.html Синтаксис config.ini]&lt;br /&gt;
&lt;br /&gt;
[http://dev.docs.umi-cms.ru/nastrojka_sistemy/dostupnye_sekcii/ Описание в документации]&lt;br /&gt;
&lt;br /&gt;
== Пример ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;ini&amp;quot;&amp;gt;&lt;br /&gt;
; Настройки защиты от спама&lt;br /&gt;
[anti-spam]&lt;br /&gt;
; Включить или отключить службу.&lt;br /&gt;
service.enabled = &amp;quot;0&amp;quot;&lt;br /&gt;
; Имя используемой службы.&lt;br /&gt;
service.name = &amp;quot;akisment&amp;quot;&lt;br /&gt;
; API-ключ для анти-спам сервиса по умолчанию &amp;quot;Akisment&amp;quot;&lt;br /&gt;
akisment.wp-api-key = &amp;quot;6317fd125041&amp;quot;&lt;br /&gt;
; Включить или отключить CAPTCHA.&lt;br /&gt;
captcha.enabled = &amp;quot;1&amp;quot;&lt;br /&gt;
; Класс отрисовки изображений. Можно заменить стандартную отрисовку CAPTCHA.&lt;br /&gt;
captcha.drawer = &amp;quot;default&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки кэширования системы&lt;br /&gt;
[cache]&lt;br /&gt;
; Текущий кэширующий механизм.&lt;br /&gt;
; На текущий момент доступны: memcache, memcached, fs, database, redis.&lt;br /&gt;
engine = &amp;quot;&amp;quot;&lt;br /&gt;
; Включение/выключение режима отладки динамического кеширования&lt;br /&gt;
engine.debug = &amp;quot;0&amp;quot;&lt;br /&gt;
; Включает кэширование протоколов. Доступно через административную панель&lt;br /&gt;
; (раздел «Конфигурация», вкладка «Производительность»)&lt;br /&gt;
streams.cache-enabled = &amp;quot;0&amp;quot;&lt;br /&gt;
; Указывает время жизни кэша протоколов в секундах. Доступно через административную &lt;br /&gt;
; панель (раздел «Конфигурация», вкладка «Производительность»)&lt;br /&gt;
streams.cache-lifetime = &amp;quot;3600&amp;quot;&lt;br /&gt;
; Список IP адресов, при заходе с которых данные не будут загружаться из кэша.&lt;br /&gt;
filter.ip[] = &amp;quot;&amp;quot;&lt;br /&gt;
; Валидатор ключей кеша. Значения:&lt;br /&gt;
; WhiteList - валидация по белому списку. Будет кешироваться только то, что указано в опции whitelist[].&lt;br /&gt;
; BlackList - валидация по черном списку. Не будет кешироваться то, что указано в опции blacklist[].&lt;br /&gt;
; MixedList - валидация по черному и белому списку. По умолчанию ключ невалиден, проверка по черному списку имеет больший приоритет.&lt;br /&gt;
key-validator = &amp;quot;BlackList&amp;quot;&lt;br /&gt;
; Вхождения в ключи, которые нужно кешировать.&lt;br /&gt;
whitelist[] = &amp;quot;&amp;quot;&lt;br /&gt;
; Вхождения в ключи, которые не нужно кешировать. Не рекомендуется удалять методы, указанные по умолчанию.&lt;br /&gt;
blacklist[] = &amp;quot;appointment/getAppointmentsData&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;appointment/postAppointment&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/basket&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/purchase&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/getCompareList&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/ordersList&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/compare&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/getCompareList&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/purchasing_one_step&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/price&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;ApiShip&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;emarket/getOrderDeliveryAddress&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;blogs20/postEdit&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;blogs20/postAdd&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;blogs20/commentAdd&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;blogs20/itemDelete&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;blogs20/editUserBlogs&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;comments/post&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;comments/comment&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;dispatches/subscribe&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;dispatches/subscribe_do&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;dispatches/unsubscribe&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;filemanager/download&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;forum/message&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;forum/topic_post&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;forum/message_post&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;forum/topic_post_do&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;forum/message_post_do&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;faq/addQuestionForm&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;faq/post_question&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;system/includeEditInPlaceJs&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;system/numpages&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;system/listErrorMessage&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;system/captcha&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;search/search_do&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;search/insert_form&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;tickets/manage&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;content/getRecentPages&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;content/getMobileModesList&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;content/ieditor&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;content/getImageData&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;users/settings&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;users/activate&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;users/registrate_done&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;users/restore&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;users/forget_do/&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;users/login_do/&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;users/loadUserSettings/&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;users/saveUserSettings/&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;data/getEditForm&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;data/getCreateForm&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;vote/post&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;vote/poll&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;vote/results&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;webforms/posted&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;webforms/send&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;core/navibar&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;dispatches/subscribe_do&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;includeQuickEditJs&amp;quot;&lt;br /&gt;
blacklist[] = &amp;quot;includeFrontendResources&amp;quot;&lt;br /&gt;
; В последних версиях системы является устаревшим аналогом blacklist[]&lt;br /&gt;
not-allowed-methods[] = &amp;quot;&amp;quot;&lt;br /&gt;
; В последних версиях системы является устаревшим аналогом blacklist[]&lt;br /&gt;
not-allowed-streams[] = &amp;quot;&amp;quot;&lt;br /&gt;
; Настройки механизма кеширования Redis&lt;br /&gt;
; Адрес хоста сервера Redis&lt;br /&gt;
redis.host = &amp;quot;localhost&amp;quot;&lt;br /&gt;
; Порт сервера Redis&lt;br /&gt;
redis.port = &amp;quot;6379&amp;quot;&lt;br /&gt;
; Имя базы Redis&lt;br /&gt;
redis.base = &amp;quot;1&amp;quot;&lt;br /&gt;
; Пароль для доступа к Redis&lt;br /&gt;
redis.auth = &amp;quot;&amp;quot;&lt;br /&gt;
; Настройки механизма кеширования memcache&lt;br /&gt;
; Адрес сервера memcache, или путь к unix.socket.&lt;br /&gt;
memcache.host = &amp;quot;localhost&amp;quot;&lt;br /&gt;
; Порт для подключения к memcachе. При использовании unix socket значение =0.&lt;br /&gt;
memcache.port = &amp;quot;11211&amp;quot;&lt;br /&gt;
; Включение/выключение сжатия сохраняемых данных (с помощью zlib)&lt;br /&gt;
memcache.compress = &amp;quot;0&amp;quot;&lt;br /&gt;
; Адрес сервера memcached&lt;br /&gt;
memcached.host = &amp;quot;localhost&amp;quot;&lt;br /&gt;
; Порт для подключения к memcached&lt;br /&gt;
memcached.port = &amp;quot;11211&amp;quot;&lt;br /&gt;
; Включение/выключение статического кэширования&lt;br /&gt;
static.enabled = &amp;quot;0&amp;quot;&lt;br /&gt;
; Режим работы статического кэширования. Возможные значения:&lt;br /&gt;
; normal - Значение по умолчанию. Время хранения кэша — 24 часа.&lt;br /&gt;
; short - Время хранения кэша — 10 минут.&lt;br /&gt;
; long - Время хранения кэша — 1 месяц.&lt;br /&gt;
; nginx - Управляется настройками nginx.&lt;br /&gt;
static.mode = &amp;quot;normal&amp;quot;&lt;br /&gt;
; Включает режим отладки статического кэша.&lt;br /&gt;
static.debug = &amp;quot;0&amp;quot;&lt;br /&gt;
; Создавать отдельный статический кеш для мобильных устройств.&lt;br /&gt;
static.cache-for-mobile-devices = &amp;quot;1&amp;quot;&lt;br /&gt;
; Реализация браузерного кеширования. Возможные значения:&lt;br /&gt;
; None - браузерное кеширование отключено&lt;br /&gt;
; LastModified - браузерное кеширование с помощью заголовка &amp;quot;Last-Modified&amp;quot;&lt;br /&gt;
; Expires - браузерное кешированиt с помощью заголовка &amp;quot;Expires&amp;quot;&lt;br /&gt;
browser.engine = &amp;quot;None&amp;quot;&lt;br /&gt;
; Опция управления директивой ответа заголовка Cache-Control (возможные значения: private или public)&lt;br /&gt;
browser.cache-control = &amp;quot;private&amp;quot;&lt;br /&gt;
; Время жизни кеша для заголовка &amp;quot;Expires&amp;quot;&lt;br /&gt;
browser.expires.time-to-live = &amp;quot;86400&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки сторонних скинов&lt;br /&gt;
[casual-skins]&lt;br /&gt;
; Настройки скинов Edit-in-place.&lt;br /&gt;
_eip[] = &amp;quot;content::eip_add_page&amp;quot;&lt;br /&gt;
; Настройки решений.&lt;br /&gt;
solutions[] = &amp;quot;config::getFullSolutionList&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройка подключения к базе данных. &lt;br /&gt;
[connections]&lt;br /&gt;
; Тип подключения&lt;br /&gt;
core.type = &amp;quot;mysql&amp;quot;&lt;br /&gt;
; Хост&lt;br /&gt;
core.host = &amp;quot;localhost&amp;quot;&lt;br /&gt;
; Логин&lt;br /&gt;
core.login = &amp;quot;ipumisoftr_umi0&amp;quot;&lt;br /&gt;
; Пароль&lt;br /&gt;
core.password = &amp;quot;g6$Pp3T@6AYo&amp;quot;&lt;br /&gt;
; Имя базы данных&lt;br /&gt;
core.dbname = &amp;quot;ipumisoftr_umi0&amp;quot;&lt;br /&gt;
; Порт&lt;br /&gt;
core.port = &amp;quot;&amp;quot;&lt;br /&gt;
; Постоянное соединение&lt;br /&gt;
core.persistent = &amp;quot;0&amp;quot;&lt;br /&gt;
; Использовать сжатие при передачи данных между БД и системой&lt;br /&gt;
core.compression = &amp;quot;0&amp;quot;&lt;br /&gt;
; Название API для работы с бд (mysql или mysqli).&lt;br /&gt;
core.api = &amp;quot;mysql&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки режима отладки&lt;br /&gt;
[debug]&lt;br /&gt;
; Включить режим отладки&lt;br /&gt;
enabled = &amp;quot;0&amp;quot;&lt;br /&gt;
; Вывод ошибок только для посетителей с указанными ip.&lt;br /&gt;
filter.ip[] = &amp;quot;&amp;quot;&lt;br /&gt;
; Включить отображение отладочной информации в сообщениях о неперехваченных исключениях. &lt;br /&gt;
; Эта информация может быть полезной при обращении в Службу Заботы, однако, из соображений&lt;br /&gt;
; безопасности по умолчанию эта опция отключена&lt;br /&gt;
show-backtrace = &amp;quot;0&amp;quot;&lt;br /&gt;
; Вывод отладочной информации только для посетителей с указанными ip.&lt;br /&gt;
allowed-ip[] = &amp;quot;&amp;quot;&lt;br /&gt;
; Выключить вывод стека вызовов, при использовании флага &amp;quot;?showStreamsCalls=1&amp;quot; в адресе страницы&lt;br /&gt;
callstack.disabled = &amp;quot;0&amp;quot;&lt;br /&gt;
; Включает/отключает ведение лога неперехваченных исключений. Информация сохраняется в директорию errors/logs.&lt;br /&gt;
log-exceptions = &amp;quot;0&amp;quot;&lt;br /&gt;
; Отображать ошибки при аварийном завершении запроса&lt;br /&gt;
handle-shutdown = &amp;quot;0&amp;quot; &lt;br /&gt;
&lt;br /&gt;
; Настройки edit-in-place&lt;br /&gt;
[edit-in-place]&lt;br /&gt;
; Список типов для edit-in-place. Эти настройки менять не рекомендуется.&lt;br /&gt;
allowed-types[] = &amp;quot;content::page &amp;lt;- *&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;news::rubric &amp;lt;- *&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;news::item &amp;lt;- news::rubric&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;catalog::category &amp;lt;- *&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;catalog::object &amp;lt;- catalog::category&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;faq::project &amp;lt;- *&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;faq::category &amp;lt;- faq::project&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;faq::question &amp;lt;- faq::category&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;forum::conf &amp;lt;- *&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;forum::topic &amp;lt;- forum::conf&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;filemanager::shared_file &amp;lt;- *&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;photoalbum::album &amp;lt;- *&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;photoalbum::photo &amp;lt;- photoalbum::album&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;blogs20::blog &amp;lt;- *&amp;quot;&lt;br /&gt;
allowed-types[] = &amp;quot;blogs20::post &amp;lt;- blogs20::blog&amp;quot;&lt;br /&gt;
; Путь до файла стилей панели быстрого редактирования.&lt;br /&gt;
theme = &amp;quot;~/styles/skins/_eip/css/theme.css&amp;quot;&lt;br /&gt;
; Определяет стиль редактирования текстовых полей. Возможные значения:&lt;br /&gt;
; inline - Текстовые поля редактируются в стандартном виде (textarea).&lt;br /&gt;
; tinymce47 - При редактировании текстовых полей подключается WYSIWYG &amp;quot;TinyMCE&amp;quot;.&lt;br /&gt;
wysiwyg = &amp;quot;tinymce47&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Список путей, используемых системой.&lt;br /&gt;
; С их помощью можно значительно преобразовать структуру файловой системы&lt;br /&gt;
[includes]&lt;br /&gt;
; Ядро системы&lt;br /&gt;
system.kernel = &amp;quot;~/classes/system/&amp;quot;&lt;br /&gt;
; Классы внутренних протоколов&lt;br /&gt;
system.kernel.streams = &amp;quot;~/classes/system/subsystems/streams/&amp;quot;&lt;br /&gt;
; Класс базового модуля&lt;br /&gt;
system.default-module = &amp;quot;~/classes/modules/&amp;quot;&lt;br /&gt;
; Классы модулей&lt;br /&gt;
system.modules = &amp;quot;~/classes/modules/&amp;quot;&lt;br /&gt;
; Классы виртуальных модулей&lt;br /&gt;
system.virtual-modules = &amp;quot;~/classes/modules/&amp;quot;&lt;br /&gt;
; Библиотечные файлы (в данный момент поддерживается только частично)&lt;br /&gt;
system.libs = &amp;quot;~/libs/&amp;quot;&lt;br /&gt;
; Папка для временных операций, которыми занимаются манифесты.&lt;br /&gt;
system.manifest = &amp;quot;~/sys-temp/manifest/&amp;quot;&lt;br /&gt;
; Временные файлы системы&lt;br /&gt;
system.runtime-cache = &amp;quot;~/sys-temp/runtime-cache/&amp;quot;&lt;br /&gt;
; Папка для временных операций статического кэширования&lt;br /&gt;
system.static-cache = &amp;quot;~/sys-temp/static-cache/&amp;quot;&lt;br /&gt;
; Страницы ошибок&lt;br /&gt;
system.error = &amp;quot;~/errors/&amp;quot;&lt;br /&gt;
; Страница-заглушка&lt;br /&gt;
system.stub = &amp;quot;~/errors/stub.php&amp;quot;&lt;br /&gt;
; Скины&lt;br /&gt;
templates.skins = &amp;quot;~/styles/skins/{skin}/&amp;quot;&lt;br /&gt;
; Tpl-шаблоны (в пути можно указывать макросы {lang} и {domain})&lt;br /&gt;
templates.tpl = &amp;quot;~/tpls/&amp;quot;&lt;br /&gt;
; Xslt-шаблоны  (в пути можно указывать макросы {lang} и {domain})&lt;br /&gt;
templates.xsl = &amp;quot;~/xsltTpls/&amp;quot;&lt;br /&gt;
; Путь до файла с логом запросов к БД&lt;br /&gt;
mysql-queries-log = &amp;quot;~/queries.log&amp;quot;&lt;br /&gt;
; Путь до пользовательских файлов.&lt;br /&gt;
user-files-path = &amp;quot;~/files&amp;quot;&lt;br /&gt;
; Путь до пользовательских изображений.&lt;br /&gt;
user-images-path = &amp;quot;~/images&amp;quot;&lt;br /&gt;
; Путь до логов ошибок.&lt;br /&gt;
errors-logs-path = &amp;quot;~/errors/logs&amp;quot;&lt;br /&gt;
; Путь до директории с временными системными файлами.&lt;br /&gt;
sys-temp-path = &amp;quot;~/sys-temp&amp;quot;&lt;br /&gt;
; Путь до директории с файлами системных логов.&lt;br /&gt;
sys-log-path = &amp;quot;~/sys-temp/logs&amp;quot;&lt;br /&gt;
; Путь до изображения, которое будет использовано в качестве &amp;quot;заглушки&amp;quot; при генерации миниатюр.&lt;br /&gt;
no-image-holder = &amp;quot;~/images/cms/no_image.png&amp;quot;&lt;br /&gt;
;изображение заглушка для слишком больших файлов&lt;br /&gt;
too-big-image-holder = &amp;quot;~/images/cms/too_big_foto.png&amp;quot; &lt;br /&gt;
&lt;br /&gt;
; Настройки ядра системы&lt;br /&gt;
[kernel]&lt;br /&gt;
; Выводить содержимое текстовых полей well-formed xml&amp;#039;ом при доступе из через внутренние протоколы.&lt;br /&gt;
property-value-mode = &amp;quot;&amp;quot;&lt;br /&gt;
; Выводить меню одним деревом при работе с xslt-шаблонами&lt;br /&gt;
xslt-nested-menu = &amp;quot;1&amp;quot;&lt;br /&gt;
; Установить максимальное количество join-таблиц в запросе, после которого нужно отключить оптимизатор запросов mysql&amp;#039;а&lt;br /&gt;
selection-max-joins = &amp;quot;-1&amp;quot;&lt;br /&gt;
; Включить коррекцию кэша при работе системы в кластере (1 db-server, &amp;gt; 2 app-server)&lt;br /&gt;
cluster-cache-correction = &amp;quot;0&amp;quot;&lt;br /&gt;
; Ключевое слово для выборки всех элементов в макросах&lt;br /&gt;
grab-all-keyword = &amp;quot;mode=all&amp;quot;&lt;br /&gt;
; Использовать расширение reflection для вызова подключаемых библиотек&lt;br /&gt;
use-reflection-extension = &amp;quot;0&amp;quot;&lt;br /&gt;
; Игнорировать совпадение адресов страниц и названий модулей.&lt;br /&gt;
; По умолчанию система исправляет название страницы, чтобы избежать коллизий.&lt;br /&gt;
ignore-module-names-overwrite = &amp;quot;0&amp;quot;&lt;br /&gt;
; Автоматически индексировать изменения страниц&lt;br /&gt;
pages-auto-index = &amp;quot;1&amp;quot;&lt;br /&gt;
; Автоматически индексировать импортируемые данные. &lt;br /&gt;
; Обратите внимание: для включения автоматической индексации при импорте, &lt;br /&gt;
; необходимо, чтобы для параметра pages-auto-index, также было выставлено значение &amp;quot;1&amp;quot;&lt;br /&gt;
import-auto-index = &amp;quot;0&amp;quot;&lt;br /&gt;
; Обнулять значения поля, если в импортируемом csv файле поле пустое.&lt;br /&gt;
import-csv-reset-value = &amp;quot;0&amp;quot;&lt;br /&gt;
; Включить предварительную авторизацию&lt;br /&gt;
enable-pre-auth = &amp;quot;1&amp;quot;&lt;br /&gt;
; Форматировать выводимый xml-документы&lt;br /&gt;
xml-format-output = &amp;quot;1&amp;quot;&lt;br /&gt;
; Разрешить перехват вызываемых адресов umap&amp;#039;ом&lt;br /&gt;
matches-enabled = &amp;quot;1&amp;quot;&lt;br /&gt;
; Позволяет отключить обработку tpl-макросов, присутствующих в контенте страниц сайта, работающего в XSLT-режиме&lt;br /&gt;
xml-macroses-disable = &amp;quot;0&amp;quot;&lt;br /&gt;
; Позволяет задать массив макросов, которые будут отрабатывать при включенной директиве xml-macroses-disable&lt;br /&gt;
xml-macroses.allowed[] = &amp;quot;content/get_page_url&amp;quot;&lt;br /&gt;
; Включает отображение макросов, которые не отработали&lt;br /&gt;
show-broken-macro = &amp;quot;1&amp;quot;&lt;br /&gt;
; Включает отправку дополнительных заголовков (additional-header)&lt;br /&gt;
send-additional-status-header = &amp;quot;1&amp;quot;&lt;br /&gt;
; Включает использование справочника с заблокированными ip.&lt;br /&gt;
use-ip-blacklist-guide = &amp;quot;0&amp;quot;&lt;br /&gt;
; Управление черным списком IP-адресов перенесено в административный раздел в модуль &lt;br /&gt;
; &amp;quot;Шаблоны данных&amp;quot;, справочник &amp;quot;Список IP-адресов, которым недоступен сайт&amp;quot;&lt;br /&gt;
ip-blacklist = &amp;quot;&amp;quot;&lt;br /&gt;
; Ограничивает количество элементов в выпадающем списке. По умолчанию = 50. &lt;br /&gt;
; Значение должно быть числовым и не может быть меньше 15&lt;br /&gt;
max-guided-items = &amp;quot;50&amp;quot;&lt;br /&gt;
; Указывает необходимость проводить загружаемые jpg и jpeg-файлы через php-библиотеку &amp;quot;gd&amp;quot;. &lt;br /&gt;
; При установленном значении &amp;quot;1&amp;quot; увеличивает безопасность сайта (становится невозможным загрузить &lt;br /&gt;
; вредоносный php-файл в виде jpg-картинки), однако, ведет к снижению качества загружаемых изображений.&lt;br /&gt;
jpg-through-gd = &amp;quot;1&amp;quot;&lt;br /&gt;
; Управляет отображением времени генерации страницы в её исходном коде&lt;br /&gt;
show-generate-time = &amp;quot;1&amp;quot;&lt;br /&gt;
; Включает защиту от вредоносных межсайтовых запросов (CSRF)&lt;br /&gt;
csrf_protection = &amp;quot;1&amp;quot;&lt;br /&gt;
; Количество объектов, для которых можно хранить в кэше все значения всех их полей.&lt;br /&gt;
objects-props-cash-size = &amp;quot;100&amp;quot;&lt;br /&gt;
; Отключает учет прав текущего пользователя при фильтрации страниц по индексу.&lt;br /&gt;
ignore-permissions-in-filter = &amp;quot;1&amp;quot;&lt;br /&gt;
; Включает прикрепление к отправляемым письмам изображений, которые в них размещались.&lt;br /&gt;
inner-img-to-attachment = &amp;quot;1&amp;quot;&lt;br /&gt;
; Переключает реализацию скачивания файла в зависимости от сервера (apache/nginx).&lt;br /&gt;
umi-file-download-mode = &amp;quot;apache&amp;quot;&lt;br /&gt;
; Включает логгирование запросов к MySQL&lt;br /&gt;
mysql-queries-log-enable = &amp;quot;0&amp;quot;&lt;br /&gt;
; Тип логгера запросов к MySQL. Имя класса реализации логгера будет иметь вид &amp;lt;значение-опции&amp;gt;MysqlLogger . &lt;br /&gt;
; Класс логгера должен реализовывать интерфейс iMysqlLogger. &lt;br /&gt;
; Пример определения класса логгера TestMysqlLogger можно найти в файле ~/classes/system/utils/logger/mysql/TestMysqlLogger.php&lt;br /&gt;
mysql-queries-log-type = &amp;quot;Test&amp;quot;&lt;br /&gt;
; Ограничение на минимальное количество символов для поиска (не меньше 2х символов).&lt;br /&gt;
search-min-word-length = &amp;quot;3&amp;quot;&lt;br /&gt;
; Включает поиск по вхождению в любую часть строки.&lt;br /&gt;
search-in-any-part-of-string = &amp;quot;0&amp;quot;&lt;br /&gt;
; Включает сортировку элементов справочников по ид.&lt;br /&gt;
order-guide-items-by-id = &amp;quot;0&amp;quot;&lt;br /&gt;
; Определяет количество проверяемых временных (незарегистрированных покупателей, брошенный корзин и т.д.) объектов за один запуск сборщика мусора.&lt;br /&gt;
expired-objects-limit = &amp;quot;50&amp;quot;&lt;br /&gt;
; Определяет время жизни временных объектов по умолчанию.&lt;br /&gt;
objects-expiration-time = &amp;quot;86400&amp;quot;&lt;br /&gt;
; Название расширения для обработки изображений (imagick/gd)&lt;br /&gt;
image-processor = &amp;quot;&amp;quot;&lt;br /&gt;
; Включение проверки родительских страниц на предмет доступности для приложения в социальной сети&lt;br /&gt;
social_network.check-parents = &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки отправки писем&lt;br /&gt;
[mail]&lt;br /&gt;
; Определяет класс, ответственный за отправку писем. Возможные значения:&lt;br /&gt;
; phpMail - класс отправки с помощью php функции mail();&lt;br /&gt;
; smtp - класс отправки по протоколу smtp;&lt;br /&gt;
; nullEngine - класс заглушки отправки;&lt;br /&gt;
engine = &amp;quot;phpMail&amp;quot;&lt;br /&gt;
; Определяет таймаут для отправки писем по smtp. Значение задается в секундах.&lt;br /&gt;
smtp.timeout = &amp;quot;&amp;quot;&lt;br /&gt;
; Определяет хост для подключения по smtp.&lt;br /&gt;
smtp.host = &amp;quot;&amp;quot;&lt;br /&gt;
; Определяет порт для подключения по smtp.&lt;br /&gt;
smtp.port = &amp;quot;&amp;quot;&lt;br /&gt;
; Определяет шифрование подключения по smtp (ssl, tls, auto).&lt;br /&gt;
smtp.encryption = &amp;quot;&amp;quot;&lt;br /&gt;
; Определяет необходимость авторизации для отправки по smtp.&lt;br /&gt;
smtp.auth = &amp;quot;&amp;quot;&lt;br /&gt;
; Определяет логин авторизации для отправки по smtp. &lt;br /&gt;
smtp.user-name = &amp;quot;&amp;quot;&lt;br /&gt;
; Определяет пароль авторизации для отправки по smtp.&lt;br /&gt;
smtp.password = &amp;quot;&amp;quot;&lt;br /&gt;
; Определяет режим отладки отправки по smtp.&lt;br /&gt;
; Отправка писем может кидать исключения&lt;br /&gt;
; Ведется лог обращений по stmp в /sys-temp/logs/smtp/&lt;br /&gt;
smtp.debug = &amp;quot;&amp;quot;&lt;br /&gt;
; Определяет необходимость генерации VERP адреса при отправке.&lt;br /&gt;
smtp.use-verp = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки подсистемы внутренних сообщений&lt;br /&gt;
[messages]&lt;br /&gt;
; Перехватывать и записывать в лог системные события (сохранять в системный журнал событий).&lt;br /&gt;
catch-system-events = &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Индивидуальные настройки модулей&lt;br /&gt;
[modules]&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. Класс для расчета номера следующего заказа.&lt;br /&gt;
emarket.numbers = &amp;quot;default&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. Определяет необходимость конвертации валюты при импорте&lt;br /&gt;
emarket.currency.convert_on_import = &amp;quot;0&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. URL для автоматической синхронизации курсов валют.&lt;br /&gt;
emarket.currency.sync.source = &amp;quot;http://www.cbr.ru/scripts/XML_daily.asp&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. Шаблон обработки результатов для синхронизации курсов валют.&lt;br /&gt;
emarket.currency.sync.xsl = &amp;quot;cbr2internal.xsl&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. Максимальное число товаров, которые можно добавить к сравнению.&lt;br /&gt;
emarket.compare.max-items = &amp;quot;3&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. Максимальное количество самых часто покупаемых товаров, &lt;br /&gt;
; отображаемых в списке Популярные товары на вкладке Статистика. &lt;br /&gt;
; Можно изменить в настройках модуля на вкладке настройки модуля (&amp;quot;Максимум популярных товаров&amp;quot;).&lt;br /&gt;
emarket.popular.max-items = &amp;quot;30&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. Максимальное количество заказов, которые должны быть переиндексированы.&lt;br /&gt;
; Можно изменить в настройках модуля на вкладке настройки модуля (&amp;quot;Максимум переиндексируемых заказов&amp;quot;).&lt;br /&gt;
emarket.reindex.max-items = &amp;quot;10&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. При добавлении товаров с перечисленными группами полей, &lt;br /&gt;
; он будет рассматриваться как товар с опциями ;(опционный товар).&lt;br /&gt;
emarket.order-types.optioned.groups[] = &amp;quot;catalog_option_props&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. При добавлении товаров с перечисленными полями, &lt;br /&gt;
; он будет рассматриваться как товар с опциями (опционный товар).&lt;br /&gt;
emarket.order-types.optioned.fields[] = &amp;quot;&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;. Время жизни незарегистрированного покупателя по умолчанию, в секундах.&lt;br /&gt;
emarket.customer-expiration-time = &amp;quot;2678400&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Интернет-магазин&amp;quot;.&lt;br /&gt;
; https://api.kupivkredit.ru/ - URL для обращения к платежной системе КупиВКредит, установлен по умолчанию;&lt;br /&gt;
emarket.payment.kupivkredit.api-url = &amp;quot;https://api.kupivkredit.ru/&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Количество элементов выгружаемое за один раз при импорте больших объемов.&lt;br /&gt;
exchange.splitter.limit = &amp;quot;25&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Количество элементов выгружаемое за один раз при экспорте больших объемов.&lt;br /&gt;
exchange.export.limit = &amp;quot;25&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Определяет задержку выполнения скрипта при интеграции с 1С.&lt;br /&gt;
exchange.commerceML.timeout = &amp;quot;0&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Устанавливает сплиттер, с помощью которого производится импорт данных из 1С.&lt;br /&gt;
exchange.commerceML.splitter = &amp;quot;commerceML2&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Устанавливает необходимость переименования файлов при импорте &lt;br /&gt;
; из 1С. значение &amp;quot;1&amp;quot; - импортируемые файлы переименовываются, значение &amp;quot;0&amp;quot; отключает переименование.&lt;br /&gt;
exchange.commerceML.renameFiles = &amp;quot;1&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Устанавливает максимально возможный размер в байтах части &lt;br /&gt;
; файла при выгрузке из 1С. Если выгрузка заказов не проходит, необходимо увеличить этот параметр.&lt;br /&gt;
exchange.commerceML.maxFileSize = &amp;quot;102400&amp;quot;&lt;br /&gt;
; одуль &amp;quot;Обмен данными&amp;quot;. Включает обработку zip архивов при интеграции с 1С.&lt;br /&gt;
exchange.commerceML.accept-zip = &amp;quot;0&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Ограничивает экспорт заказов текущим доменом. Если параметр имеет&lt;br /&gt;
; значение &amp;quot;1&amp;quot;, то экспорт заказов в формат CommerceML будет происходить с фильтрацией по &lt;br /&gt;
; текущему домену. Если используется значение по умолчанию - &amp;quot;0&amp;quot;, заказы будут &lt;br /&gt;
; экспортированы из всех доменов системы.&lt;br /&gt;
exchange.commerceML.ordersByDomains = &amp;quot;0&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Задает ограничение на количество заказов, выгружаемых в 1С за один сеанс.&lt;br /&gt;
exchange.commerceML.ordersLimit = &amp;quot;150&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Идентификатор цены в &amp;quot;1С:Управление торговлей&amp;quot; по умолчанию.&lt;br /&gt;
; Если в &amp;quot;1С:Управление торговлей&amp;quot; существует только один тип цен, то этот параметр будет проигнорирован.&lt;br /&gt;
; Если существует 2 и более, то будет взят указанный в этом параметре тип (в случае наличия такого типа в &amp;quot;1С:Управление торговлей&amp;quot;), либо выбран первый из встретившихся.&lt;br /&gt;
exchange.translator.1c_price_type_id = &amp;quot;3c49a673-e8ba-11de-adfb-000c297d6967&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Определяет будут ли созданы разделы каталога активными или нет, при импорте из CommerceML.&lt;br /&gt;
exchange.translator.catalog_rubric_activity = &amp;quot;0&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Определяет будут ли созданы объекты каталога активными или нет, при импорте из CommerceML.&lt;br /&gt;
exchange.translator.catalog_item_activity = &amp;quot;1&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Определяет будут ли созданы разделы каталога видимыми в меню или нет, при импорте из CommerceML.&lt;br /&gt;
exchange.translator.catalog_rubric_visible = &amp;quot;1&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Определяет задержку выполнения скрипта при интеграции с 1С.&lt;br /&gt;
exchange.translator.catalog_item_visible = &amp;quot;0&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Определяет какой шаблон будет использован по умолчанию &lt;br /&gt;
; для отображения страниц импортированных товаров каталога. Укажите здесь имя файла шаблона (с расширением .xsl или .tpl).&lt;br /&gt;
; Если не указан, будет использован шаблон назначенный на сайте по умолчанию.&lt;br /&gt;
exchange.translator.catalog_item_template = &amp;quot;&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Обмен данными&amp;quot;. Определяет какой шаблон будет использован по умолчанию для &lt;br /&gt;
; отображения страниц импортированных разделов каталога. Укажите здесь имя файла шаблона (с расширением .xsl или .tpl).&lt;br /&gt;
; Если не указан, будет ипользован шаблон, назначенный на сайте по умолчанию.&lt;br /&gt;
exchange.translator.catalog_rubric_template = &amp;quot;&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Рассылки&amp;quot;. Определяет ограничение количества писем в час, отправляемое через рассылку. &lt;br /&gt;
; Если выставлено значение по умолчанию, количество ограничиваться не будет.&lt;br /&gt;
dispatches.max_messages_in_hour = &amp;quot;0&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Баннеры&amp;quot;. Включает/выключает пересчет количества показов баннеров в процессе формирования страницы. &lt;br /&gt;
; &amp;quot;1&amp;quot; - пересчет количества показов и проверка, был ли баннер уже показан заданное количество раз, происходит при формировании страницы; &lt;br /&gt;
; &amp;quot;0&amp;quot; - после загрузки страницы.&lt;br /&gt;
; Параметр предназначен для устранения проблем с некоторыми версиями php.&lt;br /&gt;
banners.disable-update-optimization = &amp;quot;1&amp;quot;&lt;br /&gt;
; Включает запись даты последнего посещения авторизованного пользователя.&lt;br /&gt;
users.calculate-last-request-time = &amp;quot;0&amp;quot;&lt;br /&gt;
; Включает автоматическое обновление индекса фильтров при изменении товаров.&lt;br /&gt;
catalog.allow-auto-update-filter-index = &amp;quot;1&amp;quot;&lt;br /&gt;
; Количество индексируемых товаров за одну итерацию при ручной индексации фильтров.&lt;br /&gt;
catalog.index.limit = &amp;quot;25&amp;quot;&lt;br /&gt;
; Включает возможность указывать уровень вложенности искомых товаров относительно индексируемого раздела при ручной индексации фильтров.&lt;br /&gt;
catalog.index.advanced-mode = &amp;quot;1&amp;quot;&lt;br /&gt;
; Включает переиндексацию фильтров всех индексируемых разделов каталога при запуске системного крона.&lt;br /&gt;
catalog.reindex-on-cron-event-enable = &amp;quot;0&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Структура&amp;quot;. Определяет максимальное количество последних просмотренных страниц, хранящихся в системе.&lt;br /&gt;
content.recent-pages.max-items = &amp;quot;100&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;Поиск&amp;quot;. Включить индексацию виртуальных копий.&lt;br /&gt;
; Можно изменить в настройках модуля (&amp;quot;Индексировать виртуальные копии&amp;quot;).&lt;br /&gt;
search.allow-virtual-copies = &amp;quot;1&amp;quot;&lt;br /&gt;
; Модуль &amp;quot;GeoIP&amp;quot;. Cписок имен заблокированных сервисов определения Geo локации по IP.&lt;br /&gt;
; Можно изменить в настройках модуля.&lt;br /&gt;
geoip.service.blacklist[] = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Seo-настройки&lt;br /&gt;
[seo]&lt;br /&gt;
; Символ для разделения слов в псевдостатическом адресе страницы. Возможны варианты - &amp;quot;_&amp;quot; или &amp;quot;-&amp;quot;&lt;br /&gt;
alt-name-separator = &amp;quot;-&amp;quot;&lt;br /&gt;
; Окончание, добавляемое к ссылкам в адресной строке (например: &amp;quot;http://domain.ru/catalog/tovar/&amp;quot;).&lt;br /&gt;
; Применяется для ;SEO-оптимизации. Например, когда для ссылок нужно добавить &lt;br /&gt;
; окончание &amp;quot;.html&amp;quot; - свидетельство для поисковиков о том, что это статическая &lt;br /&gt;
; страница, а не каталог. Указанное окончание добавляется в том случае, если параметр url-suffix.add равен &amp;quot;1&amp;quot;&lt;br /&gt;
url-suffix = &amp;quot;/&amp;quot;&lt;br /&gt;
; Добавлять ли указанное в url-suffix окончание к ссылкам&lt;br /&gt;
url-suffix.add = &amp;quot;1&amp;quot;&lt;br /&gt;
; Следить за историей изменений адресов страниц (переименования, перемещения)&lt;br /&gt;
; При включенной опции ведется статистика изменений, при попадании пользователя на перемещенную страницу,&lt;br /&gt;
; система будет осуществлять seo-корректное перенаправление на новый адрес страницы&lt;br /&gt;
watch-redirects-history = &amp;quot;1&amp;quot;&lt;br /&gt;
; Значение crawl-delay в robots.txt&lt;br /&gt;
crawl-delay = &amp;quot;3&amp;quot;&lt;br /&gt;
; Переадресовывать ли на корень сайта при запросе &amp;quot;index.php&amp;quot;.&lt;br /&gt;
index-redirect = &amp;quot;1&amp;quot;&lt;br /&gt;
; Переадресовывать на основной домен, если пользователь зашел на зеркало&lt;br /&gt;
primary-domain-redirect = &amp;quot;0&amp;quot;&lt;br /&gt;
; Используется ли текущий домен с префиксом www или без него&lt;br /&gt;
primary-www = &amp;quot;0&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки работы сессий&lt;br /&gt;
[session]&lt;br /&gt;
; Время жизни сессионной cookie в секундах.&lt;br /&gt;
cookie-lifetime = &amp;quot;1209600&amp;quot;&lt;br /&gt;
; Путь в домене, где cookie будет работать. Используйте одну косую черту (&amp;#039;/&amp;#039;) для всех путей в домене.&lt;br /&gt;
cookie-path = &amp;quot;/&amp;quot;&lt;br /&gt;
; Домен cookie, например &amp;#039;www.test.ru&amp;#039;. Чтобы сделать cookies видимыми для всех поддоменов, перед именем домена нужно поставить точку, например &amp;#039;.test.ru&amp;#039;.&lt;br /&gt;
cookie-domain = &amp;quot;&amp;quot;&lt;br /&gt;
; Если установлено 1, то cookies будут передаваться только через защищённые соединения.&lt;br /&gt;
cookie-secure-flag = &amp;quot;0&amp;quot;&lt;br /&gt;
; Если установлено 1, то система попытается отправить флаг httponly при настройке сессионной cookie.&lt;br /&gt;
cookie-http-flag = &amp;quot;1&amp;quot;&lt;br /&gt;
; Максимальное время активности сессии в минутах.&lt;br /&gt;
active-lifetime = &amp;quot;60&amp;quot;&lt;br /&gt;
; Устанавливает имя сессии.&lt;br /&gt;
name = &amp;quot;PHPSESSID&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки rest-протоколов&lt;br /&gt;
[streams]&lt;br /&gt;
; Список доступных системе протоколов&lt;br /&gt;
enable[] = &amp;quot;udata&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;utype&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;upage&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;uobject&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;ufs&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;usel&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;umap&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;uhttp&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;ulang&amp;quot;&lt;br /&gt;
enable[] = &amp;quot;umess&amp;quot;&lt;br /&gt;
; Разрешения на доступ к протоколам через HTTP&lt;br /&gt;
udata.http.allow = &amp;quot;1&amp;quot;&lt;br /&gt;
utype.http.allow = &amp;quot;1&amp;quot;&lt;br /&gt;
upage.http.allow = &amp;quot;1&amp;quot;&lt;br /&gt;
uobject.http.allow = &amp;quot;0&amp;quot;&lt;br /&gt;
ufs.http.allow = &amp;quot;0&amp;quot;&lt;br /&gt;
usel.http.allow = &amp;quot;0&amp;quot;&lt;br /&gt;
umap.http.allow = &amp;quot;0&amp;quot;&lt;br /&gt;
uhttp.http.allow = &amp;quot;0&amp;quot;&lt;br /&gt;
ulang.http.allow = &amp;quot;0&amp;quot;&lt;br /&gt;
umess.http.allow = &amp;quot;1&amp;quot;&lt;br /&gt;
; Настройка прав доступа на вызов протоколов через HTTP. Возможные значения:&lt;br /&gt;
; admin - доступно только администраторам сайта.&lt;br /&gt;
; sv - доступно только супервайзерам.&lt;br /&gt;
; auth - доступно только авторизованным пользователям.&lt;br /&gt;
; all - доступно всем&lt;br /&gt;
; так же можно указать id пользователей через запятую&lt;br /&gt;
udata.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
utype.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
upage.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
uobject.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
ufs.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
usel.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
umap.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
uhttp.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
ulang..http.allow = &amp;quot;all&amp;quot;&lt;br /&gt;
umess.http.permissions = &amp;quot;all&amp;quot;&lt;br /&gt;
; Настройка прав доступа на вызов протоколов через HTTP по ip адресу.&lt;br /&gt;
udata.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
utype.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
upage.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
uobject.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
ufs.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
usel.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
umap.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
uhttp.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
ulang.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
umess.http.ip-allow = &amp;quot;&amp;quot;&lt;br /&gt;
; Разрешение на вывод расширенных полей и групп по протоколу UData через HTTP&lt;br /&gt;
udata.http.extended.allow = &amp;quot;0&amp;quot;&lt;br /&gt;
; Заголовок &amp;quot;User Agent&amp;quot;, который будет отправлять система при доступе к внешним данным&lt;br /&gt;
user-agent = &amp;quot;UMI.CMS libxml agent&amp;quot;&lt;br /&gt;
; Включить или отключить автоматическое определение и подключение config.ini для текущего шаблона&lt;br /&gt;
udata.autoload.custom.config = &amp;quot;1&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки страницы-заглушки&lt;br /&gt;
[stub]&lt;br /&gt;
; Включить заглушку&lt;br /&gt;
enabled = &amp;quot;0&amp;quot;&lt;br /&gt;
; Список адресов, для которых не будет показываться страница-заглушка.&lt;br /&gt;
filter.ip[] = &amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Основные системные настройки&lt;br /&gt;
[system]&lt;br /&gt;
; Текущий драйвер БД системы. На данный момент поддерживается 2 значения: &amp;quot;mysql&amp;quot; и &amp;quot;xml&amp;quot;&lt;br /&gt;
db-driver = &amp;quot;mysql&amp;quot;&lt;br /&gt;
; Редакция системы. Определяется при установке. Возможные значения:&lt;br /&gt;
; demo - включение демонстрационного режима&lt;br /&gt;
; В Демонстрационном режиме блокирован такой функционал, как:&lt;br /&gt;
; Обновление системы&lt;br /&gt;
; Применение патчей&lt;br /&gt;
; Управление файловой системой сайта(файловый менеджер позволяет только чтение)&lt;br /&gt;
; Изменение настроек модулей&lt;br /&gt;
; Просмотр Доменного ключа в модуле Конфигурация&lt;br /&gt;
version-line = &amp;quot;&amp;quot;&lt;br /&gt;
; Скин административного интерфейса по умолчанию&lt;br /&gt;
default-skin = &amp;quot;modern&amp;quot;&lt;br /&gt;
; Список скинов, доступных в системе&lt;br /&gt;
skins[] = &amp;quot;mac&amp;quot;&lt;br /&gt;
skins[] = &amp;quot;modern&amp;quot;&lt;br /&gt;
; Список доступных языковых версий&lt;br /&gt;
interface-langs[] = &amp;quot;ru&amp;quot;&lt;br /&gt;
interface-langs[] = &amp;quot;en&amp;quot;&lt;br /&gt;
; Формат вывода даты по умолчанию&lt;br /&gt;
default-date-format = &amp;quot;Y-m-d H:i:s&amp;quot;&lt;br /&gt;
; Часовой пояс по умолчанию&lt;br /&gt;
time-zone = &amp;quot;Europe/Moscow&amp;quot;&lt;br /&gt;
; Код валюты по умолчанию&lt;br /&gt;
default-currency = &amp;quot;RUR&amp;quot;&lt;br /&gt;
; Настройки удаления через edit-in-place ( 0 - Страницы будут перемещены в корзину. Объекты — удалены.)&lt;br /&gt;
eip.fake-delete = &amp;quot;0&amp;quot;&lt;br /&gt;
; Определяет метод работы с шаблонизаторами. С версии 2.8.5.1 является устаревшим и не используется&lt;br /&gt;
use-old-templater = &amp;quot;1&amp;quot;&lt;br /&gt;
; Позволяет отключить транслитерацию имен загружаемых файлов.&lt;br /&gt;
transliterate-uploaded-files = &amp;quot;1&amp;quot;&lt;br /&gt;
; Предназначен для вырезания из конечного HTML-кода атрибутов из пространства имён &amp;quot;umi&amp;quot; &lt;br /&gt;
; (umi:method, umi:element-id и так далее) для неавторизованых пользователей&lt;br /&gt;
clean-eip-attributes = &amp;quot;0&amp;quot;&lt;br /&gt;
; Позволяет управлять возможностью редактирования объектов справочника для администраторов сайта, не являющихся владельцами (создателями) данных объектов.&lt;br /&gt;
allow-object-editing = &amp;quot;1&amp;quot;&lt;br /&gt;
; Позволяет включить выполнение макросов внутри html-комментариев. По умолчанию параметр равен 0&lt;br /&gt;
parse-macroses-in-comments = &amp;quot;0&amp;quot;&lt;br /&gt;
; Указывает максимально допустимый суммарный размер файлов из папок /files и /images. По умолчанию не ограничено. Поддерживаются суффиксы KB, MB, GB. Значение по умолчанию - в байтах.&lt;br /&gt;
quota-files-and-images = &amp;quot;0&amp;quot;&lt;br /&gt;
; Указывает максимально допустимый размер файлов из директории /sys-temp/uploads/. По умолчанию не ограничено. Поддерживаются суффиксы KB, MB, GB. Значение по умолчанию - в байтах.&lt;br /&gt;
quota-uploads = &amp;quot;0&amp;quot;&lt;br /&gt;
; Кодировка по умолчанию для обмена данными в формате CSV&lt;br /&gt;
default-exchange-encoding = &amp;quot;windows-1251&amp;quot;&lt;br /&gt;
; Позволяет управлять протоколом при генерации адресов системой. Возможные значения - &amp;quot;http&amp;quot; и &amp;quot;https&amp;quot;. Пример генерируемых адресов: ссылки в sitemap.xml, в yml и т.д.&lt;br /&gt;
server-protocol = &amp;quot;http&amp;quot;&lt;br /&gt;
; Включает режим совместимых модулей (из директории /classes/components). Режим совместимых модулей будет включен вне зависимости от значения директивы, если на сервере используется PHP версии 7.*.*&lt;br /&gt;
compatible-modules = &amp;quot;1&amp;quot;&lt;br /&gt;
; Позволяет указать свои методы в качестве шлюзов (cmsController::isGateway()). При вызове методов-шлюзов игнорируется проверка HTTP referer.&lt;br /&gt;
gateways[] = &amp;quot;module-method&amp;quot;&lt;br /&gt;
; Возможность очищать данные для php шаблона от разметки массивов для xml транслятора.&lt;br /&gt;
use-php-template-data-cleaning = &amp;quot;0&amp;quot;&lt;br /&gt;
; Использовать только базовые данные о текущей странице для шаблонизации.&lt;br /&gt;
use-only-base-client-variables = &amp;quot;0&amp;quot;&lt;br /&gt;
; Подавлять исключения в php-шаблонизаторе для вызываемых макросов.&lt;br /&gt;
suppress-exceptions-in-php-macros = &amp;quot;0&amp;quot;&lt;br /&gt;
; Возможность получать в php шаблоне выполненный макрос текущей страницы в виде массива.&lt;br /&gt;
return-array-from-macros-execution = &amp;quot;0&amp;quot;&lt;br /&gt;
; Версия визуального редактора tinyMCE для административной панели.&lt;br /&gt;
admin-wysiwyg-version = &amp;quot;tinymce47&amp;quot;&lt;br /&gt;
; Предназначен для системных целей, генерируется автоматически&lt;br /&gt;
salt = &amp;quot;0d6d84cfe8e325bae5898ab5656d8922dee3d284&amp;quot;&lt;br /&gt;
; При загрузке изображений на сервер они будут сжаты до указанного в опции уровня (в процентах, где 1 - максимальное сжатие, 100 - отсутствие сжатия).&lt;br /&gt;
image-compression = &amp;quot;100&amp;quot;&lt;br /&gt;
; Коэффициент расчета занимаемой памяти для одного пикселя изображения в байтах&lt;br /&gt;
bitmap-memory-rate = &amp;quot;2.2&amp;quot;&lt;br /&gt;
&lt;br /&gt;
; Настройки обновления&lt;br /&gt;
[updates]&lt;br /&gt;
; Способ обновления таблиц базы данных. Если данный параметр равен &amp;quot;1&amp;quot;, то при&lt;br /&gt;
; обновлении система будет проверять количество записей в таблицах базы данных. &lt;br /&gt;
; В случае, если таблица содержит более 10000 записей, её обновление будет происходить частями по 1000 строк.&lt;br /&gt;
; Данная возможность необходима, например, для серверов с маленьким значением максимально &lt;br /&gt;
; возможного времени выполнения скрипта.&lt;br /&gt;
update-database-by-parts = &amp;quot;1&amp;quot;&lt;br /&gt;
; Ограничение на количество записей при обновлении базы данных.&lt;br /&gt;
db-scheme-converter-iteration-limit = &amp;quot;10000&amp;quot;&lt;br /&gt;
&lt;br /&gt;
;  Автозагрузка дополнительных классов.&lt;br /&gt;
[autoload]&lt;br /&gt;
; Путь до PHP-файла с определением класса.&lt;br /&gt;
className[] = &amp;quot;~/file/Path&amp;quot;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Категория:Модуль Конфигурация]][[Категория:Вопросы_установки_настройки_и_переноса]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A6%D0%B5%D0%BD%D0%B0_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D0%B9&amp;diff=9226</id>
		<title>Цена в зависимости от условий</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A6%D0%B5%D0%BD%D0%B0_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D0%B9&amp;diff=9226"/>
		<updated>2019-05-28T08:53:35Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача == &lt;br /&gt;
&lt;br /&gt;
В интернет-магазине цена должна быть в зависимости от каких-то условий.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
1. Нужно написать обработчик события. Более подробную информацию о событиях вы можете прочитать здесь http://api.umi-cms.ru/events.html&lt;br /&gt;
Вам необходимо создать в файл classes/components/catalog/custom_events.php. В нём прописать следующий код:&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;umiObjectProperty_loadPriceValue&amp;quot;, &amp;quot;catalog&amp;quot;, &amp;quot;onLoadPriceHandler&amp;quot;);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Это событие будет вызывать кастомный макрос определяющий цену.&lt;br /&gt;
&lt;br /&gt;
2. Написать кастомный макрос. Для этого в файле classes/components/catalog/customMacros.php Описать следующую функцию:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
        public function onLoadPriceHandler(iUmiEventPoint $oEventPoint) {&lt;br /&gt;
            // get plain price relation&lt;br /&gt;
            $price = &amp;amp;$oEventPoint-&amp;gt;getRef(&amp;#039;price&amp;#039;);&lt;br /&gt;
            // get object id&lt;br /&gt;
            $object_id = $oEventPoint-&amp;gt;getParam(&amp;#039;object_id&amp;#039;);&lt;br /&gt;
            // TODO: write your custom logic here&lt;br /&gt;
            // ....&lt;br /&gt;
            // and set new $price value&lt;br /&gt;
            $price = 6436;&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;
Теперь необходимо описать соответствующие условия и присвоить переменной $price необходимую вариацию цены.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Также смотрите статью с примером реализации описанной логики: [[Использование нескольких Цен для одного товара]]&lt;br /&gt;
[[Категория:Написание кастомных макросов]][[Категория:Модуль Каталог]][[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A6%D0%B5%D0%BD%D0%B0_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D0%B9&amp;diff=9225</id>
		<title>Цена в зависимости от условий</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A6%D0%B5%D0%BD%D0%B0_%D0%B2_%D0%B7%D0%B0%D0%B2%D0%B8%D1%81%D0%B8%D0%BC%D0%BE%D1%81%D1%82%D0%B8_%D0%BE%D1%82_%D1%83%D1%81%D0%BB%D0%BE%D0%B2%D0%B8%D0%B9&amp;diff=9225"/>
		<updated>2019-05-28T08:53:11Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
----&lt;br /&gt;
&lt;br /&gt;
== Задача == В интернет-магазине цена должна быть в зависимости от каких-то условий.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
1. Нужно написать обработчик события. Более подробную информацию о событиях вы можете прочитать здесь http://api.umi-cms.ru/events.html&lt;br /&gt;
Вам необходимо создать в файл classes/components/catalog/custom_events.php. В нём прописать следующий код:&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;umiObjectProperty_loadPriceValue&amp;quot;, &amp;quot;catalog&amp;quot;, &amp;quot;onLoadPriceHandler&amp;quot;);&lt;br /&gt;
 ?&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Это событие будет вызывать кастомный макрос определяющий цену.&lt;br /&gt;
&lt;br /&gt;
2. Написать кастомный макрос. Для этого в файле classes/components/catalog/customMacros.php Описать следующую функцию:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
        public function onLoadPriceHandler(iUmiEventPoint $oEventPoint) {&lt;br /&gt;
            // get plain price relation&lt;br /&gt;
            $price = &amp;amp;$oEventPoint-&amp;gt;getRef(&amp;#039;price&amp;#039;);&lt;br /&gt;
            // get object id&lt;br /&gt;
            $object_id = $oEventPoint-&amp;gt;getParam(&amp;#039;object_id&amp;#039;);&lt;br /&gt;
            // TODO: write your custom logic here&lt;br /&gt;
            // ....&lt;br /&gt;
            // and set new $price value&lt;br /&gt;
            $price = 6436;&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;
Теперь необходимо описать соответствующие условия и присвоить переменной $price необходимую вариацию цены.&lt;br /&gt;
&lt;br /&gt;
&amp;lt;br/&amp;gt;Также смотрите статью с примером реализации описанной логики: [[Использование нескольких Цен для одного товара]]&lt;br /&gt;
[[Категория:Написание кастомных макросов]][[Категория:Модуль Каталог]][[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D1%81%D0%BA%D0%B8%D0%B4%D0%BA%D0%B8&amp;diff=9223</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_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D1%81%D0%BA%D0%B8%D0%B4%D0%BA%D0%B8&amp;diff=9223"/>
		<updated>2019-05-25T08:45:47Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача == &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;#039;&amp;#039;&amp;#039;proizvoditel&amp;#039;&amp;#039;&amp;#039;, справочник для поля - «Производитель». Тогда добавим дочерний тип по отношению к «Правила скидок», модуль &amp;quot;Шаблоны данных&amp;quot;. Назовем новый тип «На раздел и производителя». В поле «Назначение типа» выберем «Правило скидки», добавим поле &amp;quot;Раздел&amp;quot; с типом «Ссылка на дерево», строковый идентификатор &amp;#039;razdely&amp;#039;. Также добавим поле &amp;quot;Производитель&amp;quot;, с типом выпадающий список, а справочник укажем такой же как и для товаров, т.е. «Производитель». Будем считать, что новый тип данных имеет object_id = 1062.&lt;br /&gt;
&lt;br /&gt;
Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя»,  Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога.&lt;br /&gt;
&lt;br /&gt;
Далее в папку &amp;#039;&amp;#039;&amp;#039;/classes/components/emarket/classes/discounts/rules/&amp;#039;&amp;#039;&amp;#039; добавим файл &amp;#039;&amp;#039;&amp;#039;brand.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;
&lt;br /&gt;
	class brandDiscountRule extends discountRule implements itemDiscountRule {&lt;br /&gt;
		public function validateItem(iUmiHierarchyElement $orderItem) {&lt;br /&gt;
			if(!is_array($this-&amp;gt;razdely)) {&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
                        // слева, proizvoditel - идентификатор поля в Правиле скидки&lt;br /&gt;
                        // справа, proizvoditel - идентификатор поля у товара&lt;br /&gt;
			if($this-&amp;gt;proizvoditel == $orderItem-&amp;gt;proizvoditel){&lt;br /&gt;
                            &lt;br /&gt;
  			    foreach($this-&amp;gt;razdely as $catalogItem) {&lt;br /&gt;
    				if($catalogItem-&amp;gt;id == $orderItem-&amp;gt;getParentId()) {&lt;br /&gt;
    					return true;&lt;br /&gt;
    				}&lt;br /&gt;
  			 }&lt;br /&gt;
			}			&lt;br /&gt;
			return false;&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;
*Модификатор цены - Процент от суммы&lt;br /&gt;
*Правила валидации - На раздел и производителя&lt;br /&gt;
&lt;br /&gt;
Указываем необходимые параметры скидки:&lt;br /&gt;
*Процент скидки&lt;br /&gt;
*Разделы&lt;br /&gt;
*Производитель&lt;br /&gt;
&lt;br /&gt;
«Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает.&lt;br /&gt;
[[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D1%81%D0%BA%D0%B8%D0%B4%D0%BA%D0%B8&amp;diff=9222</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_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D1%81%D0%BA%D0%B8%D0%B4%D0%BA%D0%B8&amp;diff=9222"/>
		<updated>2019-05-25T08:45:30Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 18.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача == &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;#039;&amp;#039;&amp;#039;proizvoditel&amp;#039;&amp;#039;&amp;#039;, справочник для поля - «Производитель». Тогда добавим дочерний тип по отношению к «Правила скидок», модуль &amp;quot;Шаблоны данных&amp;quot;. Назовем новый тип «На раздел и производителя». В поле «Назначение типа» выберем «Правило скидки», добавим поле &amp;quot;Раздел&amp;quot; с типом «Ссылка на дерево», строковый идентификатор &amp;#039;razdely&amp;#039;. Также добавим поле &amp;quot;Производитель&amp;quot;, с типом выпадающий список, а справочник укажем такой же как и для товаров, т.е. «Производитель». Будем считать, что новый тип данных имеет object_id = 1062.&lt;br /&gt;
&lt;br /&gt;
Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя»,  Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога.&lt;br /&gt;
&lt;br /&gt;
Далее в папку &amp;#039;&amp;#039;&amp;#039;/classes/components/emarket/classes/discounts/rules/&amp;#039;&amp;#039;&amp;#039; добавим файл &amp;#039;&amp;#039;&amp;#039;brand.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;
&lt;br /&gt;
	class brandDiscountRule extends discountRule implements itemDiscountRule {&lt;br /&gt;
		public function validateItem(iUmiHierarchyElement $orderItem) {&lt;br /&gt;
			if(!is_array($this-&amp;gt;razdely)) {&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
                        // слева, proizvoditel - идентификатор поля в Правиле скидки&lt;br /&gt;
                        // справа, proizvoditel - идентификатор поля у товара&lt;br /&gt;
			if($this-&amp;gt;proizvoditel == $orderItem-&amp;gt;proizvoditel){&lt;br /&gt;
                            &lt;br /&gt;
  			    foreach($this-&amp;gt;razdely as $catalogItem) {&lt;br /&gt;
    				if($catalogItem-&amp;gt;id == $orderItem-&amp;gt;getParentId()) {&lt;br /&gt;
    					return true;&lt;br /&gt;
    				}&lt;br /&gt;
  			 }&lt;br /&gt;
			}			&lt;br /&gt;
			return false;&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;
*Модификатор цены - Процент от суммы&lt;br /&gt;
*Правила валидации - На раздел и производителя&lt;br /&gt;
&lt;br /&gt;
Указываем необходимые параметры скидки:&lt;br /&gt;
*Процент скидки&lt;br /&gt;
*Разделы&lt;br /&gt;
*Производитель&lt;br /&gt;
&lt;br /&gt;
«Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает.&lt;br /&gt;
[[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</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%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D1%81%D0%BA%D0%B8%D0%B4%D0%BA%D0%B8&amp;diff=9221</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_%D0%BD%D0%BE%D0%B2%D0%BE%D0%B3%D0%BE_%D0%BF%D1%80%D0%B0%D0%B2%D0%B8%D0%BB%D0%B0_%D1%81%D0%BA%D0%B8%D0%B4%D0%BA%D0%B8&amp;diff=9221"/>
		<updated>2019-05-25T08:44:15Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 18.&amp;#039;&amp;#039;&amp;#039;&amp;lt;br/&amp;gt;&amp;lt;br/&amp;gt;&lt;br /&gt;
== Задача == Добавить новое правило скидок&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;
&lt;br /&gt;
Допустим, у товаров есть поле Производитель, типа выпадающий список, идентификатор поля &amp;#039;&amp;#039;&amp;#039;proizvoditel&amp;#039;&amp;#039;&amp;#039;, справочник для поля - «Производитель». Тогда добавим дочерний тип по отношению к «Правила скидок», модуль &amp;quot;Шаблоны данных&amp;quot;. Назовем новый тип «На раздел и производителя». В поле «Назначение типа» выберем «Правило скидки», добавим поле &amp;quot;Раздел&amp;quot; с типом «Ссылка на дерево», строковый идентификатор &amp;#039;razdely&amp;#039;. Также добавим поле &amp;quot;Производитель&amp;quot;, с типом выпадающий список, а справочник укажем такой же как и для товаров, т.е. «Производитель». Будем считать, что новый тип данных имеет object_id = 1062.&lt;br /&gt;
&lt;br /&gt;
Откроем содержание справочника «Типы правил для скидок», добавим еще один элемент, с названием «На раздел и производителя»,  Идентификатор – brand, Тип данных – 1062, Допустимые типы скидки - На товары каталога.&lt;br /&gt;
&lt;br /&gt;
Далее в папку &amp;#039;&amp;#039;&amp;#039;/classes/components/emarket/classes/discounts/rules/&amp;#039;&amp;#039;&amp;#039; добавим файл &amp;#039;&amp;#039;&amp;#039;brand.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;
&lt;br /&gt;
	class brandDiscountRule extends discountRule implements itemDiscountRule {&lt;br /&gt;
		public function validateItem(iUmiHierarchyElement $orderItem) {&lt;br /&gt;
			if(!is_array($this-&amp;gt;razdely)) {&lt;br /&gt;
				return false;&lt;br /&gt;
			}&lt;br /&gt;
                        // слева, proizvoditel - идентификатор поля в Правиле скидки&lt;br /&gt;
                        // справа, proizvoditel - идентификатор поля у товара&lt;br /&gt;
			if($this-&amp;gt;proizvoditel == $orderItem-&amp;gt;proizvoditel){&lt;br /&gt;
                            &lt;br /&gt;
  			    foreach($this-&amp;gt;razdely as $catalogItem) {&lt;br /&gt;
    				if($catalogItem-&amp;gt;id == $orderItem-&amp;gt;getParentId()) {&lt;br /&gt;
    					return true;&lt;br /&gt;
    				}&lt;br /&gt;
  			 }&lt;br /&gt;
			}			&lt;br /&gt;
			return false;&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;
*Модификатор цены - Процент от суммы&lt;br /&gt;
*Правила валидации - На раздел и производителя&lt;br /&gt;
&lt;br /&gt;
Указываем необходимые параметры скидки:&lt;br /&gt;
*Процент скидки&lt;br /&gt;
*Разделы&lt;br /&gt;
*Производитель&lt;br /&gt;
&lt;br /&gt;
«Раздел» должен быть прямым родителям для объекта каталога, т.е. указание промежуточного раздела, в котором есть подразделы, в данном случае не сработает.&lt;br /&gt;
[[Категория:Модуль Интернет магазин]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B4%D0%BB%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&amp;diff=9219</id>
		<title>Выгрузка нескольких изображений для шаблона Demomarket</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B3%D1%80%D1%83%D0%B7%D0%BA%D0%B0_%D0%BD%D0%B5%D1%81%D0%BA%D0%BE%D0%BB%D1%8C%D0%BA%D0%B8%D1%85_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D0%B9_%D0%B4%D0%BB%D1%8F_%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D0%B0_Demomarket&amp;diff=9219"/>
		<updated>2019-05-24T08:45:09Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: Новая страница: «&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;  == Задача ==  Выгрузить несколько изображений из 1С на сайт с шаб…»&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 20&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
== Задача ==&lt;br /&gt;
&lt;br /&gt;
Выгрузить несколько изображений из 1С на сайт с шаблоном Demomarket так, что-бы они сразу отображались на сайте.&lt;br /&gt;
&lt;br /&gt;
== Решение ==&lt;br /&gt;
&lt;br /&gt;
Основная задача которую надо решить это реализация кастомного шаблона преобразования информации об изображениях из файла с форматом CommerceML 2.0 в данные формата umiDump 2.0.&lt;br /&gt;
&lt;br /&gt;
Фрагмент данных файла выгрузки из 1С содержащий информацию об изображениях:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;Картинка&amp;gt;import_files/15/15db4a947d4f11e9499ffa163e9c8758_1ba9b1727d4f11e9499ffa163e9c8758.png&amp;lt;/Картинка&amp;gt;&lt;br /&gt;
&amp;lt;Картинка&amp;gt;import_files/15/15db4a947d4f11e9499ffa163e9c8758_2390e7a27d4f11e9499ffa163e9c8758.jpg&amp;lt;/Картинка&amp;gt;&lt;br /&gt;
&amp;lt;Картинка&amp;gt;import_files/15/15db4a947d4f11e9499ffa163e9c8758_9ff1425a7d5511e9499ffa163e9c8758.jpg&amp;lt;/Картинка&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Фрагмент данных файла umiDump 2.0 который должен получиться после применения шаблона преобразования:&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;xml&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;photo&amp;quot; type=&amp;quot;img_file&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Картинка&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;value&amp;gt;&amp;lt;![CDATA[./images/cms/data/import_files/15/15db4a947d4f11e9499ffa163e9c8758_1ba9b1727d4f11e9499ffa163e9c8758.png]]&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;property name=&amp;quot;photos&amp;quot; type=&amp;quot;multiple_image&amp;quot;&amp;gt;&lt;br /&gt;
	&amp;lt;title&amp;gt;Дополнительные фотографии товара&amp;lt;/title&amp;gt;&lt;br /&gt;
	&amp;lt;value path=&amp;quot;./images/cms/data/import_files/15/15db4a947d4f11e9499ffa163e9c8758_2390e7a27d4f11e9499ffa163e9c8758.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
	&amp;lt;value path=&amp;quot;./images/cms/data/import_files/15/15db4a947d4f11e9499ffa163e9c8758_9ff1425a7d5511e9499ffa163e9c8758.jpg&amp;quot;/&amp;gt;&lt;br /&gt;
&amp;lt;/property&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Ознакомится со стандартным шаблоном преобразования данных из 1С можно в файле /xsl/import/commerceML2.xsl&lt;br /&gt;
&lt;br /&gt;
Для реализации задачи необходимо переопределить шаблон &amp;#039;&amp;#039;&amp;#039;Товары/Товар&amp;#039;&amp;#039;&amp;#039; и добавить один дополнительный шаблон &amp;#039;&amp;#039;&amp;#039;Товар/Картинка[position() &amp;amp;amp;gt; 1]&amp;#039;&amp;#039;&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Переопределять и добавлять кастомные шаблоны преобразования можно в файле /xsl/import/custom/commerceML2.xsl.&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;
	&amp;lt;xsl:template match=&amp;quot;Товары/Товар&amp;quot;&amp;gt;&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;group_id&amp;quot; select=&amp;quot;string(Группы/Ид)&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;name&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:when test=&amp;quot;string-length(ПолноеНаименование)&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:value-of select=&amp;quot;ПолноеНаименование&amp;quot; /&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;xsl:value-of select=&amp;quot;Наименование&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:param&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;page id=&amp;quot;{Ид}&amp;quot; parentId=&amp;quot;{$group_id}&amp;quot; type-id=&amp;quot;{$group_id}&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:when 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:when&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:when test=&amp;quot;$isCatalogItemsRestoreOnImport = 1&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:attribute name=&amp;quot;is-deleted&amp;quot;&amp;gt;0&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;xsl:if test=&amp;quot;not(Группы/Ид)&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:attribute name=&amp;quot;parentId&amp;quot;&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$catalog-id&amp;quot; /&amp;gt;&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:attribute name=&amp;quot;type-id&amp;quot;&amp;gt;root-catalog-object-type&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;default-active&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;$catalog_item_activity&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/default-active&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;default-visible&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;$catalog_item_visible&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/default-visible&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;basetype module=&amp;quot;catalog&amp;quot; method=&amp;quot;object&amp;quot;&amp;gt;Объекты каталога&amp;lt;/basetype&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;name&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$name&amp;quot; /&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;xsl:if test=&amp;quot;string-length($catalog_item_template)&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;default-template&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:value-of select=&amp;quot;$catalog_item_template&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/default-template&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:if&amp;gt;			&lt;br /&gt;
			&amp;lt;properties&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:call-template name=&amp;quot;common-group&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:with-param name=&amp;quot;name&amp;quot; select=&amp;quot;$name&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;group name=&amp;quot;product&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;title&amp;gt;1C: Общие свойства&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;xsl:if test=&amp;quot;string-length(Описание)&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;property name=&amp;quot;description&amp;quot; title=&amp;quot;Описание&amp;quot; type=&amp;quot;wysiwyg&amp;quot; allow-runtime-add=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;type data-type=&amp;quot;wysiwyg&amp;quot; /&amp;gt;&lt;br /&gt;
							&amp;lt;title&amp;gt;Описание&amp;lt;/title&amp;gt;&lt;br /&gt;
							&amp;lt;value&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
									&amp;lt;xsl:when test=&amp;quot;Описание/@ФорматHTML = &amp;#039;true&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;xsl:value-of select=&amp;quot;Описание&amp;quot;/&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;xsl:value-of select=&amp;quot;php:function(&amp;#039;nl2br&amp;#039;, string(Описание))&amp;quot; disable-output-escaping=&amp;quot;yes&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;/value&amp;gt;&lt;br /&gt;
						&amp;lt;/property&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;1c_catalog_id&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Идентификатор каталога 1С&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$catalog-id&amp;quot; /&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;1c_product_id&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Идентификатор в 1С&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;artikul&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Артикул&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;Артикул&amp;quot; /&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;bar_code&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Штрих-код&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;Штрихкод&amp;quot; /&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;weight&amp;quot; type=&amp;quot;float&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Вес&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;ЗначенияРеквизитов/ЗначениеРеквизита[Наименование = &amp;#039;Вес&amp;#039;]/Значение&amp;quot;/&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;			&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;!-- Вызываем стандартный шаблон Картинка только для 1 элемента --&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:apply-templates select=&amp;quot;Картинка[1]&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
					&amp;lt;!-- Вызываем кастомный шаблон Картинка[position() &amp;amp;gt; 1] для последующих изображений --&amp;gt;&lt;br /&gt;
					&amp;lt;property name=&amp;quot;photos&amp;quot; type=&amp;quot;multiple_image&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Дополнительные фотографии товара&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:apply-templates select=&amp;quot;Картинка[position() &amp;amp;gt; 1]&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
				&amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;xsl:apply-templates select=&amp;quot;ЗначенияСвойств&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/properties&amp;gt;&lt;br /&gt;
		&amp;lt;/page&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;#039;&amp;#039;&amp;#039;Товар/Картинка[position() &amp;amp;amp;gt; 1]&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;xsl:template match=&amp;quot;Товар/Картинка[position() &amp;amp;gt; 1]&amp;quot;&amp;gt;		&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;string-length(.)&amp;quot;&amp;gt;			&lt;br /&gt;
			&amp;lt;value&amp;gt;&amp;lt;xsl:attribute name=&amp;quot;path&amp;quot;&amp;gt;./images/cms/data/&amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&amp;lt;/xsl:attribute&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&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;
После внесения всех изменений файл /xsl/import/custom/commerceML2.xsl, если Вы не вносили другие изменения, будет выглядеть вот так:&lt;br /&gt;
&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;!--&lt;br /&gt;
TODO: // Write here your own templates&lt;br /&gt;
--&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:php=&amp;quot;http://php.net/xsl&amp;quot;&lt;br /&gt;
	xmlns:udt=&amp;quot;http://umi-cms.ru/2007/UData/templates&amp;quot;&lt;br /&gt;
	extension-element-prefixes=&amp;quot;php&amp;quot;&lt;br /&gt;
	exclude-result-prefixes=&amp;quot;xsl php udt&amp;quot;&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;group_id&amp;quot; select=&amp;quot;string(Группы/Ид)&amp;quot; /&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;xsl:param name=&amp;quot;name&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:when test=&amp;quot;string-length(ПолноеНаименование)&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:value-of select=&amp;quot;ПолноеНаименование&amp;quot; /&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;xsl:value-of select=&amp;quot;Наименование&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:param&amp;gt;&lt;br /&gt;
&lt;br /&gt;
		&amp;lt;page id=&amp;quot;{Ид}&amp;quot; parentId=&amp;quot;{$group_id}&amp;quot; type-id=&amp;quot;{$group_id}&amp;quot;&amp;gt;&lt;br /&gt;
			&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:when 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:when&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:when test=&amp;quot;$isCatalogItemsRestoreOnImport = 1&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:attribute name=&amp;quot;is-deleted&amp;quot;&amp;gt;0&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:when&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:choose&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;xsl:if test=&amp;quot;not(Группы/Ид)&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:attribute name=&amp;quot;parentId&amp;quot;&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$catalog-id&amp;quot; /&amp;gt;&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:attribute name=&amp;quot;type-id&amp;quot;&amp;gt;root-catalog-object-type&amp;lt;/xsl:attribute&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;default-active&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;$catalog_item_activity&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/default-active&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;default-visible&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:value-of select=&amp;quot;$catalog_item_visible&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/default-visible&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;basetype module=&amp;quot;catalog&amp;quot; method=&amp;quot;object&amp;quot;&amp;gt;Объекты каталога&amp;lt;/basetype&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;name&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$name&amp;quot; /&amp;gt;&amp;lt;/name&amp;gt;&lt;br /&gt;
&lt;br /&gt;
			&amp;lt;xsl:if test=&amp;quot;string-length($catalog_item_template)&amp;quot;&amp;gt;&lt;br /&gt;
				&amp;lt;default-template&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:value-of select=&amp;quot;$catalog_item_template&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/default-template&amp;gt;&lt;br /&gt;
			&amp;lt;/xsl:if&amp;gt;			&lt;br /&gt;
			&amp;lt;properties&amp;gt;&lt;br /&gt;
				&amp;lt;xsl:call-template name=&amp;quot;common-group&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:with-param name=&amp;quot;name&amp;quot; select=&amp;quot;$name&amp;quot; /&amp;gt;&lt;br /&gt;
				&amp;lt;/xsl:call-template&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;group name=&amp;quot;product&amp;quot;&amp;gt;&lt;br /&gt;
					&amp;lt;title&amp;gt;1C: Общие свойства&amp;lt;/title&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;xsl:if test=&amp;quot;string-length(Описание)&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;property name=&amp;quot;description&amp;quot; title=&amp;quot;Описание&amp;quot; type=&amp;quot;wysiwyg&amp;quot; allow-runtime-add=&amp;quot;1&amp;quot;&amp;gt;&lt;br /&gt;
							&amp;lt;type data-type=&amp;quot;wysiwyg&amp;quot; /&amp;gt;&lt;br /&gt;
							&amp;lt;title&amp;gt;Описание&amp;lt;/title&amp;gt;&lt;br /&gt;
							&amp;lt;value&amp;gt;&lt;br /&gt;
								&amp;lt;xsl:choose&amp;gt;&lt;br /&gt;
									&amp;lt;xsl:when test=&amp;quot;Описание/@ФорматHTML = &amp;#039;true&amp;#039;&amp;quot;&amp;gt;&lt;br /&gt;
										&amp;lt;xsl:value-of select=&amp;quot;Описание&amp;quot;/&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;xsl:value-of select=&amp;quot;php:function(&amp;#039;nl2br&amp;#039;, string(Описание))&amp;quot; disable-output-escaping=&amp;quot;yes&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;/value&amp;gt;&lt;br /&gt;
						&amp;lt;/property&amp;gt;&lt;br /&gt;
					&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;1c_catalog_id&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Идентификатор каталога 1С&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;$catalog-id&amp;quot; /&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;1c_product_id&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Идентификатор в 1С&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;Ид&amp;quot; /&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;artikul&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Артикул&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;Артикул&amp;quot; /&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;bar_code&amp;quot; type=&amp;quot;string&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Штрих-код&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;Штрихкод&amp;quot; /&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;property name=&amp;quot;weight&amp;quot; type=&amp;quot;float&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Вес&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;value&amp;gt;&amp;lt;xsl:value-of select=&amp;quot;ЗначенияРеквизитов/ЗначениеРеквизита[Наименование = &amp;#039;Вес&amp;#039;]/Значение&amp;quot;/&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;			&lt;br /&gt;
&lt;br /&gt;
					&amp;lt;!-- Вызываем стандартный шаблон Картинка только для 1 элемента --&amp;gt;&lt;br /&gt;
					&amp;lt;xsl:apply-templates select=&amp;quot;Картинка[1]&amp;quot; /&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
					&amp;lt;!-- Вызываем кастомный шаблон Картинка[position() &amp;amp;gt; 1] для последующих изображений --&amp;gt;&lt;br /&gt;
					&amp;lt;property name=&amp;quot;photos&amp;quot; type=&amp;quot;multiple_image&amp;quot;&amp;gt;&lt;br /&gt;
						&amp;lt;title&amp;gt;Дополнительные фотографии товара&amp;lt;/title&amp;gt;&lt;br /&gt;
						&amp;lt;xsl:apply-templates select=&amp;quot;Картинка[position() &amp;amp;gt; 1]&amp;quot; /&amp;gt;&lt;br /&gt;
					&amp;lt;/property&amp;gt;&lt;br /&gt;
				&amp;lt;/group&amp;gt;&lt;br /&gt;
&lt;br /&gt;
				&amp;lt;xsl:apply-templates select=&amp;quot;ЗначенияСвойств&amp;quot; /&amp;gt;&lt;br /&gt;
			&amp;lt;/properties&amp;gt;&lt;br /&gt;
		&amp;lt;/page&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;&lt;br /&gt;
	&lt;br /&gt;
	&amp;lt;xsl:template match=&amp;quot;Товар/Картинка[position() &amp;amp;gt; 1]&amp;quot;&amp;gt;		&lt;br /&gt;
		&amp;lt;xsl:if test=&amp;quot;string-length(.)&amp;quot;&amp;gt;			&lt;br /&gt;
			&amp;lt;value&amp;gt;&amp;lt;xsl:attribute name=&amp;quot;path&amp;quot;&amp;gt;./images/cms/data/&amp;lt;xsl:value-of select=&amp;quot;.&amp;quot; /&amp;gt;&amp;lt;/xsl:attribute&amp;gt;&amp;lt;/value&amp;gt;&lt;br /&gt;
		&amp;lt;/xsl:if&amp;gt;&lt;br /&gt;
	&amp;lt;/xsl:template&amp;gt;		&lt;br /&gt;
&amp;lt;/xsl:stylesheet&amp;gt;&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Теперь при выгрузке из 1С все дополнительные изображения товаров будут сразу отображаться на сайте:&lt;br /&gt;
&lt;br /&gt;
[[Файл:multiple_image.png]]&lt;br /&gt;
&lt;br /&gt;
[[category:Интеграция с 1С]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Multiple_image.png&amp;diff=9218</id>
		<title>Файл:Multiple image.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Multiple_image.png&amp;diff=9218"/>
		<updated>2019-05-24T08:44:43Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
	<entry>
		<id>https://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BA%D0%B8%D0%B4%D0%BA%D0%B0_%D0%BF%D0%BE_%D0%BA%D0%B0%D1%80%D1%82%D0%B5&amp;diff=9206</id>
		<title>Скидка по карте</title>
		<link rel="alternate" type="text/html" href="https://wiki.umisoft.ru/index.php?title=%D0%A1%D0%BA%D0%B8%D0%B4%D0%BA%D0%B0_%D0%BF%D0%BE_%D0%BA%D0%B0%D1%80%D1%82%D0%B5&amp;diff=9206"/>
		<updated>2019-05-20T06:50:28Z</updated>

		<summary type="html">&lt;p&gt;Vitaliks: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&amp;#039;&amp;#039;&amp;#039;Актуально для версии 19.&amp;#039;&amp;#039;&amp;#039;&lt;br /&gt;
&lt;br /&gt;
Задача: активировать скидку, если у пользователя есть дисконтная карта.&lt;br /&gt;
&lt;br /&gt;
Создадим новый справочник &amp;quot;Скидочные карты&amp;quot; в модуле Шаблоны данных вкладка Справочники кнопка &amp;quot;Добавить справочник&amp;quot;. &amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Screenshot_207.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
В этом справочнике будут храниться номера дисконтных карт. Для добавления кода карты необходимо выбрать справочник и нажать кнопку &amp;quot;Посмотреть&amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Screenshot_209.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
Далее нужно создать новый тип, дочерний к типу &amp;quot;Правила скидок&amp;quot;, назовем его &amp;quot;Скидка по карте&amp;quot;.&amp;lt;br/&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Файл:Screenshot_210.png]][[Файл:Screenshot_208.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
В справочник &amp;quot;Типы правил скидки&amp;quot; необходимо добавить новый элемент с именем &amp;quot;Скидочная карта&amp;quot; для которого указать:&lt;br /&gt;
Идентификатор - discountcard, Тип данных (id) - нужно указать id созданного ранее типа данных &amp;quot;Скидка по карте&amp;quot;, &amp;quot;Допустимые типы скидки&amp;quot; добавить &amp;quot;На заказ&amp;quot;&amp;lt;br/&amp;gt;&lt;br /&gt;
[[Файл:Screenshot_212.png]][[Файл:Screenshot_211.png]]&amp;lt;br/&amp;gt;&lt;br /&gt;
В типе данных &amp;quot;Пользователь&amp;quot; необходимо добавить поле для номера дисконтной карты (пользователь сможет заполнить его в личном кабинете) в группу полей &amp;quot;Дополнительная информация&amp;quot; с идентификатором - card_discount.&lt;br /&gt;
&lt;br /&gt;
При создании новой скидки выберем тип &amp;quot;На заказ&amp;quot; и в качестве правила скидки - созданное выше.&lt;br /&gt;
В файле /classes/modules/emarket/classes/discounts/rules/discountcard.php (его необходимо создать) пишем следующий код:&lt;br /&gt;
&amp;lt;source lang=&amp;quot;php&amp;quot;&amp;gt;&lt;br /&gt;
&amp;lt;?php&lt;br /&gt;
class discountcardDiscountRule extends discountRule implements orderDiscountRule {&lt;br /&gt;
 &lt;br /&gt;
	public function validateOrder(order $order) {&lt;br /&gt;
		$permissions = permissionsCollection::getInstance();&lt;br /&gt;
		$currentUserId = $permissions-&amp;gt;getUserId();&lt;br /&gt;
		$objects = umiObjectsCollection::getInstance();&lt;br /&gt;
		$userObject = $objects-&amp;gt;getObject($currentUserId);&lt;br /&gt;
&lt;br /&gt;
		if ($userObject instanceof umiObject) {&lt;br /&gt;
			$cardNum = $userObject-&amp;gt;getValue(&amp;quot;card_discount&amp;quot;); &lt;br /&gt;
			$nums = new selector (&amp;#039;objects&amp;#039;);&lt;br /&gt;
			$nums-&amp;gt;types(&amp;#039;object-type&amp;#039;)-&amp;gt;id(&amp;#039;188&amp;#039;);&lt;br /&gt;
			$nums-&amp;gt;where(&amp;#039;name&amp;#039;)-&amp;gt;equals($cardNum);&lt;br /&gt;
			$res=$nums-&amp;gt;result;&lt;br /&gt;
			if (count($res)){&lt;br /&gt;
				return true;&lt;br /&gt;
			} else {&lt;br /&gt;
				return false;&lt;br /&gt;
			}&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;
В данном примере 188 - это id созданного справочника &amp;quot;Скидочные карты&amp;quot; с номерами карт.&lt;br /&gt;
Если номер карты, введенный пользователем в своем личном кабинете, будет найден в справочнике, то скидка активируется.&lt;br /&gt;
&lt;br /&gt;
Похожим образом можно реализовать скидку использующую промокод вместо карты.&lt;br /&gt;
[[Категория:Модуль Интернет магазин]][[Категория:Вопросы и уроки разработки сайтов на UMI.CMS]]&lt;/div&gt;</summary>
		<author><name>Vitaliks</name></author>
		
	</entry>
</feed>