https://wiki.umisoft.ru/api.php?action=feedcontributions&user=Sv&feedformat=atomUmicms - Вклад участника [ru]2024-03-28T09:07:41ZВклад участникаMediaWiki 1.31.0https://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=1167Заглавная страница2010-03-03T13:26:14Z<p>Sv: Снята защита со страницы «Заглавная страница»</p>
<hr />
<div>==== Всем ====<br />
*[[Решения проблем и ошибок]]<br><br />
*[[Общие вопросы работы UMI.CMS]]<br><br />
*[[Вопросы установки настройки и переноса]]<br><br />
*[[Глоссарий]]<br><br />
<br />
==== Разработчикам сайтов на UMI.CMS ====<br />
*[[Описание модулей и макросов]]<br><br />
*[[Вопросы и уроки разработки сайтов на UMI.CMS]]<br><br />
<br />
==== Разработчикам модулей и макросов ====<br />
*[[API]]<br />
*[[Архитектура UMI.CMS]]<br />
*[[:Категория:Написание кастомных макросов|Написание кастомных макросов]]<br />
<br />
<br />
См. также [[Служебная:Categories|Категории]]</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=1165Заглавная страница2010-03-03T13:25:26Z<p>Sv: Защищена страница «Заглавная страница» ([edit=sysop] (бессрочно) [move=sysop] (бессрочно)) [каскадная]</p>
<hr />
<div>==== Всем ====<br />
*[[Решения проблем и ошибок]]<br><br />
*[[Общие вопросы работы UMI.CMS]]<br><br />
*[[Вопросы установки настройки и переноса]]<br><br />
*[[Глоссарий]]<br><br />
<br />
==== Разработчикам сайтов на UMI.CMS ====<br />
*[[Описание модулей и макросов]]<br><br />
*[[Вопросы и уроки разработки сайтов на UMI.CMS]]<br><br />
<br />
==== Разработчикам модулей и макросов ====<br />
*[[API]]<br />
*[[Архитектура UMI.CMS]]<br />
*[[:Категория:Написание кастомных макросов|Написание кастомных макросов]]<br />
<br />
<br />
См. также [[Служебная:Categories|Категории]]</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9E%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_500_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8&diff=657Ошибка 500 после установки2010-01-25T08:31:50Z<p>Sv: Добавлена статья</p>
<hr />
<div>'''Проблема''': При входе на сайт выдается: "'''500 Internal Server Error'''"<br />
<br />
'''Условие''': В логах сервера имеется подобная запись: "''Request exceeded the limit of 10 internal redirects due to probable configuration error. Use 'LimitInternalRecursion' to increase the limit if necessary. Use 'LogLevel debug' to get a backtrace.''"<br />
<br />
'''Решение проблемы''': В файл "'''.htaccess'''" необходимо добавить запись "'''RewriteBase /'''"</div>Svhttps://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%BF%D0%B8%D1%81%D0%BA%D0%B0_%D0%BD%D0%B0_%D1%80%D0%B0%D1%81%D1%81%D1%8B%D0%BB%D0%BA%D1%83_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5_%D0%BE%D1%82%D0%BF%D1%80%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2%D0%B5%D0%B1%D1%84%D0%BE%D1%80%D0%BC%D1%8B&diff=654Автоматическая подписка на рассылку после отправки вебформы2010-01-24T11:47:50Z<p>Sv: Новая страница: «== Задача == Сделать так, чтобы после отправки вебформы введенный пользователем e-mail подпис…»</p>
<hr />
<div>== Задача ==<br />
<br />
Сделать так, чтобы после отправки вебформы введенный пользователем e-mail подписывался на рассылки. <br />
<br />
== Решение ==<br />
<br />
Добавить в шаблон вебформы ячейку<br />
<source lang="xml"><br />
<div><br />
<input class="checkbox" type="checkbox" name="autosubscribe" id="autosubscribe" value="Подписаться на рассылки компании" checked="checked" /><br />
<label class="inline" for="autosubscribe">Подписаться на рассылки компании</label><br />
</div><br />
</source><br />
<br />
Разместить кастомные макросы, перехватывающие событие отправки вебформы, в директорию ~/classes/modules/dispatches/<br />
<br />
'''__custom.php''':<br />
<source lang="php"><br />
<?php<br />
<br />
abstract class __custom_dispatches {<br />
<br />
//TODO: Write here your own macroses<br />
<br />
<br />
public function autoSubscribe(umiEventPoint $event) {<br />
$email = $event->getParam("email");<br />
$fio = $event->getParam("fio");<br />
<br />
list($lname, $fname) = split(" ", $fio);<br />
<br />
if(getRequest("autosubscribe")) {<br />
return $subscriber_id = $this->import_subscriber($email, $fname, $lname);<br />
} else {<br />
return false;<br />
}<br />
}<br />
};<br />
<br />
?><br />
</source><br />
<br />
'''custom_events.php''':<br />
<source lang="php"><br />
<?php<br />
$listener = new umiEventListener("webforms_post", "dispatches", "autoSubscribe");<br />
?><br />
</source></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%A4%D0%B0%D0%B9%D0%BB:Htaccess.zip&diff=643Файл:Htaccess.zip2010-01-19T10:02:06Z<p>Sv: </p>
<hr />
<div></div>Svhttps://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_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2,_%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D1%89%D0%B8%D1%85_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B,_%D0%B8_%D0%BF%D1%83%D1%81%D1%82%D1%8B%D1%85_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0_TPL&diff=642Как сделать различный вывод разделов, содержащих объекты, и пустых разделов каталога TPL2010-01-12T15:55:13Z<p>Sv: </p>
<hr />
<div>Допустим, необходимо реализовать следующую схему: разделы каталога, содержащие объекты, выглядят как ссылки на страницу просмотра списка объектов. Пустые разделы - просто текст. Раздел может содержать только подразделы или только объекты.<br />
<br />
В итоге должно быть:<br />
<pre><br />
Раздел 1-го уровня<br />
Раздел 2-го уровня (1)<br />
Раздел 3-го уровня (с объектами)<br />
Раздел 3-го уровня (пустой)<br />
Раздел 2-го уровня (с объектами)<br />
</pre><br />
<br />
Пример приводится на двух шаблонах: '''''~/tpls/catalog/default.tpl''''' и '''''~/tpls/catalog/default1.tpl''''':<br />
<br />
В стандартном шаблоне '''default.tpl''' редактируем блок ['category_block_line']:<br />
<pre><br />
<?php<br />
$FORMS['category_block_line'] = <<<END<br />
%catalog getObjectsList('default1', '%id%')%<br />
%catalog getCategoryList('default', '%id%')%<br />
END;<br />
?><br />
</pre><br />
<br />
<br />
А в шаблон '''default1.tpl''', по которому будет формироваться вывод разделов, размещаем следующий код:<br />
<pre><br />
<?php<br />
$FORMS = Array();<br />
$FORMS['objects_block'] = <<<END<br />
<li><a href="%content get_page_url('%id%')%"><b>%h1%</b></a></li><br />
END;<br />
<br />
<br />
$FORMS['objects_block_empty'] = <<<END<br />
<li>%h1%</li><br />
END;<br />
?><br />
</pre><br />
<br />
<br />
В итоге имеем необходимый результат.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%BF%D0%BE_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D0%BC_%D0%BF%D0%BE_%D0%B2%D1%81%D0%B5%D0%BC%D1%83_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D1%83_(TPL)&diff=641Как вывести фильтр по товарам по всему каталогу (TPL)2010-01-12T15:51:02Z<p>Sv: </p>
<hr />
<div>Для того, чтобы вывести фильтр по товарам по всему каталогу, а не по одному разделу, воспользуемся следующей конструкцией, созданной на любой странице контента:<br />
<pre><br />
%catalog search('/', 'cenovye_svojstva short_info', 'search', 11)%<br />
%catalog getObjectsList('default', 'mode=all')%<br />
</pre> <br />
<br />
где 11 - идентификатор (id) типа данных Объект каталога</div>Svhttps://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%B2%D1%8B%D0%B4%D0%B0%D1%87%D1%83_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0_%D0%B2_%D1%82%D1%80%D0%B8_%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%B0&diff=636Как сделать выдачу каталога в три столбца2010-01-12T15:05:58Z<p>Sv: </p>
<hr />
<div>Этим же способом можно выводить товары в два, четыре и более столбцов. Меняться будет только процентное соотношение в стилях:<br />
<pre><br />
$FORMS['objects_block'] = <<<END<br />
<br />
<h1>Каталог продукции</h1><br />
<div id="cat"><br />
%lines%<br />
</div><br />
<br />
END;<br />
<br />
<br />
<br />
$FORMS['objects_block_line'] = <<<END<br />
<br />
<div class="catItem"><br />
<h3><a href="%link%">%name%</a></h3><br />
<img src="%photo%" height="112" width="150" /><br />
<p>%descr%</p><br />
</div><br />
<br />
END;<br />
</pre><br />
<br />
<br />
В шаблоне дизайна нужно будет подключить CSS примерно следующего вида:<br />
<pre><br />
<br />
<style type="text/css"><br />
#cat {<br />
margin: 0 auto 0 auto;<br />
width: 100%;<br />
}<br />
#cat .catItem {<br />
width: 33%; float: left;<br />
margin: 0 0 10px; 0;<br />
}<br />
</style><br />
</pre><br />
<br />
Изменяя значение width: 33% можно добиться вывода в 2, 3, 4 и т.д. столбцов</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%B2_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%B5%3F&diff=632Как можно ускорить процесс импорта товаров в интернет-магазине?2010-01-12T14:53:37Z<p>Sv: </p>
<hr />
<div>Чтобы ускорить процесс импорта в 5-10 раз, надо отключить автоиндексацию при импорте (потом все равно можно доиндексировать в настройках модуля поиск, но это уже будет значительно быстрее). Если для импорта использовался отдельный скрипт, то достаточно в начале вписать '''define("DISABLE_SEARCH_REINDEX", 1);'''<br />
<br />
Если импорт проводится через панель администрирования, то следует либо временно отключить модуль поиска, либо временно вписать тот же define куда-нибудь.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%86%D0%B5%D0%BD%D1%8B_%D1%81_%D0%B4%D0%B2%D1%83%D0%BC%D1%8F_%D0%B7%D0%BD%D0%B0%D0%BA%D0%B0%D0%BC%D0%B8_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9&diff=629Вывод цены с двумя знаками после запятой2010-01-12T14:43:48Z<p>Sv: </p>
<hr />
<div>Попробуйте добавить следующий код в '''''~/classes/modules/custom.php''''', сразу после строки "//TODO: Write your own macroses here":<br />
<pre><br />
public function format_price($price)<br />
<br />
{<br />
return number_format($price, 2);<br />
}<br />
</pre><br />
<br />
Регистрировать его нигде не нужно.<br />
<br />
Пример использования (в зависимости от шаблона):<br />
<pre><br />
%custom format_price('%price%')%<br />
или<br />
%custom format_price('%value%')%<br />
</pre></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D0%B0%D0%B4%D1%80%D0%B5%D1%81_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%BE_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC%D1%83_%D0%BC%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80%D1%83_%D0%BE_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B5_%D0%B2_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%B5_TPL&diff=623Как добавить адрес доставки в письмо ответственному менеджеру о заказе в интернет-магазине TPL2010-01-12T14:33:20Z<p>Sv: </p>
<hr />
<div>Часто требуется в письме о новом заказе, которое приходит ответственному менеджеру, добавить информацию об адресе доставки. Делается это следующим образом:<br />
<br />
'''1.''' В шаблоне '''''~tpls/eshop/messages.tpl''''' в блоке ['order_items'] добавьте строку:<br />
<pre><br />
Адрес доставки: %eshop address_choice('zakaz')% <br />
</pre><br />
<br />
<br />
'''2.''' В папке '''''~tpls/eshop/delivery/''''' создайте новый шаблон '''zakaz.tpl''' с примерно следующим содержанием:<br />
<pre><br />
<?php<br />
$FORMS = Array();<br />
$FORMS['delivery_block'] = <<<END<br />
<h3>Адреса доставки</h3><br /><br />
<table border="0" width="100%"><br />
%lines%<br />
</table><br />
%eshop delivery_add()%<br />
END;<br />
<br />
<br />
$FORMS['delivery_block_line'] = <<<END<br />
<a href="%link%">% country%, %city%, %post_index%, %address%, %phone%</a><br />
END;<br />
<br />
<br />
$FORMS['choise_block'] = <<<END<br />
%lines%<br />
END;<br />
<br />
<br />
$FORMS['choise_block_empty'] = <<<END<br />
<p>Адресов нет</p><br />
END;<br />
<br />
<br />
$FORMS['choise_block_line'] = <<<END<br />
Страна: %country%<br><br />
Город: %city%<br><br />
Индекс: %post_index%<br><br />
Адрес: %address%<br><br />
Телефон: %phone%<br />
END;<br />
?><br />
</pre><br />
<br />
<br />
Решение немного сыровато - если адресов несколько, то в письме они покажутся оба, независимо от того, какой из них выбрал покупатель.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D1%8B_%D0%B4%D0%BB%D1%8F_flash-%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%B0_%D0%B2_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%BD%D1%82%D0%B0%D1%85&diff=620Размеры для flash-баннера в процентах2010-01-12T14:27:54Z<p>Sv: </p>
<hr />
<div><hr><br />
<h2>Как можно задать ширину флеш-баннера в процентах?</h2><br />
<br />
На данный момент для задания размеров у флеш-баннеров используются поля типа "Число". При этом символ "%" не работает. Мы предлагаем заменить тип этих полей на "Строка", а в файле classes/modules/banners/class.php заменить строки (285-286):<br />
<br />
$iWidth = (int) $oBanner->getValue('width');<br />
$iHeight = (int) $oBanner->getValue('height');<br />
<br />
на<br />
<br />
$iWidth = (string) $oBanner->getValue('width');<br />
$iHeight = (string) $oBanner->getValue('height');<br />
<br />
<br />
<br />
ВНИМАНИЕ, после обновления системы эти изменения пропадут и их нужно будет вносить заново!<br />
<br />
Для редактирования типа данных пройдите в модуль "Шаблоны-данных" -> "Баннер" -> редактирование "Баннер с флешкой". Поскольку все поля закрыты для редактирования, применим "хак": в адресной строке (при использовании скина "Основной") допишите ?skip-lock=1 и нажмите "ввод". После этого поля станут доступны для редактирования. Измените тип полей "Ширина" и "Высота" на "Строка"<br />
<br />
Внимание, если у других флеш-баннеров у вас заданы размеры, то после смены типа данных они "слетят".<br />
<br />
Будьте предельно внимательны и осторожны при редактировании закрытых полей, поскольку неверные действия могут повлечь за собой неработоспособность сайта<br />
<br />
Данное решение позволяет указывать размеры баннеров в процентах (например, 100%). Конвертирование символа "%" в &#0З7; никак не влияет на результат</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E,_%D0%B3%D0%B4%D0%B5_%D0%BA%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&diff=618Многоуровневое меню, где каждый уровень - отдельный список2010-01-12T13:58:19Z<p>Sv: </p>
<hr />
<div>Для решения этой задачи придется использовать не совсем корректный способ. Не рекомендуется использовать его для меню с большой вложенностью.<br />
<br />
'''1.''' В шаблоне дизайна пропишите макрос '''%content menu('sl')%''', а в папку '''''~tpls/content/menu/''''' поместите шаблон '''sl.tpl''' со следующим кодом:<br />
<pre><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
%lines%<br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
%sub_menu%<br />
END;<br />
<br />
$FORMS['menu_block_level2'] = <<<END<br />
<ul id="submenu">%lines%</ul><br />
%content menu('sl2',%pid%)%<br />
END;<br />
<br />
$FORMS['menu_line_level2'] = <<<END<br />
<li><a href="%link%">%text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level2_a'] = <<<END<br />
<li class="active"><a href="%link%">%text%</a></li><br />
END;<br />
<br />
?><br />
</pre><br />
<br />
Обратите внимание на макрос '''%content menu('sl2', %pid%)%''' из блока ['menu_block_level2']. В нем, с помощью макроса '''%pid%''' мы подхватываем идентификатор текущей (то есть активной) страницы и, таким образом, указываем макросу родительский элемент, от которого следует выводить страницы. <br />
<br />
'''2.''' Создайте шаблон '''''~tpls/content/menu/sl2.tpl''''' вида:<br />
<br />
<pre><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
<ul id="submenu">%lines%</ul><br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<li><a href="%link%">%text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
<li class="active"><a href="%link%">%text%</a></li><br />
END;<br />
<br />
?><br />
</pre><br />
<br />
По этому шаблону будут выводиться дочерние элементы меню.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%93%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E,_%D0%B3%D0%B4%D0%B5_%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA_-_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&diff=617Графическое меню, где вместо текстовых ссылок - изображения2010-01-12T13:38:43Z<p>Sv: </p>
<hr />
<div>Для возможности добавления в меню изображений вместо текстовых ссылок существуют поля "Изображение неактивного раздела" и "Изображение активного раздела", которые находятся в окне редактирования страницы в секции "Дополнительные параметры"[http://help.umi-cms.ru/index.html?2293.htm]<br />
<br />
'''1.''' Замените в шаблоне вывода меню (шаблоны меню располагаются в директории '''~/tpls/content/menu/''') макрос <br />
%text%<br />
в блоках вывода неактивных элементов ('''['menu_line_levelХ']''') на<br />
<img src="%menu_pic_ua%"><br />
<br />
а в блоках вывода активных элементов ('''['menu_line_levelХ_a']''') на<br />
<img src="%menu_pic_a%"><br />
<br />
<br />
'''2.''' При редактировании страницы загрузите изображения в соответствующие поля ("Изображение неактивного раздела" и "Изображение активного раздела")<br />
<br />
<br />
== Пример: ==<br />
<br />
<pre><br />
<?php<br />
<br />
$FORMS = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
<br />
<ul><br />
%lines%<br />
</ul><br />
<br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<li><a href="%link%"><img src="%menu_pic_ua%"></a></li><br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
<li><a href="%link%"><img src="%menu_pic_a%"></a></li><br />
END;<br />
<br />
?><br />
</pre></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%93%D1%80%D0%B0%D1%84%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E,_%D0%B3%D0%B4%D0%B5_%D0%B2%D0%BC%D0%B5%D1%81%D1%82%D0%BE_%D1%82%D0%B5%D0%BA%D1%81%D1%82%D0%BE%D0%B2%D1%8B%D1%85_%D1%81%D1%81%D1%8B%D0%BB%D0%BE%D0%BA_-_%D0%B8%D0%B7%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B5%D0%BD%D0%B8%D1%8F&diff=616Графическое меню, где вместо текстовых ссылок - изображения2010-01-12T13:37:15Z<p>Sv: </p>
<hr />
<div>Для возможности добавления в меню изображений вместо текстовых ссылок существуют поля "Изображение неактивного раздела" и "Изображение активного раздела", которые находятся в окне редактирования страницы в секции "Дополнительные параметры"[http://help.umi-cms.ru/index.html?2293.htm]<br />
<br />
'''1.''' Замените в шаблоне вывода меню (шаблоны меню располагаются в директории '''~/tpls/content/menu/''') макрос <br />
%text%<br />
в блоках вывода неактивных элементов ('''['menu_line_levelХ']''') на<br />
<img src="%menu_pic_ua%"><br />
<br />
а в блоках вывода активных элементов ('''['menu_line_levelХ_a']''') на<br />
<img src="%menu_pic_a%"><br />
<br />
<br />
'''2.''' При редактировании страницы загрузите изображения в соответствующие поля ("Изображение неактивного раздела" и "Изображение активного раздела")<br />
<br />
<br />
== Пример: ==<br />
<br />
<source lang="text"><br />
<?php<br />
<br />
$FORMS = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
<br />
<ul><br />
%lines%<br />
</ul><br />
<br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<li><a href="%link%"><img src="%menu_pic_ua%"></a></li><br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
<li><a href="%link%"><img src="%menu_pic_a%"></a></li><br />
END;<br />
<br />
?><br />
</source></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_USel&diff=613Протокол USel2009-12-24T12:44:59Z<p>Sv: </p>
<hr />
<div>Протокол для работы с данными системы. Представляет собой интерфейс для доступа к [[API]]-классу [[umiSelection]]. Позволяет создавать шаблоны выборок из базы данных и в дальнейшем использовать их точно так же, как макросы.<br />
<br />
== Описание ==<br />
Протокол '''usel''' обеспечивает доступ к базе данных '''UMI.CMS''' используя [[API]] функции (классы [[umiSelection]] и [[umiSelectionParser]]).<br />
Выборки из базы производятся по шаблонам, которые представляют собой [[XML]]-файлы в определенном формате. При запросе ресурса по протоколу '''usel''' производится следующим образом:<br />
# По [[URI]] определяется название [[XML]]-файла, в котором описан запрос выборки<br />
# В шаблон выборки подставляются параметры, переданные в [[URI]]<br />
# Шаблон выборки трансформируется в объект выборки ([[umiSelection]])<br />
# Выполняется выборка данных из [[База данных|БД]] ([[umiSelectionParser]])<br />
# Результат выборки преобразуется в [[XML]]-документ и возвращается в качестве содержания ресурса<br />
<br />
Все [[XML]]-файлы, которые содержат шаблоны '''usel''' должны находится в папке '''~/usels/'''.<br />
<br />
== Правила разбора [[URI]] ==<br />
<br />
=== Выборка без параметров ===<br />
Пример [[URI]]:<br />
usel://'''getSpecialNews'''/<br />
Вернет результаты выброки по шаблону, описанному в файле "~/usels/'''getSpecialNews'''.xml"<br />
<br />
=== Выборка по параметрам ===<br />
Пример [[URI]]:<br />
usel://'''getSomeCatalogItems'''/'''10'''/<br />
Вернет результаты выброки по шаблону, описанному в файле "~/usels/'''getSomeCatalogItems'''.xml" и подставит в шаблон вместо параметра '''{1}''' значение '''10'''.<br />
<br />
== Формат файла ==<br />
<br />
== Тег "selection" ==<br />
Корневой тег, который может содержать следующие теги:<br />
* '''target'''<br />
* '''property'''<br />
* '''sort'''<br />
* '''limit'''<br />
<br />
== Тег "target" ==<br />
Тег '''target''' содержит теги, которые указывают, по какому [[тип данных|типу данных]] необходимо отфильтровать результат, а также характер выборки (иными словами, ожидаемый результат).<br />
Ожидаемый результат выборки указывается атрибутом '''expected-result''' и может принимать 3 значения:<br />
* '''objects''' - выборка вернет результат, состоящий из набора тегов "object", которые соответствуют объектам системы (класс [[umiObject]]: пользователи, заказы, баннеры и т.п.)<br />
* '''objects count''' - вернет тоже, что и '''objects''', но в конец добавит тег '''total''' - общее количество результатов выборки без учета '''limit'''<br />
* '''pages''' - выборка вернет результат, состоящий из набора тегов "page", которые соответствуют страницам системы (класс [[umiHierarchyElement]]: страницы контента, новости, объекты каталога и т.п.)<br />
* '''pages count''' - вернет тоже, что и '''pages''', но в конец добавит тег '''total''' - общее количество результатов выборки без учета '''limit'''<br />
* '''count''' - вернет только число, которое соответствует количеству объектов в выборке, согласно результатам запроса<br />
<br />
Внутри тега '''target''' могут находится теги '''type''' и '''category'''.<br />
<source lang="xml"><br />
<target expected-result="pages"><br />
<type module="news" method="item" /><br />
<category>/news/politicheskiy_novosti/</category><br />
</target><br />
</source><br />
<br />
При использовании '''expected-result="pages"''' необходимо указать хоть один иерархический признак, по которому будет строиться запрос('''category'''). Например:<br />
<source lang="xml"><br />
<target expected-result="pages"><br />
<type id="802" /><br />
<category depth="10">/news/</category><br />
</target><br />
</source><br />
<br />
При использовании '''expecteed-result="count"''' по умолчанию считается количество объектов. Для того, чтобы явно задать необходимость считать количество страниц, нужно добавить атрибут '''force-hierarchy''' со значением '''"1"''':<br />
<source lang="xml"><br />
<target expected-result="count" force-hierarchy="1"><br />
<type module="news" method="item" /><br />
</target><br />
</source><br />
<br />
=== Тег "type" ===<br />
Указывает '''тип данных''', по которому будут фильтроваться результаты выборки. Этот тег может встречаться несколько раз в рамках тега [[target]]. В таком случае они будут объединены логическим "ИЛИ".<br />
Есть 2 способа указать [[тип данных]] используя тег '''type''':<br />
* Указать [[id типа данных]], используя атрибут '''"id"'''<br />
<source lang="xml"><br />
<type id="4" /> <!-- Соответствует типу "Пользователь" --><br />
</source><br />
* Указать [[назначение типа данных]], используя аттрибуты '''"module"''' и '''"method"'''.<br />
<source lang="xml"><br />
<type module="news" method="item" /> <!-- Соответствует всем новостям на сайте --><br />
</source><br />
<br />
=== Тег "category" ===<br />
Данный тег позволяет фильтровать результаты выборки по определенному разделу в дереве сайта. В качестве значения тега можно указать либо [[путь до страницы]], либо [[id страницы]]:<br />
<source lang="xml"><br />
<category>/market/</category><br />
<category>23771</category><br />
</source><br />
<br />
Помимо раздела можно указать глубину поиска атрибутом '''"depth"'''. По умолчанию его значение равно '''"0"''', что означает в данном случае поиск только в данном разделе без поиска по подразделам.<br />
<source lang="xml"><br />
<category depth="1">/market/</category> <!-- Искать в разделе "/market/" и в его подразделах на 1 уровень глубины --><br />
</source><br />
<br />
В рамках тега '''"target"''', данных тег можно использовать несколько раз.<br />
<br />
== Тег "property" ==<br />
Позволяет фильтровать результаты выборки по значениям свойств. Сам тег '''"property"''' может иметь только 2 атрибута:<br />
* '''name''' - обязательный атрибут, который содержит [[название поля]], по которому необходимо производить фильтрацию. Название поля всегда соответствует своему идентификатору в шаблонах данных за исключением 3 случая, когда в качестве значения атрибута '''"name"''' указано '''"name"'''. В этом случае считается, что фильтрация происходит по [[Название объекта|названию объекта]].<br />
* '''value''' - содержание, по которому необходимо проводить фильтрацию. Обязательность этого атрибута зависит от типа поля.<br />
* '''mode''' - необязательный атрибут который принимает значение '''"not"'''. В этом случае при фильтрации по этому полю будет использоваться логическое отрицание: т.е. будут выбраны все объекты или страницы, которые '''не''' содержат указанного значения.<br />
Еще одно возможное значение появилось в 2.6: '''like''', обозначает, что будет искаться неточное соответствие.<br />
<br />
Способ задания значения для фильтрации зависит от [[Тип поля|типа поля]].<br />
* Для следующих строковых полей можно задавать значение внутри атрибута '''"value"''' (точное соответствие):<br />
** [[Строка (Тип поля)|Строка]]<br />
** [[Текст (Тип поля)|Текст]]<br />
** [[HTML-текст (Тип поля)|HTML-текст]]<br />
** [[Теги (Тип поля)|Теги]]<br />
** [[Изображение (Тип поля)|Изображение]]<br />
** [[Файл (Тип поля)|Файл]]<br />
** [[Число (Тип поля)|Число]]<br />
** [[Число с точкой (Тип поля)|Число с точкой]]<br />
** [[Цена (Тип поля)|Цена]]<br />
** [[Дата (Тип поля)|Дата]]<br />
<br />
<source lang="xml"><br />
<property name="login" value="lyxsus" /><br />
</source><br />
<br />
* Для типа [[Кнопка-флажок (Тип поля)|"Кнопка-флажок"]] значение указывается в атрибуте '''"value"''' и может быть равно, либо не равно '''"1"'''.<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых чекбокс chk_box включен. --><br />
<br />
<property name="chk_box" value="1" /><br />
<br />
</source><br />
<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых чекбокс chk_box выключен. --><br />
<br />
<property name="chk_box" mode="not" value="1" /><br />
<br />
</source><br />
<br />
<br />
* Для числовых полей и полей, содержащий даты можно указать значение атрибуте '''"value"''' (тогда будет искаться точное сообщение), либо можно использовать интервальный поиска (используя теги '''"min-value"''' и '''"max-value"'''. Это актуально для следующих [[Тип поля|типов]]:<br />
** [[Число (Тип поля)|Число]]<br />
** [[Число с точкой (Тип поля)|Число с точкой]]<br />
** [[Цена (Тип поля)|Цена]]<br />
** [[Дата (Тип поля)|Дата]]<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых значение поля "price" больше 100, но меньше 500. --><br />
<property name="price"><br />
<min-value>100</min-value><br />
<max-value>500</max-value><br />
</property><br />
</source><br />
<br />
* Для фильтрации по полям типов [[Ссылка на дерево (Тип поля)|"Ссылка на дерево"]], [[Выпадающий список (Тип поля)|"Выпадающий список"]] и [[Выпадающий список со множественным выбором (Тип поля)|"Выпадающий список со множественным выбором"]] необходимо указывать значения используя теги "page" (для типа "Ссылка на дерево") или "object" (для типа [[Выпадающий список (Тип поля)|"Выпадающий список"]]).<br />
<br />
<br />
=== Тег "object" ===<br />
Используется для фильтрации по полям типа [[Выпадающий список (Тип поля)|"Выпадающий список"]] и [[Выпадающий список со множественным выбором (Тип поля)|"Выпадающий список со множественным выбором"]]. Находится внутри тега '''"property"''' и может указываться там несколько раз. В это случае значения будут объединены логическим "ИЛИ". Внутри тега '''"object"''' указывается [[Id объекта|id объекта]].<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых свойство "delivery_address" равно "26564". --><br />
<property name="delivery_address"><br />
<object>26564</object><br />
</property><br />
</source><br />
<br />
=== Тег "page" ===<br />
Используется для фильтрации по полям типа [[Ссылка на дерево (Тип поля)|"Ссылка на дерево"]]. Находится внутри тега "property" и может указываться там несколько раз. В это случае значения будут объединены логическим "ИЛИ". Внутри тега "page" указывается [[Id страницы|id страницы]], либо [[путь до страницы]].<br />
<source lang="xml"><br />
<!-- Найти все страницы, либо объекты, у которых свойство "recommend" равно странице с адресом "/market/akse.../", либо <br />
странице с id равным "23025" --><br />
<property name="recommed"><br />
<page>/market/aksessuary_dlya_homyachkov/povodki/povodok_leopardovyj/</page><br />
<page>23025</page><br />
</property><br />
</source><br />
<br />
=== Теги "min-value" и "max-value" ===<br />
Теги '''"min-value"''' и '''"max-value"''' используются для фильтрации числовых полей по принципу "не меньше чем" и "не больше чем":<br />
* Атрибут '''"min-value"''' указывает минимальное значение для фильтрации<br />
* Атрибут '''"max-value"''' указывает максимальное значение для фильтрации<br />
<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых значение поля "price" больше, чем "50" --><br />
<property name="price"><br />
<min-value>50</min-value><br />
</property><br />
</source><br />
<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых значение поля "price" меньше, чем "150" --><br />
<property name="price"><br />
<max-value>150</max-value><br />
</property><br />
</source><br />
<br />
Для полей типа [[Дата (Тип поля)|"Дата"]] можно задать формат значения для поиска используя атрибут '''format''' (на данный момент "timestamp" либо "UTC").<br />
<source lang="xml"><br />
<property name="last_request_time"><br />
<min-value format="timestamp">3600</min-value><br />
<max-value format="UTC">2007-11-10 14:48:10</max-value><br />
</property><br />
</source><br />
<br />
== Тег "sort" ==<br />
Задает поле для сортировки результатов выборки. Атрибутом '''"order"''' задается направление сортировки:<br />
* '''"ascending"''' - по возрастанию значения поля, указанного в теге '''"order"'''<br />
* '''"descending"''' - по убыванию значения поля, указанного в теге '''"order"'''<br />
По умолчанию считается, что атрибут '''"order"''' равен '''"ascending"'''.<br />
<source lang="xml"><br />
<!-- Отсортировать результаты выборки в обратном порядке по полю "publish_time" --><br />
<sort order="descending">publish_time</sort><br />
</source><br />
<br />
Помимо названия поля, данный тег может принимать следующие специальные значения:<br />
* '''"name"''' - сортировать по имени объекта.<br />
* '''"ord"''' - сортировать по [[Порядок страниц|порядку страниц]].<br />
* '''"rand()"''' - сортировать в случайном порядке. в этом случае атрибут '''"order"''' использовать не надо.<br />
<source lang="xml"><br />
<!-- Отсортировать результаты выборки в случайном порядке --><br />
<sort>rand()</sort><br />
</source><br />
<br />
Если ожидаемый результат выборки '''"count"''', то этот тег игнорируется.<br />
<br />
== Тег "limit" ==<br />
Используется для ограничения размера выборки и организации постраничного вывода информации, полученной через протокол '''"upage://"'''.<br />
В качестве значения тега передается количество элементов, которые будут присутствовать в выборке. Атрибут '''"page"''' используется для того, чтобы указать, какую страницу данных вернуть в результате выборки.<br />
<source lang="xml"><br />
<!-- Вывести только 10 первых объектов или страниц в результате выборки --><br />
<limit page="0">10</limit><br />
</source><br />
<br />
Если ожидаемый результат выборки '''"count"''', то этот тег игнорируется.<br />
<br />
<br />
== Передача параметров в шаблон выборки ==<br />
Для более гибкого использования шаблонов выборок в протоколе '''usel://''' можно использовать параметры.<br />
Для этого в шаблоне выборки конкретные значения убираются и помечаются особым форматированием: '''"{...}"'''.<br />
Есть 2 вида параметров в протоколе '''upage://''':<br />
# Индексированные параметры - передаются через "/")<br />
# Именованные параметры - передаются после знака "?" аналочино GET-параметрам в HTTP-запросе.<br />
<br />
=== Индексированные параметры ===<br />
Индексированные параметры передаются в запросе также, как и параметры макросов в протоколе [[udata|udata://]]:<br />
usel://someSelection/'''param1'''/'''param2'''/'''param3'''<br />
В шаблоне выборки для подстановки будут использоваться '''{1}''', '''{2}''', '''{3}''' соответственно.<br />
<br />
=== Именованные параметры ===<br />
Именованные параметры передаются как параметры запроса наподобие GET параметров:<br />
usel://someSelection/?'''limit'''=10&'''page'''=3<br />
Для подстановки их в шаблон выборки нужно писать '''{limit}''', '''{page}'''. Например:<br />
<source lang="xml"><br />
<limit page="{page}">{limit}</limit><br />
</source></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_USel&diff=612Протокол USel2009-12-24T12:44:40Z<p>Sv: </p>
<hr />
<div>Протокол для работы с данными системы. Представляет собой интерфейс для доступа к [[API]]-классу [[umiSelection]]. Позволяет создавать шаблоны выборок из базы данных и в дальнейшем использовать их точно так же, как макросы.<br />
<br />
== Описание ==<br />
Протокол '''usel''' обеспечивает доступ к базе данных '''UMI.CMS''' используя [[API]] функции (классы [[umiSelection]] и [[umiSelectionParser]]).<br />
Выборки из базы производятся по шаблонам, которые представляют собой [[XML]]-файлы в определенном формате. При запросе ресурса по протоколу '''usel''' производится следующим образом:<br />
# По [[URI]] определяется название [[XML]]-файла, в котором описан запрос выборки<br />
# В шаблон выборки подставляются параметры, переданные в [[URI]]<br />
# Шаблон выборки трансформируется в объект выборки ([[umiSelection]])<br />
# Выполняется выборка данных из [[База данных|БД]] ([[umiSelectionParser]])<br />
# Результат выборки преобразуется в [[XML]]-документ и возвращается в качестве содержания ресурса<br />
<br />
Все [[XML]]-файлы, которые содержат шаблоны '''usel''' должны находится в папке '''~/usels/'''.<br />
<br />
== Правила разбора [[URI]] ==<br />
<br />
=== Выборка без параметров ===<br />
Пример [[URI]]:<br />
usel://'''getSpecialNews'''/<br />
Вернет результаты выброки по шаблону, описанному в файле "~/usels/'''getSpecialNews'''.xml"<br />
<br />
=== Выборка по параметрам ===<br />
Пример [[URI]]:<br />
usel://'''getSomeCatalogItems'''/'''10'''/<br />
Вернет результаты выброки по шаблону, описанному в файле "~/usels/'''getSomeCatalogItems'''.xml" и подставит в шаблон вместо параметра '''{1}''' значение '''10'''.<br />
<br />
== Формат файла ==<br />
<br />
== Тег "selection" ==<br />
Корневой тег, который может содержать следующие теги:<br />
* '''target'''<br />
* '''property'''<br />
* '''sort'''<br />
* '''limit'''<br />
<br />
== Тег "target" ==<br />
Тег '''target''' содержит теги, которые указывают, по какому [[тип данных|типу данных]] необходимо отфильтровать результат, а также характер выборки (иными словами, ожидаемый результат).<br />
Ожидаемый результат выборки указывается атрибутом '''expected-result''' и может принимать 3 значения:<br />
* '''objects''' - выборка вернет результат, состоящий из набора тегов "object", которые соответствуют объектам системы (класс [[umiObject]]: пользователи, заказы, баннеры и т.п.)<br />
* '''objects count''' - вернет тоже, что и '''objects''', но в конец добавит тег '''total''' - общее количество результатов выборки без учета '''limit'''<br />
* '''pages''' - выборка вернет результат, состоящий из набора тегов "page", которые соответствуют страницам системы (класс [[umiHierarchyElement]]: страницы контента, новости, объекты каталога и т.п.)<br />
* '''pages count''' - вернет тоже, что и '''pages''', но в конец добавит тег '''total''' - общее количество результатов выборки без учета '''limit'''<br />
* '''count''' - вернет только число, которое соответствует количеству объектов в выборке, согласно результатам запроса<br />
<br />
Внутри тега '''target''' могут находится теги '''type''' и '''category'''.<br />
<source lang="xml"><br />
<target expected-result="pages"><br />
<type module="news" method="item" /><br />
<category>/news/politicheskiy_novosti/</category><br />
</target><br />
</source><br />
<br />
При использовании '''expected-result="pages"''' необходимо указать хоть один иерархический признак, по которому будет строиться запрос('''category'''). Например:<br />
<source lang="xml"><br />
<target expected-result="pages"><br />
<type id="802" /><br />
<category depth="10">/news/</category><br />
</target><br />
</source><br />
<br />
При использовании '''expecteed-result="count"''' по умолчанию считается количество объектов. Для того, чтобы явно задать необходимость считать количество страниц, нужно добавить атрибут '''force-hierarchy''' со значением '''"1"''':<br />
<source lang="xml"><br />
<target expected-result="count" force-hierarchy="1"><br />
<type module="news" method="item" /><br />
</target><br />
</source><br />
<br />
=== Тег "type" ===<br />
Указывает '''тип данных''', по которому будут фильтроваться результаты выборки. Этот тег может встречаться несколько раз в рамках тега [[target]]. В таком случае они будут объединены логическим "ИЛИ".<br />
Есть 2 способа указать [[тип данных]] используя тег '''type''':<br />
* Указать [[id типа данных]], используя атрибут '''"id"'''<br />
<source lang="xml"><br />
<type id="4" /> <!-- Соответствует типу "Пользователь" --><br />
</source><br />
* Указать [[назначение типа данных]], используя аттрибуты '''"module"''' и '''"method"'''.<br />
<source lang="xml"><br />
<type module="news" method="item" /> <!-- Соответствует всем новостям на сайте --><br />
</source><br />
<br />
=== Тег "category" ===<br />
Данный тег позволяет фильтровать результаты выборки по определенному разделу в дереве сайта. В качестве значения тега можно указать либо [[путь до страницы]], либо [[id страницы]]:<br />
<source lang="xml"><br />
<category>/market/</category><br />
<category>23771</category><br />
</source><br />
<br />
Помимо раздела можно указать глубину поиска атрибутом '''"depth"'''. По умолчанию его значение равно '''"0"''', что означает в данном случае поиск только в данном разделе без поиска по подразделам.<br />
<source lang="xml"><br />
<category depth="1">/market/</category> <!-- Искать в разделе "/market/" и в его подразделах на 1 уровень глубины --><br />
</source><br />
<br />
В рамках тега '''"target"''', данных тег можно использовать несколько раз.<br />
<br />
== Тег "property" ==<br />
Позволяет фильтровать результаты выборки по значениям свойств. Сам тег '''"property"''' может иметь только 2 атрибута:<br />
* '''name''' - обязательный атрибут, который содержит [[название поля]], по которому необходимо производить фильтрацию. Название поля всегда соответствует своему идентификатору в шаблонах данных за исключением 3 случая, когда в качестве значения атрибута '''"name"''' указано '''"name"'''. В этом случае считается, что фильтрация происходит по [[Название объекта|названию объекта]].<br />
* '''value''' - содержание, по которому необходимо проводить фильтрацию. Обязательность этого атрибута зависит от типа поля.<br />
* '''mode''' - необязательный атрибут который принимает значение '''"not"'''. В этом случае при фильтрации по этому полю будет использоваться логическое отрицание: т.е. будут выбраны все объекты или страницы, которые '''не''' содержат указанного значения.<br />
Еще одно возможное значение появилось в 2.6: '''like''', обозначает, что будет искаться неточное соответствие.<br />
<br />
Способ задания значения для фильтрации зависит от [[Тип поля|типа поля]].<br />
* Для следующих строковых полей можно задавать значение внутри атрибута '''"value"''' (точное соответствие):<br />
** [[Строка (Тип поля)|Строка]]<br />
** [[Текст (Тип поля)|Текст]]<br />
** [[HTML-текст (Тип поля)|HTML-текст]]<br />
** [[Теги (Тип поля)|Теги]]<br />
** [[Изображение (Тип поля)|Изображение]]<br />
** [[Файл (Тип поля)|Файл]]<br />
** [[Число (Тип поля)|Число]]<br />
** [[Число с точкой (Тип поля)|Число с точкой]]<br />
** [[Цена (Тип поля)|Цена]]<br />
** [[Дата (Тип поля)|Дата]]<br />
<br />
<source lang="xml"><br />
<property name="login" value="lyxsus" /><br />
</source><br />
<br />
* Для типа [[Кнопка-флажок (Тип поля)|"Кнопка-флажок"]] значение указывается в атрибуте '''"value"''' и может быть равно, либо не равно '''"1"'''.<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых чекбокс chk_box включен. --><br />
<br />
<property name="chk_box" value="1" /><br />
<br />
</source><br />
<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых чекбокс chk_box выключен. --><br />
<br />
<property name="chk_box" mode="not" value="1" /><br />
<br />
</source><br />
<br />
<br />
* Для числовых полей и полей, содержащий даты можно указать значение атрибуте '''"value"''' (тогда будет искаться точное сообщение), либо можно использовать интервальный поиска (используя теги '''"min-value"''' и '''"max-value"'''. Это актуально для следующих [[Тип поля|типов]]:<br />
** [[Число (Тип поля)|Число]]<br />
** [[Число с точкой (Тип поля)|Число с точкой]]<br />
** [[Цена (Тип поля)|Цена]]<br />
** [[Дата (Тип поля)|Дата]]<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых значение поля "price" больше 100, но меньше 500. --><br />
<property name="price"><br />
<min-value>100</min-value><br />
<max-value>500</max-value><br />
</property><br />
</source><br />
<br />
* Для фильтрации по полям типов [[Ссылка на дерево (Тип поля)|"Ссылка на дерево"]], [[Выпадающий список (Тип поля)|"Выпадающий список"]] и [[Выпадающий список со множественным выбором (Тип поля)|"Выпадающий список со множественным выбором"]] необходимо указывать значения используя теги "page" (для типа "Ссылка на дерево") или "object" (для типа [[Выпадающий список (Тип поля)|"Выпадающий список"]]).<br />
<br />
<br />
=== Тег "object" ===<br />
Используется для фильтрации по полям типа [[Выпадающий список (Тип поля)|"Выпадающий список"]] и [[Выпадающий список со множественным выбором (Тип поля)|"Выпадающий список со множественным выбором"]]. Находится внутри тега '''"property"''' и может указываться там несколько раз. В это случае значения будут объединены логическим "ИЛИ". Внутри тега '''"object"''' указывается [[Id объекта|id объекта]].<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых свойство "delivery_address" равно "26564". --><br />
<property name="delivery_address"><br />
<object>26564</object><br />
</property><br />
</source><br />
<br />
=== Тег "page" ===<br />
Используется для фильтрации по полям типа [[Ссылка на дерево (Тип поля)|"Ссылка на дерево"]]. Находится внутри тега "property" и может указываться там несколько раз. В это случае значения будут объединены логическим "ИЛИ". Внутри тега "page" указывается [[Id страницы|id страницы]], либо [[путь до страницы]].<br />
<source lang="xml"><br />
<!-- Найти все страницы, либо объекты, у которых свойство "recommend" равно странице с адресом "/market/akse.../", либо <br />
странице с id равным "23025" --><br />
<property name="recommed"><br />
<page>/market/aksessuary_dlya_homyachkov/povodki/povodok_leopardovyj/</page><br />
<page>23025</page><br />
</property><br />
</source><br />
<br />
=== Теги "min-value" и "max-value" ===<br />
Теги '''"min-value"''' и '''"max-value"''' используются для фильтрации числовых полей по принципу "не меньше чем" и "не больше чем":<br />
* Атрибут '''"min-value"''' указывает минимальное значение для фильтрации<br />
* Атрибут '''"max-value"''' указывает максимальное значение для фильтрации<br />
<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых значение поля "price" больше, чем "50" --><br />
<property name="price"><br />
<min-value>50</min-value><br />
</property><br />
</source><br />
<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых значение поля "price" меньше, чем "150" --><br />
<property name="price"><br />
<max-value>150</max-value><br />
</property><br />
</source><br />
<br />
Для полей типа [[Дата (Тип поля)|"Дата"]] можно задать формат значения для поиска используя атрибут '''format''' (на данный момент "timestamp" либо "UTC").<br />
<source lang="xml"><br />
<property name="last_request_time"><br />
<min-value format="timestamp">3600</min-value><br />
<max-value format="UTC">2007-11-10 14:48:10</max-value><br />
</property><br />
</source><br />
<br />
== Тег "sort" ==<br />
Задает поле для сортировки результатов выборки. Атрибутом '''"order"''' задается направление сортировки:<br />
* '''"ascending"''' - по возрастанию значения поля, указанного в теге '''"order"'''<br />
* '''"descending"''' - по убыванию значения поля, указанного в теге '''"order"'''<br />
По умолчанию считается, что атрибут '''"order"''' равен '''"ascending"'''.<br />
<source lang="xml"><br />
<!-- Отсортировать результаты выборки в обратном порядке по полю "publish_time" --><br />
<sort order="descending">publish_time</sort><br />
</source><br />
<br />
Помимо названия поля, данный тег может принимать следующие специальные значения:<br />
* '''"name"''' - сортировать по имени объекта.<br />
* '''"ord"''' - сортировать по [[Порядок страниц|порядку страниц]].<br />
* '''"rand()"''' - сортировать в случайном порядке. в этом случае атрибут '''"order"''' использовать не надо.<br />
<source lang="xml"><br />
<!-- Отсортировать результаты выборки в случайном порядке --><br />
<sort>rand()</sort><br />
</source><br />
<br />
Если ожидаемый результат выборки '''"count"''', то этот тег игнорируется.<br />
<br />
== Тег "limit" ==<br />
Используется для ограничения размера выборки и организации постраничного вывода информации, полученной через протокол '''"upage://"'''.<br />
В качестве значения тега передается количество элементов, которые будут присутствовать в выборке. Атрибут '''"page"''' используется для того, чтобы указать, какую страницу данных вернуть в результате выборки.<br />
<source lang="xml"><br />
<!-- Вывести только 10 первых объектов или страниц в результате выборки --><br />
<limit page="0">10</limit><br />
</source><br />
<br />
Если ожидаемый результат выборки '''"count"''', то этот тег игнорируется.<br />
<br />
<br />
== Передача параметров в шаблон выборки ==<br />
Для более гибкого использования шаблонов выборок в протоколе '''usel://''' можно использовать параметры.<br />
Для этого в шаблоне выборки конкретные значения убираются и помечаются особым форматированием: '''"{...}"'''.<br />
Есть 2 вида параметров в протоколе '''upage://''':<br />
# Индексированные параметры - передаются через "/")<br />
# Именованные параметры - передаются после знака "?" аналочино GET-параметрам в HTTP-запросе.<br />
<br />
=== Индексированные параметры ===<br />
Индексированные параметры передаются в запросе также, как и параметры макросов в протоколе [[udata|udata://]]:<br />
usel://someSelection/'''param1'''/'''param2'''/'''param3'''<br />
В шаблоне выборки для подстановки будут использоваться '''{1}''', '''{2}''', '''{3}''' соответственно.<br />
<br />
=== Именованные параметры ===<br />
Именованные параметры передаются как параметры запроса наподобие GET параметров:<br />
usel://someSelection/?'''limit'''=10&'''page'''=3<br />
Для подстановки их в шаблон выборки нужно писать '''{limit}''', '''{page}'''. Например:<br />
<source lang="xml"><br />
<limit page="{page}">{limit}</limit><br />
</source><br />
<br />
== Список протоколов ==<br />
* [[udata|udata://]]<br />
* [[upage|upage://]]<br />
* [[uobject|uobject://]]<br />
* [[ufs|ufs://]]<br />
* [[umap|umap://]]</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%BE%D1%82%D0%BE%D0%BA%D0%BE%D0%BB_USel&diff=611Протокол USel2009-12-24T12:44:30Z<p>Sv: Новая страница: «ротокол для работы с данными системы. Представляет собой интерфейс для доступа к API-клас…»</p>
<hr />
<div>ротокол для работы с данными системы. Представляет собой интерфейс для доступа к [[API]]-классу [[umiSelection]]. Позволяет создавать шаблоны выборок из базы данных и в дальнейшем использовать их точно так же, как макросы.<br />
<br />
== Описание ==<br />
Протокол '''usel''' обеспечивает доступ к базе данных '''UMI.CMS''' используя [[API]] функции (классы [[umiSelection]] и [[umiSelectionParser]]).<br />
Выборки из базы производятся по шаблонам, которые представляют собой [[XML]]-файлы в определенном формате. При запросе ресурса по протоколу '''usel''' производится следующим образом:<br />
# По [[URI]] определяется название [[XML]]-файла, в котором описан запрос выборки<br />
# В шаблон выборки подставляются параметры, переданные в [[URI]]<br />
# Шаблон выборки трансформируется в объект выборки ([[umiSelection]])<br />
# Выполняется выборка данных из [[База данных|БД]] ([[umiSelectionParser]])<br />
# Результат выборки преобразуется в [[XML]]-документ и возвращается в качестве содержания ресурса<br />
<br />
Все [[XML]]-файлы, которые содержат шаблоны '''usel''' должны находится в папке '''~/usels/'''.<br />
<br />
== Правила разбора [[URI]] ==<br />
<br />
=== Выборка без параметров ===<br />
Пример [[URI]]:<br />
usel://'''getSpecialNews'''/<br />
Вернет результаты выброки по шаблону, описанному в файле "~/usels/'''getSpecialNews'''.xml"<br />
<br />
=== Выборка по параметрам ===<br />
Пример [[URI]]:<br />
usel://'''getSomeCatalogItems'''/'''10'''/<br />
Вернет результаты выброки по шаблону, описанному в файле "~/usels/'''getSomeCatalogItems'''.xml" и подставит в шаблон вместо параметра '''{1}''' значение '''10'''.<br />
<br />
== Формат файла ==<br />
<br />
== Тег "selection" ==<br />
Корневой тег, который может содержать следующие теги:<br />
* '''target'''<br />
* '''property'''<br />
* '''sort'''<br />
* '''limit'''<br />
<br />
== Тег "target" ==<br />
Тег '''target''' содержит теги, которые указывают, по какому [[тип данных|типу данных]] необходимо отфильтровать результат, а также характер выборки (иными словами, ожидаемый результат).<br />
Ожидаемый результат выборки указывается атрибутом '''expected-result''' и может принимать 3 значения:<br />
* '''objects''' - выборка вернет результат, состоящий из набора тегов "object", которые соответствуют объектам системы (класс [[umiObject]]: пользователи, заказы, баннеры и т.п.)<br />
* '''objects count''' - вернет тоже, что и '''objects''', но в конец добавит тег '''total''' - общее количество результатов выборки без учета '''limit'''<br />
* '''pages''' - выборка вернет результат, состоящий из набора тегов "page", которые соответствуют страницам системы (класс [[umiHierarchyElement]]: страницы контента, новости, объекты каталога и т.п.)<br />
* '''pages count''' - вернет тоже, что и '''pages''', но в конец добавит тег '''total''' - общее количество результатов выборки без учета '''limit'''<br />
* '''count''' - вернет только число, которое соответствует количеству объектов в выборке, согласно результатам запроса<br />
<br />
Внутри тега '''target''' могут находится теги '''type''' и '''category'''.<br />
<source lang="xml"><br />
<target expected-result="pages"><br />
<type module="news" method="item" /><br />
<category>/news/politicheskiy_novosti/</category><br />
</target><br />
</source><br />
<br />
При использовании '''expected-result="pages"''' необходимо указать хоть один иерархический признак, по которому будет строиться запрос('''category'''). Например:<br />
<source lang="xml"><br />
<target expected-result="pages"><br />
<type id="802" /><br />
<category depth="10">/news/</category><br />
</target><br />
</source><br />
<br />
При использовании '''expecteed-result="count"''' по умолчанию считается количество объектов. Для того, чтобы явно задать необходимость считать количество страниц, нужно добавить атрибут '''force-hierarchy''' со значением '''"1"''':<br />
<source lang="xml"><br />
<target expected-result="count" force-hierarchy="1"><br />
<type module="news" method="item" /><br />
</target><br />
</source><br />
<br />
=== Тег "type" ===<br />
Указывает '''тип данных''', по которому будут фильтроваться результаты выборки. Этот тег может встречаться несколько раз в рамках тега [[target]]. В таком случае они будут объединены логическим "ИЛИ".<br />
Есть 2 способа указать [[тип данных]] используя тег '''type''':<br />
* Указать [[id типа данных]], используя атрибут '''"id"'''<br />
<source lang="xml"><br />
<type id="4" /> <!-- Соответствует типу "Пользователь" --><br />
</source><br />
* Указать [[назначение типа данных]], используя аттрибуты '''"module"''' и '''"method"'''.<br />
<source lang="xml"><br />
<type module="news" method="item" /> <!-- Соответствует всем новостям на сайте --><br />
</source><br />
<br />
=== Тег "category" ===<br />
Данный тег позволяет фильтровать результаты выборки по определенному разделу в дереве сайта. В качестве значения тега можно указать либо [[путь до страницы]], либо [[id страницы]]:<br />
<source lang="xml"><br />
<category>/market/</category><br />
<category>23771</category><br />
</source><br />
<br />
Помимо раздела можно указать глубину поиска атрибутом '''"depth"'''. По умолчанию его значение равно '''"0"''', что означает в данном случае поиск только в данном разделе без поиска по подразделам.<br />
<source lang="xml"><br />
<category depth="1">/market/</category> <!-- Искать в разделе "/market/" и в его подразделах на 1 уровень глубины --><br />
</source><br />
<br />
В рамках тега '''"target"''', данных тег можно использовать несколько раз.<br />
<br />
== Тег "property" ==<br />
Позволяет фильтровать результаты выборки по значениям свойств. Сам тег '''"property"''' может иметь только 2 атрибута:<br />
* '''name''' - обязательный атрибут, который содержит [[название поля]], по которому необходимо производить фильтрацию. Название поля всегда соответствует своему идентификатору в шаблонах данных за исключением 3 случая, когда в качестве значения атрибута '''"name"''' указано '''"name"'''. В этом случае считается, что фильтрация происходит по [[Название объекта|названию объекта]].<br />
* '''value''' - содержание, по которому необходимо проводить фильтрацию. Обязательность этого атрибута зависит от типа поля.<br />
* '''mode''' - необязательный атрибут который принимает значение '''"not"'''. В этом случае при фильтрации по этому полю будет использоваться логическое отрицание: т.е. будут выбраны все объекты или страницы, которые '''не''' содержат указанного значения.<br />
Еще одно возможное значение появилось в 2.6: '''like''', обозначает, что будет искаться неточное соответствие.<br />
<br />
Способ задания значения для фильтрации зависит от [[Тип поля|типа поля]].<br />
* Для следующих строковых полей можно задавать значение внутри атрибута '''"value"''' (точное соответствие):<br />
** [[Строка (Тип поля)|Строка]]<br />
** [[Текст (Тип поля)|Текст]]<br />
** [[HTML-текст (Тип поля)|HTML-текст]]<br />
** [[Теги (Тип поля)|Теги]]<br />
** [[Изображение (Тип поля)|Изображение]]<br />
** [[Файл (Тип поля)|Файл]]<br />
** [[Число (Тип поля)|Число]]<br />
** [[Число с точкой (Тип поля)|Число с точкой]]<br />
** [[Цена (Тип поля)|Цена]]<br />
** [[Дата (Тип поля)|Дата]]<br />
<br />
<source lang="xml"><br />
<property name="login" value="lyxsus" /><br />
</source><br />
<br />
* Для типа [[Кнопка-флажок (Тип поля)|"Кнопка-флажок"]] значение указывается в атрибуте '''"value"''' и может быть равно, либо не равно '''"1"'''.<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых чекбокс chk_box включен. --><br />
<br />
<property name="chk_box" value="1" /><br />
<br />
</source><br />
<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых чекбокс chk_box выключен. --><br />
<br />
<property name="chk_box" mode="not" value="1" /><br />
<br />
</source><br />
<br />
<br />
* Для числовых полей и полей, содержащий даты можно указать значение атрибуте '''"value"''' (тогда будет искаться точное сообщение), либо можно использовать интервальный поиска (используя теги '''"min-value"''' и '''"max-value"'''. Это актуально для следующих [[Тип поля|типов]]:<br />
** [[Число (Тип поля)|Число]]<br />
** [[Число с точкой (Тип поля)|Число с точкой]]<br />
** [[Цена (Тип поля)|Цена]]<br />
** [[Дата (Тип поля)|Дата]]<br />
<source lang="xml"><br />
<!-- Выбрать все объекты или страницы, у которых значение поля "price" больше 100, но меньше 500. --><br />
<property name="price"><br />
<min-value>100</min-value><br />
<max-value>500</max-value><br />
</property><br />
</source><br />
<br />
* Для фильтрации по полям типов [[Ссылка на дерево (Тип поля)|"Ссылка на дерево"]], [[Выпадающий список (Тип поля)|"Выпадающий список"]] и [[Выпадающий список со множественным выбором (Тип поля)|"Выпадающий список со множественным выбором"]] необходимо указывать значения используя теги "page" (для типа "Ссылка на дерево") или "object" (для типа [[Выпадающий список (Тип поля)|"Выпадающий список"]]).<br />
<br />
<br />
=== Тег "object" ===<br />
Используется для фильтрации по полям типа [[Выпадающий список (Тип поля)|"Выпадающий список"]] и [[Выпадающий список со множественным выбором (Тип поля)|"Выпадающий список со множественным выбором"]]. Находится внутри тега '''"property"''' и может указываться там несколько раз. В это случае значения будут объединены логическим "ИЛИ". Внутри тега '''"object"''' указывается [[Id объекта|id объекта]].<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых свойство "delivery_address" равно "26564". --><br />
<property name="delivery_address"><br />
<object>26564</object><br />
</property><br />
</source><br />
<br />
=== Тег "page" ===<br />
Используется для фильтрации по полям типа [[Ссылка на дерево (Тип поля)|"Ссылка на дерево"]]. Находится внутри тега "property" и может указываться там несколько раз. В это случае значения будут объединены логическим "ИЛИ". Внутри тега "page" указывается [[Id страницы|id страницы]], либо [[путь до страницы]].<br />
<source lang="xml"><br />
<!-- Найти все страницы, либо объекты, у которых свойство "recommend" равно странице с адресом "/market/akse.../", либо <br />
странице с id равным "23025" --><br />
<property name="recommed"><br />
<page>/market/aksessuary_dlya_homyachkov/povodki/povodok_leopardovyj/</page><br />
<page>23025</page><br />
</property><br />
</source><br />
<br />
=== Теги "min-value" и "max-value" ===<br />
Теги '''"min-value"''' и '''"max-value"''' используются для фильтрации числовых полей по принципу "не меньше чем" и "не больше чем":<br />
* Атрибут '''"min-value"''' указывает минимальное значение для фильтрации<br />
* Атрибут '''"max-value"''' указывает максимальное значение для фильтрации<br />
<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых значение поля "price" больше, чем "50" --><br />
<property name="price"><br />
<min-value>50</min-value><br />
</property><br />
</source><br />
<br />
<source lang="xml"><br />
<!-- Найти все объекты или страницы, у которых значение поля "price" меньше, чем "150" --><br />
<property name="price"><br />
<max-value>150</max-value><br />
</property><br />
</source><br />
<br />
Для полей типа [[Дата (Тип поля)|"Дата"]] можно задать формат значения для поиска используя атрибут '''format''' (на данный момент "timestamp" либо "UTC").<br />
<source lang="xml"><br />
<property name="last_request_time"><br />
<min-value format="timestamp">3600</min-value><br />
<max-value format="UTC">2007-11-10 14:48:10</max-value><br />
</property><br />
</source><br />
<br />
== Тег "sort" ==<br />
Задает поле для сортировки результатов выборки. Атрибутом '''"order"''' задается направление сортировки:<br />
* '''"ascending"''' - по возрастанию значения поля, указанного в теге '''"order"'''<br />
* '''"descending"''' - по убыванию значения поля, указанного в теге '''"order"'''<br />
По умолчанию считается, что атрибут '''"order"''' равен '''"ascending"'''.<br />
<source lang="xml"><br />
<!-- Отсортировать результаты выборки в обратном порядке по полю "publish_time" --><br />
<sort order="descending">publish_time</sort><br />
</source><br />
<br />
Помимо названия поля, данный тег может принимать следующие специальные значения:<br />
* '''"name"''' - сортировать по имени объекта.<br />
* '''"ord"''' - сортировать по [[Порядок страниц|порядку страниц]].<br />
* '''"rand()"''' - сортировать в случайном порядке. в этом случае атрибут '''"order"''' использовать не надо.<br />
<source lang="xml"><br />
<!-- Отсортировать результаты выборки в случайном порядке --><br />
<sort>rand()</sort><br />
</source><br />
<br />
Если ожидаемый результат выборки '''"count"''', то этот тег игнорируется.<br />
<br />
== Тег "limit" ==<br />
Используется для ограничения размера выборки и организации постраничного вывода информации, полученной через протокол '''"upage://"'''.<br />
В качестве значения тега передается количество элементов, которые будут присутствовать в выборке. Атрибут '''"page"''' используется для того, чтобы указать, какую страницу данных вернуть в результате выборки.<br />
<source lang="xml"><br />
<!-- Вывести только 10 первых объектов или страниц в результате выборки --><br />
<limit page="0">10</limit><br />
</source><br />
<br />
Если ожидаемый результат выборки '''"count"''', то этот тег игнорируется.<br />
<br />
<br />
== Передача параметров в шаблон выборки ==<br />
Для более гибкого использования шаблонов выборок в протоколе '''usel://''' можно использовать параметры.<br />
Для этого в шаблоне выборки конкретные значения убираются и помечаются особым форматированием: '''"{...}"'''.<br />
Есть 2 вида параметров в протоколе '''upage://''':<br />
# Индексированные параметры - передаются через "/")<br />
# Именованные параметры - передаются после знака "?" аналочино GET-параметрам в HTTP-запросе.<br />
<br />
=== Индексированные параметры ===<br />
Индексированные параметры передаются в запросе также, как и параметры макросов в протоколе [[udata|udata://]]:<br />
usel://someSelection/'''param1'''/'''param2'''/'''param3'''<br />
В шаблоне выборки для подстановки будут использоваться '''{1}''', '''{2}''', '''{3}''' соответственно.<br />
<br />
=== Именованные параметры ===<br />
Именованные параметры передаются как параметры запроса наподобие GET параметров:<br />
usel://someSelection/?'''limit'''=10&'''page'''=3<br />
Для подстановки их в шаблон выборки нужно писать '''{limit}''', '''{page}'''. Например:<br />
<source lang="xml"><br />
<limit page="{page}">{limit}</limit><br />
</source><br />
<br />
== Список протоколов ==<br />
* [[udata|udata://]]<br />
* [[upage|upage://]]<br />
* [[uobject|uobject://]]<br />
* [[ufs|ufs://]]<br />
* [[umap|umap://]]</div>Svhttps://wiki.umisoft.ru/index.php?title=Phpinfo&diff=601Phpinfo2009-10-21T14:55:03Z<p>Sv: Новая страница: «'''Phpinfo''' - это php-скрипт, имеющий следующее содержание <source lang="php"> <?php phpinfo(); ?> </source> Результа…»</p>
<hr />
<div>'''Phpinfo''' - это php-скрипт, имеющий следующее содержание <br />
<br />
<source lang="php"><br />
<?php phpinfo(); ?><br />
</source><br />
<br />
Результатом работы этого скрипта является подробная информация о конфигурации PHP, установленном на сервере.<br />
<br />
<br />
Существенной для диагностики является следующая информация:<br />
<br />
'''PHP Version''' - должна быть не ниже 5.0.4, нежелательна версия 5.2.0<br />
<br />
'''Configure Command''' - должны присутствовать следующие конфигурационные команды:<br />
<br />
<source lang="bash"><br />
./configure '--with-gd' '--with-iconv' '--with-xsl' '--enable-mbstring'<br />
</source><br />
<br />
'''Zend Engine''' - должна присутствовать строка ''with Zend Optimizer''<br />
<br />
'''Configuration<br />
PHP Core'''<br />
<br />
Должны быть параметры со значениями:<br />
<br />
<source lang="ini"><br />
allow_call_time_pass_reference On<br />
safe_mode Off<br />
zend.ze1_compatibility_mode Off<br />
</source><br />
<br />
Должен присутствовать блок '''mysql'''<br />
<br />
В переменной '''session.save_path''' должен быть прописан путь до каталога, в котором будут хранится сессии.<br />
<br />
Для решения проблем с закачкой фалов могут помочь следующие переменные:<br />
* '''max_execution_time''' - максимальное время выполнение скрипта в секундах<br />
* '''memory_limit''' - количество памяти, выделяемой под скрипты, в Mb<br />
* '''upload_max_filesize''' - Максимальный размер файла для загрузки.<br />
<br />
Для решения проблем с [[Лицензионный ключ|лицензионным ключом]] типа [[Old Free]] пригодится переменная SERVER_ADDR - содержимое именно этой переменной записывается в поле IP Сервера обновлений</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E,_%D0%B3%D0%B4%D0%B5_%D0%BA%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&diff=599Многоуровневое меню, где каждый уровень - отдельный список2009-10-20T07:28:25Z<p>Sv: </p>
<hr />
<div>Для решения этой задачи придется использовать не совсем корректный способ. Не рекомендуется использовать его для меню с большой вложенностью.<br />
<br />
В шаблоне дизайна пропишите макрос % content menu('sl')%, где sl - шаблон из папки tpls/content/menu/ вида:<br />
<pre><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
% lines%<br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
% sub_menu%<br />
END;<br />
<br />
<br />
<br />
$FORMS['menu_block_level2'] = <<<END<br />
<ul id="submenu">% lines%</ul><br />
% content menu('sl2',% pid%)%<br />
END;<br />
<br />
$FORMS['menu_line_level2'] = <<<END<br />
<li><a href="% link%">% text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level2_a'] = <<<END<br />
<li class="active"><a href="%link%">% text%</a></li><br />
END;<br />
<br />
?><br />
</pre><br />
<br />
Обратите внимание на макрос % content menu('sl2',% pid%)% из блока ['menu_block_level2']. В нем, с помощью макроса % pid% мы подхватываем идентификатор текущей (то есть активной) страницы и, таким образом, указываем макросу родительский элемент, от которого следует выводить страницы. Шаблон tpls/content/menu/sl2.tpl должен иметь вид:<br />
<br />
<br />
<pre><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
<ul id="submenu">% lines%</ul><br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<li><a href="% link%">% text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
<li class="active"><a href="% link%">% text%</a></li><br />
END;<br />
<br />
?><br />
</pre></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%BC%D0%B5%D0%BD%D1%8F%D1%82%D1%8C_%D0%BF%D0%B0%D1%80%D0%BE%D0%BB%D1%8C_%D0%B0%D0%B4%D0%BC%D0%B8%D0%BD%D0%B8%D1%81%D1%82%D1%80%D0%B0%D1%82%D0%BE%D1%80%D0%B0&diff=598Поменять пароль администратора2009-10-19T09:01:41Z<p>Sv: Новая страница: «Если пароль администратора утерян, то изменить пароль можно таким sql запросом: update cms3_object_…»</p>
<hr />
<div>Если пароль администратора утерян, то изменить пароль можно таким sql запросом:<br />
<br />
update cms3_object_content set varchar_val=md5('newpassword') where obj_id=14 and field_id=46</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%B5%D1%81%D1%82%D0%B8_%D1%81%D0%B0%D0%B9%D1%82_%D1%81_%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0_%D0%BD%D0%B0_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D0%B8%D0%BB%D0%B8_%D1%81_%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE_%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0_%D0%BD%D0%B0_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9&diff=596Как перенести сайт с локального компьютера на сервер или с одного хостинга на другой2009-10-14T13:03:43Z<p>Sv: </p>
<hr />
<div>Экспорт из локальной версии:<br />
<br />
1. Скачиваем и помещаем папку [[Файл:pma.zip|"pma"]] (http://www.umi-cms.ru/files/pma.zip) в корневую директорию сайта (U:\home\localhost\www)<br />
2. В адресной строке браузера набираем http://localhost/pma/index.php<br />
3. В левом меню кликаем на базу "umi"<br />
4. В верхней части страницы появляется меню. Выбираем "Экспорт". Никаких настроек менять НЕ НАДО. Следует только выбрать "zip" в поле "Сохранить как файл". Жмем кнопку "ОК" и сохраняем дамп.<br />
<br />
Импорт на хостинг:<br />
<br />
1. Заходим в phpmyadmin на вашем сервере. (Данные для входа можно уточнить у вашего хостинг-провайдера).<br />
2. В левом меню выбираем нужную базу. Убедитесь, что она пуста и не содержит таблиц. При необходимости удалите ненужные таблицы.<br />
3*. В верхней части страницы появляется меню. Выбираем "Импорт". Выбираем дамп, выставляем кодировку utf8 и жмем "ОК".<br />
<br />
*В случае, если на сервере используется старая версия phpmyadmin, пункт 3 будет таким:<br />
<br />
3. В верхней части страницы появляется меню. Выбираем "SQL". Выбираем дамп и жмем "ОК".<br />
<br />
**Если в процессе импорта выдаются ошибки, открываем дамп в любом текстовом редакторе (но предпочтительнее PSPad) и после надписи SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; добавляем строки:<br />
<pre><br />
SET AUTOCOMMIT=0;<br />
SET FOREIGN_KEY_CHECKS=0;<br />
set names utf8;<br />
</pre><br />
***Если выдается ошибка о том, что дамп слишком большой, таблицы следует переносить частями. Для этого при экспорте выделяем часть таблиц, собираем дамп, импортируем. Затем собираем вторую часть и импортируем и т. д.<br />
<br />
Внимание! Данный способ не дает 100%-ной гарантии успешного переноса из-за возможных специфических настроек MySQL, Apache и PHP. Скрипты phpmyadmin были взяты с сайта php-myadmin.ru и могут со временем устареть.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D1%83%D0%BB%D1%8C%D1%82%D0%B8%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2%D0%BE%D1%81%D1%82%D1%8C&diff=595Мультисайтовость2009-10-14T12:48:41Z<p>Sv: Новая страница: «1. В панели управления доменом прописываете NS хостинга, где уже стоит и работает UMI.CMS. 2. В п…»</p>
<hr />
<div>1. В панели управления доменом прописываете NS хостинга, где уже стоит и работает UMI.CMS.<br />
<br />
2. В панели управления хостингом прописываете, чтобы сервер при запросе нового домена "смотрел" в ту же папку, где уже стоит и работает UMI.CMS. Другими словами - делаете новый домен зеркалом уже работающего.<br />
<br />
3. В UMI.CMS, в разделе "конфигурация" на вкладке "домены", прописываете новый домен. Определитесь сразу, какой вид Вам нравится больше - с WWW, или без - в таком виде и прописывайте. После этого надо кликнуть "сохранить". Страница перезагрузится и рядом с названием нового домена появится иконка папки. Надо кликнуть на нее и в появившейся строке прописать альтернативный вид (если главное зеркало было БЕЗ WWW, то здесь, соответственно, пишем С WWW).<br />
После этого в разделе "структура" появится новый корневой раздел с названием нового домена. С этого момента ЮМИ сама будет решать, какой контент отдавать в зависимости от запрошенного домена. В админку можно логиниться с любого домена.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E_%D0%BD%D0%B0_XSLT&diff=593Многоуровневое меню на XSLT2009-10-13T13:01:50Z<p>Sv: Новая страница: «== Инструкция == Вызываем с помощью протокола udata результаты работы макроса '''%content menu()%''' …»</p>
<hr />
<div>== Инструкция ==<br />
<br />
Вызываем с помощью протокола [[udata]] результаты работы макроса '''%content menu()%''' и сразу же переходим к элементам меню, не отображая другой информации.<br />
<br />
<source lang="xml"><br />
<xsl:template match="/"><br />
<html><br />
<body><br />
<ul><xsl:apply-templates select="document('udata://content/menu')//item" mode="menu" /></ul><br />
</body><br />
</html><br />
</xsl:template><br />
</source><br />
<br />
В следущем шаблоне (ориентируясь по тегу '''item''') понимаем, что является ссылкой и делаем ее ссылкой & требуем от каждого id получения вложенных id (являющихся под-элементами меню), передвигаясь от корня. Если ничего не получаем - значит подэлементов у текущего элемента меню нет и отображатся в нашем двухуровневом меню они не будут<br />
<br />
<source lang="xml"><br />
<xsl:template match="item" mode="menu"><br />
<li><br />
<a href="{@link}"><xsl:value-of select="." /></a><br />
<xsl:apply-templates select="document(concat('udata://content/menu///', @id))/udata"/><br />
</li><br />
</xsl:template><br />
</source><br />
<br />
Обращаемся к полученной информации от протокола [[udata]], сортируя по параметру метод и выводим под-элементы меню:<br />
<br />
<source lang="xml"><br />
<xsl:template match="udata[@method = 'menu']"><br />
<ul><br />
<xsl:apply-templates select=".//item" mode="menu"/><br />
</ul><br />
</xsl:template><br />
</source><br />
<br />
== Ссылки ==<br />
<br />
* [http://brcd.linuxhosting.net.ru/xsltTpls/menu.xsl Пример XSLT шаблона]</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%92%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%B8_%D1%83%D1%80%D0%BE%D0%BA%D0%B8_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8_%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2_%D0%BD%D0%B0_UMI.CMS:%D0%92%D0%B5%D1%80%D1%81%D1%82%D0%BA%D0%B0_%D0%B2_XSLT&diff=592Вопросы и уроки разработки сайтов на UMI.CMS:Верстка в XSLT2009-10-13T13:01:19Z<p>Sv: </p>
<hr />
<div>*[[использование функций php]]<br />
*[[Вывод отдельного подраздела меню]]<br />
*[[Вывод строки поиска]]<br />
*[[Многоуровневое меню на XSLT]]</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%92%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%B8_%D1%83%D1%80%D0%BE%D0%BA%D0%B8_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8_%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2_%D0%BD%D0%B0_UMI.CMS:%D0%92%D0%B5%D1%80%D1%81%D1%82%D0%BA%D0%B0_%D0%B2_XSLT&diff=591Вопросы и уроки разработки сайтов на UMI.CMS:Верстка в XSLT2009-10-13T12:59:17Z<p>Sv: </p>
<hr />
<div>*[[использование функций php]]<br />
*[[Вывод отдельного подраздела меню]]<br />
*[[Вывод строки поиска]]</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%92%D0%BE%D0%BF%D1%80%D0%BE%D1%81%D1%8B_%D0%B8_%D1%83%D1%80%D0%BE%D0%BA%D0%B8_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B8_%D1%81%D0%B0%D0%B9%D1%82%D0%BE%D0%B2_%D0%BD%D0%B0_UMI.CMS:%D0%92%D0%B5%D1%80%D1%81%D1%82%D0%BA%D0%B0_%D0%B2_XSLT&diff=590Вопросы и уроки разработки сайтов на UMI.CMS:Верстка в XSLT2009-10-13T12:59:04Z<p>Sv: Новая страница: «**использование функций php **Вывод отдельного подраздела меню **Вывод строки поиска»</p>
<hr />
<div>**[[использование функций php]]<br />
**[[Вывод отдельного подраздела меню]]<br />
**[[Вывод строки поиска]]</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9B%D0%B8%D1%86%D0%B5%D0%BD%D0%B7%D0%B8%D0%BE%D0%BD%D0%BD%D1%8B%D0%B9_%D0%BA%D0%BB%D1%8E%D1%87&diff=585Лицензионный ключ2009-10-13T09:06:20Z<p>Sv: Новая страница: «Цифробуквенная последовательность (три 16ричных числа, разделенных дефисами), генерируема…»</p>
<hr />
<div>Цифробуквенная последовательность (три 16ричных числа, разделенных дефисами), генерируемая сервером обновлений.<br />
<br />
Необходима для установки системы (исключение составляет установка на домен localhost и ip 127.0.0.1 - при этих условиях шаг проверки ключа пропускается).<br />
<br />
На втором шаге установки скрипт-инсталлятор передаёт лицензионный ключ, ip и домен на наш сервер обновлений, где на основе этих данных по хитрому алгоритму создаётся доменный ключ, который передаётся обратно и записывается в реестре UMI.CMS</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC%D0%B0_%D0%BF%D0%BE%D0%B2%D1%82%D0%BE%D1%80%D0%BD%D0%BE%D0%B9_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B8:_%D0%BA%D0%BB%D1%8E%D1%87_%D1%83%D0%B6%D0%B5_%D0%B8%D1%81%D0%BF%D0%BE%D0%BB%D1%8C%D0%B7%D0%BE%D0%B2%D0%B0%D0%BD&diff=583Проблема повторной установки: ключ уже использован2009-10-13T09:04:04Z<p>Sv: Новая страница: «===Решение=== Удалить в каталоге /cache/ файл reg. После этого можно подтверждать ввод ключа.»</p>
<hr />
<div>===Решение===<br />
Удалить в каталоге /cache/ файл reg. После этого можно подтверждать ввод ключа.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9F%D1%80%D0%B8_%D0%BF%D0%BE%D0%BF%D1%8B%D1%82%D0%BA%D0%B5_%D1%83%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%B8%D1%82%D1%8C_UMI.CMS_%D0%B2%D1%8B%D0%B4%D0%B0%D0%B5%D1%82%D1%81%D1%8F_%D0%BE%D1%88%D0%B8%D0%B1%D0%BA%D0%B0_Fatal_error:_Unable_to_read_XXXX_bytes_in_/*******/install.php_on_line_0&diff=579При попытке установить UMI.CMS выдается ошибка Fatal error: Unable to read XXXX bytes in /*******/install.php on line 02009-10-08T09:29:48Z<p>Sv: </p>
<hr />
<div>Практически все ошибки, содержащие в себе фразу "Unable to read XXXX bytes" говорят о том, что в настройках PHP объем памяти, выделяемой на выполнение скриптов (параметр memory_limit), составляет меньше 16Мб. Увеличьте этот параметр до необходимого значения (или выше, если позволяет тарифный план хостинга).<br />
<br />
Также, ошибка может возникать в случае, если установочный пакет закачивался на хостинг не в бинарном режиме</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%BA%D1%80%D1%8B%D1%82%D0%B8%D0%B5_%D0%BF%D1%83%D0%B1%D0%BB%D0%B8%D1%87%D0%BD%D0%BE%D0%B9_%D1%87%D0%B0%D1%81%D1%82%D0%B8_%D0%BF%D1%80%D0%B8_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B5_%D1%81%D0%B0%D0%B9%D1%82%D0%B0&diff=561Закрытие публичной части при разработке сайта2009-10-07T14:14:04Z<p>Sv: Новая страница: «== Вопрос == Как закрыть публичную часть при разработке? == Ответ == в файл .htaccess, после "RewriteEngin…»</p>
<hr />
<div>== Вопрос ==<br />
Как закрыть публичную часть при разработке?<br />
<br />
== Ответ ==<br />
в файл .htaccess, после "RewriteEngine On"<br />
<br />
допишите<br />
<source lang="php"><br />
RewriteCond %{REMOTE_ADDR} !123.45.67.89<br />
RewriteCond %{REQUEST_FILENAME} !-f<br />
RewriteRule .* /splash.html [L]<br />
</source><br />
<br />
где "123.45.67.89" - ваш ip, а "splash.html" - страница с заглушкой.<br />
вам будет виден сайт, а всем остальным - заглушка.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B5%D1%88%D0%B5%D0%BD%D0%B8%D1%8F_%D0%BF%D1%80%D0%BE%D0%B1%D0%BB%D0%B5%D0%BC_%D0%B8_%D0%BE%D1%88%D0%B8%D0%B1%D0%BE%D0%BA:%D0%A3%D1%81%D1%82%D0%B0%D0%BD%D0%BE%D0%B2%D0%BA%D0%B0_%D0%B8_%D0%BD%D0%B0%D1%81%D1%82%D1%80%D0%BE%D0%B9%D0%BA%D0%B0&diff=552Решения проблем и ошибок:Установка и настройка2009-10-07T14:00:33Z<p>Sv: «Решения проблем и ошибок:Установка и настройка» переименована в «Решения проблем и ошибок:Установка» поверх перенаправления</p>
<hr />
<div>#перенаправление [[Решения проблем и ошибок:Установка]]</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=315Заглавная страница2009-09-02T10:46:31Z<p>Sv: </p>
<hr />
<div><hr><br />
<strong>Всем</strong><br />
*[[Решения проблем и ошибок]]<br><br />
*[[Вопросы установки настройки и переноса]]<br><br />
*[[Глоссарий]]<br><br />
<br />
<strong>Разработчикам сайтов на UMI.CMS</strong><br />
*[[Описание модулей и макросов]]<br><br />
*[[Описание шаблонизаторов]]<br />
*[[Вопросы и уроки разработки сайтов на UMI.CMS]]<br><br />
<br />
<strong>Разработчикам модулей и макросов</strong><br />
*[[API для разработчиков]]<br><br />
*[[Архитектура UMI.CMS]]<br></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BF%D0%B5%D1%80%D0%B5%D0%BD%D0%B5%D1%81%D1%82%D0%B8_%D1%81%D0%B0%D0%B9%D1%82_%D1%81_%D0%BB%D0%BE%D0%BA%D0%B0%D0%BB%D1%8C%D0%BD%D0%BE%D0%B3%D0%BE_%D0%BA%D0%BE%D0%BC%D0%BF%D1%8C%D1%8E%D1%82%D0%B5%D1%80%D0%B0_%D0%BD%D0%B0_%D1%81%D0%B5%D1%80%D0%B2%D0%B5%D1%80_%D0%B8%D0%BB%D0%B8_%D1%81_%D0%BE%D0%B4%D0%BD%D0%BE%D0%B3%D0%BE_%D1%85%D0%BE%D1%81%D1%82%D0%B8%D0%BD%D0%B3%D0%B0_%D0%BD%D0%B0_%D0%B4%D1%80%D1%83%D0%B3%D0%BE%D0%B9&diff=297Как перенести сайт с локального компьютера на сервер или с одного хостинга на другой2009-09-02T08:43:29Z<p>Sv: Новая страница: «<hr> <h2>Как перенести сайт с локального компьютера на сервер или с одного хостинга на другой?…»</p>
<hr />
<div><hr><br />
<h2>Как перенести сайт с локального компьютера на сервер или с одного хостинга на другой?</h2><br />
<br />
Это можно сделать, используя специальный скрипт для переноса и следуя инструкциям в архиве. К сожалению, данный скрипт не всегда срабатывает в случаях, если существуют значительные ограничения на память, выделяемые под скрипты. В таком случае рекомендуем перенести файлы и дамп БД вручную: <br />
<br />
Экспорт из локальной версии:<br />
<br />
1. Скачиваем и помещаем папку "pma" в корневую директорию сайта (U:\home\localhost\www)<br />
2. В адресной строке браузера набираем http://localhost/pma/index.php<br />
3. В левом меню кликаем на базу "umi"<br />
4. В верхней части страницы появляется меню. Выбираем "Экспорт". Никаких настроек менять НЕ НАДО. Следует только выбрать "zip" в поле "Сохранить как файл". Жмем кнопку "ОК" и сохраняем дамп.<br />
<br />
Импорт на хостинг:<br />
<br />
1. Заходим в phpmyadmin на вашем сервере. (Данные для входа можно уточнить у вашего хостинг-провайдера).<br />
2. В левом меню выбираем нужную базу. Убедитесь, что она пуста и не содержит таблиц. При необходимости удалите ненужные таблицы.<br />
3*. В верхней части страницы появляется меню. Выбираем "Импорт". Выбираем дамп, выставляем кодировку utf8 и жмем "ОК".<br />
<br />
*В случае, если на сервере используется старая версия phpmyadmin, пункт 3 будет таким:<br />
<br />
3. В верхней части страницы появляется меню. Выбираем "SQL". Выбираем дамп и жмем "ОК".<br />
<br />
**Если в процессе импорта выдаются ошибки, открываем дамп в любом текстовом редакторе (но предпочтительнее PSPad) и после надписи SET SQL_MODE="NO_AUTO_VALUE_ON_ZERO"; добавляем строки:<br />
<pre><br />
SET AUTOCOMMIT=0;<br />
SET FOREIGN_KEY_CHECKS=0;<br />
set names utf8;<br />
</pre><br />
***Если выдается ошибка о том, что дамп слишком большой, таблицы следует переносить частями. Для этого при экспорте выделяем часть таблиц, собираем дамп, импортируем. Затем собираем вторую часть и импортируем и т. д.<br />
<br />
Внимание! Данный способ не дает 100%-ной гарантии успешного переноса из-за возможных специфических настроек MySQL, Apache и PHP. Скрипты phpmyadmin были взяты с сайта php-myadmin.ru и могут со временем устареть.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=294Заглавная страница2009-09-02T08:25:13Z<p>Sv: </p>
<hr />
<div><strong>Всем</strong><br />
*[[Решения проблем и ошибок]]<br><br />
*[[Вопросы установки настройки и переноса]]<br><br />
*[[Глоссарий]]<br><br />
<br />
<strong>Разработчикам сайтов на UMI.CMS</strong><br />
*[[Описание модулей и макросов]]<br><br />
*[[Описание шаблонизаторов]]<br />
*[[Вопросы и уроки разработки сайтов на UMI.CMS]]<br><br />
<br />
<strong>Разработчикам модулей и макросов</strong><br />
*[[API для разработчиков]]<br><br />
*[[Архитектура UMI.CMS]]<br></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D1%8C_%D1%86%D0%B5%D0%BD%D1%83_%D1%81_%D0%BA%D0%BE%D0%BF%D0%B5%D0%B9%D0%BA%D0%B0%D0%BC%D0%B8_%D0%B4%D0%B0%D0%B6%D0%B5_%D0%B5%D1%81%D0%BB%D0%B8_%D0%B8%D1%85_%D0%BD%D0%B5%D1%82&diff=291Как выводить цену с копейками даже если их нет2009-09-01T13:45:02Z<p>Sv: </p>
<hr />
<div><hr><br />
<h2>Как выводить цену с копейками, даже если их нет (напр. 205.00 руб)?</h2><br />
<br />
Это можно сделать при помощи кастомного макроса.<br />
<br />
Разместите эти строчки в файле ~/classes/modules/custom.php<br />
<pre><br />
public function format_price($price)<br />
<br />
{<br />
return number_format($price, 2);<br />
}<br />
</pre><br />
<br />
<br />
И в шаблонах, в тех местах, где вам нужно показывать цену с копейками, используйте макрос: % custom format_price(%price%)%</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4%D0%B8%D1%82%D1%8C_%D1%86%D0%B5%D0%BD%D1%83_%D1%81_%D0%BA%D0%BE%D0%BF%D0%B5%D0%B9%D0%BA%D0%B0%D0%BC%D0%B8_%D0%B4%D0%B0%D0%B6%D0%B5_%D0%B5%D1%81%D0%BB%D0%B8_%D0%B8%D1%85_%D0%BD%D0%B5%D1%82&diff=290Как выводить цену с копейками даже если их нет2009-09-01T13:44:33Z<p>Sv: Новая страница: «<hr> <h2>Как выводить цену с копейками, даже если их нет (напр. 205.00 руб)?</h2> [править] Решение Эт…»</p>
<hr />
<div><hr><br />
<h2>Как выводить цену с копейками, даже если их нет (напр. 205.00 руб)?</h2><br />
[править] Решение<br />
<br />
Это можно сделать при помощи кастомного макроса.<br />
<br />
Разместите эти строчки в файле ~/classes/modules/custom.php<br />
<pre><br />
public function format_price($price)<br />
<br />
{<br />
return number_format($price, 2);<br />
}<br />
</pre><br />
<br />
<br />
И в шаблонах, в тех местах, где вам нужно показывать цену с копейками, используйте макрос: % custom format_price(%price%)%</div>Svhttps://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_%D1%80%D0%B0%D0%B7%D0%BB%D0%B8%D1%87%D0%BD%D1%8B%D0%B9_%D0%B2%D1%8B%D0%B2%D0%BE%D0%B4_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2,_%D1%81%D0%BE%D0%B4%D0%B5%D1%80%D0%B6%D0%B0%D1%89%D0%B8%D1%85_%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82%D1%8B,_%D0%B8_%D0%BF%D1%83%D1%81%D1%82%D1%8B%D1%85_%D1%80%D0%B0%D0%B7%D0%B4%D0%B5%D0%BB%D0%BE%D0%B2_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0_TPL&diff=289Как сделать различный вывод разделов, содержащих объекты, и пустых разделов каталога TPL2009-09-01T13:43:11Z<p>Sv: Новая страница: «<hr> <h2>Как сделать различный вывод разделов, содержащих объекты, и пустых разделов каталога…»</p>
<hr />
<div><hr><br />
<h2>Как сделать различный вывод разделов, содержащих объекты, и пустых разделов каталога?</h2><br />
<br />
Разделы каталога, содержащие объекты выглядят как ссылки на страницу просмотра списка объектов. Пустые разделы - просто текст. Раздел может содержать только подразделы или только объекты.<br />
<br />
В итоге должно быть:<br />
<br />
Раздел 1-го уровня<br />
Раздел 2-го уровня (1)<br />
Раздел 3-го уровня (с объектами)<br />
Раздел 3-го уровня (пустой)<br />
Раздел 2-го уровня (с объектами)<br />
<br />
<br />
Пример приводится на двух шаблонах: ~/tpls/catalog/default.tpl и ~/tpls/catalog/default1.tpl:<br />
<br />
В стандартном шаблоне default.tpl редактируем блок 'category_block_line':<br />
<pre><br />
<?php<br />
$FORMS['category_block_line'] = <<<END<br />
% catalog getObjectsList('default1', '% id%')%<br />
% catalog getCategoryList('default', '% id%')%<br />
END;<br />
?><br />
</pre><br />
<br />
<br />
А в шаблон default1.tpl, по которому будет формироваться вывод разделов, размещаем следующий код:<br />
<pre><br />
<?php<br />
$FORMS = Array();<br />
$FORMS['objects_block'] = <<<END<br />
<li><a href="% content get_page_url('% id%')%"><b>% h1%</b></a></li><br />
END;<br />
<br />
<br />
$FORMS['objects_block_empty'] = <<<END<br />
<li>% h1%</li><br />
END;<br />
?><br />
</pre><br />
<br />
<br />
В итоге имеем необходимый результат.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B2%D1%8B%D0%B2%D0%B5%D1%81%D1%82%D0%B8_%D1%84%D0%B8%D0%BB%D1%8C%D1%82%D1%80_%D0%BF%D0%BE_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%B0%D0%BC_%D0%BF%D0%BE_%D0%B2%D1%81%D0%B5%D0%BC%D1%83_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D1%83_(TPL)&diff=288Как вывести фильтр по товарам по всему каталогу (TPL)2009-09-01T13:41:07Z<p>Sv: Новая страница: «<hr> <h2>Как вывести фильтр по товарам по всему каталогу?</h2> Для того, чтобы вывести фильтр по …»</p>
<hr />
<div><hr><br />
<h2>Как вывести фильтр по товарам по всему каталогу?</h2><br />
<br />
Для того, чтобы вывести фильтр по товарам по всему каталогу, а не по одному разделу, воспользуемся следующей конструкцией, созданной на любой странице контента:<br />
<pre><br />
% catalog search('/', 'cenovye_svojstva short_info', 'search', 11)%<br />
<br />
% catalog getObjectsList('default', 'mode=all')%<br />
</pre> <br />
<br />
где 11 - id типа данных Объект каталога</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=286Заглавная страница2009-09-01T13:35:40Z<p>Sv: </p>
<hr />
<div><strong>Всем</strong><br />
*[[Решения проблем и ошибок]]<br><br />
*[[Вопросы установки настройки и переноса]]<br><br />
*[[Глоссарий]]<br><br />
<br />
<strong>Разработчикам сайтов на UMI.CMS</strong><br />
*[[Описание модулей и макросов]]<br><br />
*[[Описание шаблонизаторов]]<br />
*[[Вопросы и уроки разработки сайтов на UMI.CMS]]<br><br />
*[[Видеоуроки]]<br><br />
<br />
<strong>Разработчикам модулей и макросов</strong><br />
*[[API для разработчиков]]<br><br />
*[[Архитектура UMI.CMS]]<br></div>Svhttps://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%B2%D1%8B%D0%B4%D0%B0%D1%87%D1%83_%D0%BA%D0%B0%D1%82%D0%B0%D0%BB%D0%BE%D0%B3%D0%B0_%D0%B2_%D1%82%D1%80%D0%B8_%D1%81%D1%82%D0%BE%D0%BB%D0%B1%D1%86%D0%B0&diff=282Как сделать выдачу каталога в три столбца2009-09-01T13:27:44Z<p>Sv: Новая страница: «<hr> <h2>Как сделать выдачу каталога в три столбца?</h2> Этим же способом можно выводить товары …»</p>
<hr />
<div><hr><br />
<h2>Как сделать выдачу каталога в три столбца?</h2><br />
<br />
Этим же способом можно выводить товары в два, четыре и более столбцов. Меняться будет только соотношение в стилях:<br />
<pre><br />
$FORMS['objects_block'] = <<<END<br />
<br />
<h1>Каталог продукции</h1><br />
<br />
<div id="cat"><br />
<br />
% lines%<br />
<br />
</div><br />
<br />
END;<br />
<br />
<br />
<br />
$FORMS['objects_block_line'] = <<<END<br />
<br />
<div class="catItem"><br />
<br />
<h3><a href="% link%">% name%</a></h3><br />
<br />
<img src="% photo%" height="112" width="150" /><br />
<br />
<p>% descr%</p><br />
<br />
</div><br />
<br />
END;<br />
</pre><br />
<br />
<br />
В шаблоне дизайна нужно будет подключить CSS примерно следующего вида:<br />
<pre><br />
<br />
<style type="text/css"><br />
<br />
#cat {<br />
<br />
margin: 0 auto 0 auto;<br />
<br />
width: 100%;<br />
<br />
}<br />
<br />
#cat .catItem {<br />
<br />
width: 33%; float: left;<br />
<br />
margin: 0 0 10px; 0;<br />
<br />
}<br />
<br />
</style><br />
</pre></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%BC%D0%BE%D0%B6%D0%BD%D0%BE_%D1%83%D1%81%D0%BA%D0%BE%D1%80%D0%B8%D1%82%D1%8C_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D1%81%D1%81_%D0%B8%D0%BC%D0%BF%D0%BE%D1%80%D1%82%D0%B0_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%B2_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%B5%3F&diff=278Как можно ускорить процесс импорта товаров в интернет-магазине?2009-09-01T13:09:43Z<p>Sv: Новая страница: «<hr> <h2>Как можно ускорить процесс импорта товаров в интернет-магазине?</h2> Чтобы ускорить пр…»</p>
<hr />
<div><hr><br />
<h2>Как можно ускорить процесс импорта товаров в интернет-магазине?</h2><br />
<br />
Чтобы ускорить процесс импорта в 5-10 раз, надо отключить автоиндексацию при импорте (потом все равно можно доиндексировать в настройках модуля поиск, но это уже будет значительно быстрее). Если для импорта использовался отдельный скрипт, то достаточно в начале вписать define("DISABLE_SEARCH_REINDEX", 1);<br />
<br />
Если через админку, то либо временно отключить модуль поиска, либо временно вписать тот же define куда-нибудь.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9A%D0%B0%D0%BA_%D0%B4%D0%BE%D0%B1%D0%B0%D0%B2%D0%B8%D1%82%D1%8C_%D0%B0%D0%B4%D1%80%D0%B5%D1%81_%D0%B4%D0%BE%D1%81%D1%82%D0%B0%D0%B2%D0%BA%D0%B8_%D0%B2_%D0%BF%D0%B8%D1%81%D1%8C%D0%BC%D0%BE_%D0%BE%D1%82%D0%B2%D0%B5%D1%82%D1%81%D1%82%D0%B2%D0%B5%D0%BD%D0%BD%D0%BE%D0%BC%D1%83_%D0%BC%D0%B5%D0%BD%D0%B5%D0%B4%D0%B6%D0%B5%D1%80%D1%83_%D0%BE_%D0%B7%D0%B0%D0%BA%D0%B0%D0%B7%D0%B5_%D0%B2_%D0%B8%D0%BD%D1%82%D0%B5%D1%80%D0%BD%D0%B5%D1%82-%D0%BC%D0%B0%D0%B3%D0%B0%D0%B7%D0%B8%D0%BD%D0%B5_TPL&diff=272Как добавить адрес доставки в письмо ответственному менеджеру о заказе в интернет-магазине TPL2009-09-01T12:48:18Z<p>Sv: Новая страница: «<hr> <h2>Как добавить адрес доставки в письмо ответственному менеджеру о заказе в интернет-ма…»</p>
<hr />
<div><hr><br />
<h2>Как добавить адрес доставки в письмо ответственному менеджеру о заказе в интернет-магазине?</h2><br />
<br />
Часто требуется в письме о новом заказе, которое приходит ответственному менеджеру, добавить информацию об адресе доставки. Делается это следующим образом:<br />
<br />
1. В шаблоне tpls/eshop/messages.tpl в блоке ['order_items'] добавьте строку:<br />
<pre><br />
Адрес доставки: % eshop address_choice('zakaz')% <br />
</pre><br />
<br />
<br />
2. В папке tpls/eshop/delivery/ создайте новый шаблон zakaz.tpl с примерно следующим содержанием:<br />
<pre><br />
<?php<br />
$FORMS = Array();<br />
$FORMS['delivery_block'] = <<<END<br />
<h3>Адреса доставки</h3><br /><br />
<table border="0" width="100%"><br />
% lines%<br />
</table><br />
% eshop delivery_add()%<br />
END;<br />
<br />
<br />
$FORMS['delivery_block_line'] = <<<END<br />
<a href="% link%">% country%, % city%, % post_index%, % address%, % phone%</a><br />
END;<br />
<br />
<br />
$FORMS['choise_block'] = <<<END<br />
% lines%<br />
END;<br />
<br />
<br />
$FORMS['choise_block_empty'] = <<<END<br />
<p>Адресов нет</p><br />
END;<br />
<br />
<br />
$FORMS['choise_block_line'] = <<<END<br />
Страна: % country%<br><br />
Город: % city%<br><br />
Индекс: % post_index%<br><br />
Адрес: % address%<br><br />
Телефон: % phone%<br />
END;<br />
?><br />
</pre><br />
<br />
<br />
Решение немного сыровато - если адресов несколько, то в письме они покажутся оба, независимо от того, какой из них выбрал покупатель.</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%92%D1%8B%D0%B2%D0%BE%D0%B4_%D1%86%D0%B5%D0%BD%D1%8B_%D1%81_%D0%B4%D0%B2%D1%83%D0%BC%D1%8F_%D0%B7%D0%BD%D0%B0%D0%BA%D0%B0%D0%BC%D0%B8_%D0%BF%D0%BE%D1%81%D0%BB%D0%B5_%D0%B7%D0%B0%D0%BF%D1%8F%D1%82%D0%BE%D0%B9&diff=270Вывод цены с двумя знаками после запятой2009-09-01T12:41:47Z<p>Sv: Новая страница: «<h2>Как выводить цену с 2 знаками после запятой?</h2> Попробуйте добавить следующий код в ~/classe…»</p>
<hr />
<div><h2>Как выводить цену с 2 знаками после запятой?</h2><br />
<br />
Попробуйте добавить следующий код в ~/classes/modules/custom.php сразу после строки<br />
<pre><br />
public function format_price($price)<br />
<br />
{<br />
return number_format($price, 2);<br />
}<br />
</pre><br />
<br />
Регистрировать его нигде не нужно.<br />
<br />
Пример использования (в зависимости от шаблона):<br />
<pre><br />
% custom format_price('% price%')%<br />
или<br />
% custom format_price('% value%')%<br />
</pre></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%97%D0%B0%D0%B3%D0%BB%D0%B0%D0%B2%D0%BD%D0%B0%D1%8F_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B0&diff=268Заглавная страница2009-09-01T12:35:27Z<p>Sv: </p>
<hr />
<div><strong>Всем</strong><br />
*[[Решения проблем и ошибок]]<br><br />
*[[Вопросы установки настройки и переноса]]<br><br />
*[[Глоссарий]]<br><br />
<br />
<strong>Разработчикам сайтов на UMI.CMS</strong><br />
*[[Описание модулей и макросов]]<br><br />
*[[Описание шаблонизаторов]]<br />
*[[Вопросы и уроки разработки сайтов на UMI.CMS]]<br><br />
<br />
<strong>Разработчикам модулей и макросов</strong><br />
*[[API для разработчиков]]<br><br />
*[[Архитектура UMI.CMS]]<br></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E,_%D0%B3%D0%B4%D0%B5_%D0%BA%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&diff=267Многоуровневое меню, где каждый уровень - отдельный список2009-09-01T12:32:50Z<p>Sv: </p>
<hr />
<div><hr><br />
<h2>Как сделать многоуровневое меню, где каждый уровень - отдельный список?</h2><br />
<br />
<br />
<br />
Для решения этой задачи придется использовать не совсем корректный способ. Не рекомендуется использовать его для меню с большой вложенностью.<br />
<br />
В шаблоне дизайна пропишите макрос % content menu('sl')%, где sl - шаблон из папки tpls/content/menu/ вида:<br />
<pre><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
% lines%<br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
% sub_menu%<br />
END;<br />
<br />
<br />
<br />
$FORMS['menu_block_level2'] = <<<END<br />
<ul id="submenu">% lines%</ul><br />
% content menu('sl2',% pid%)%<br />
END;<br />
<br />
$FORMS['menu_line_level2'] = <<<END<br />
<li><a href="% link%">% text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level2_a'] = <<<END<br />
<li class="active"><a href="%link%">% text%</a></li><br />
END;<br />
<br />
?><br />
</pre><br />
<br />
Обратите внимание на макрос % content menu('sl2',% pid%)% из блока ['menu_block_level2']. В нем, с помощью макроса % pid% мы подхватываем идентификатор текущей (то есть активной) страницы и, таким образом, указываем макросу родительский элемент, от которого следует выводить страницы. Шаблон tpls/content/menu/sl2.tpl должен иметь вид:<br />
<br />
<br />
<pre><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
<ul id="submenu">% lines%</ul><br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<li><a href="% link%">% text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
<li class="active"><a href="% link%">% text%</a></li><br />
END;<br />
<br />
?><br />
</pre></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E,_%D0%B3%D0%B4%D0%B5_%D0%BA%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&diff=266Многоуровневое меню, где каждый уровень - отдельный список2009-09-01T12:32:04Z<p>Sv: </p>
<hr />
<div><hr><br />
<h2>Как сделать многоуровневое меню, где каждый уровень - отдельный список?</h2><br />
<br />
<br />
<br />
Для решения этой задачи придется использовать не совсем корректный способ. Не рекомендуется использовать его для меню с большой вложенностью.<br />
<br />
В шаблоне дизайна пропишите макрос % content menu('sl')%, где sl - шаблон из папки tpls/content/menu/ вида:<br />
<pre><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
% lines%<br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
% sub_menu%<br />
END;<br />
<br />
<br />
<br />
$FORMS['menu_block_level2'] = <<<END<br />
<ul id="submenu">% lines%</ul><br />
% content menu('sl2',% pid%)%<br />
END;<br />
<br />
$FORMS['menu_line_level2'] = <<<END<br />
<li><a href="% link%">% text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level2_a'] = <<<END<br />
<li class="active"><a href="%link%">% text%</a></li><br />
END;<br />
<br />
?><br />
</pre><br />
<br />
Обратите внимание на макрос % content menu('sl2',% pid%)% из блока ['menu_block_level2']. В нем, с помощью макроса % pid% мы подхватываем идентификатор текущей (то есть активной) страницы и, таким образом, указываем макросу родительский элемент, от которого следует выводить страницы. Шаблон tpls/content/menu/sl2.tpl должен иметь вид:<br />
<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
<ul id="submenu">% lines%</ul><br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<li><a href="% link%">% text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
<li class="active"><a href="% link%">% text%</a></li><br />
END;<br />
<br />
?><br />
</source></div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%A0%D0%B0%D0%B7%D0%BC%D0%B5%D1%80%D1%8B_%D0%B4%D0%BB%D1%8F_flash-%D0%B1%D0%B0%D0%BD%D0%BD%D0%B5%D1%80%D0%B0_%D0%B2_%D0%BF%D1%80%D0%BE%D1%86%D0%B5%D0%BD%D1%82%D0%B0%D1%85&diff=265Размеры для flash-баннера в процентах2009-09-01T12:27:18Z<p>Sv: Новая страница: «<hr> <h2>Как можно задать ширину флеш-баннера в процентах?</h2> На данный момент для задания раз…»</p>
<hr />
<div><hr><br />
<h2>Как можно задать ширину флеш-баннера в процентах?</h2><br />
<br />
На данный момент для задания размеров у флеш-баннеров используются поля типа "Число". При этом символ "%" не работает. Мы предлагаем заменить тип этих полей на "Строка", а в файле classes/modules/banners/class.php заменить строки<br />
<br />
(285-286):<br />
<br />
$iWidth = (int) $oBanner->getValue('width');<br />
$iHeight = (int) $oBanner->getValue('height');<br />
<br />
<br />
на<br />
<br />
$iWidth = (string) $oBanner->getValue('width');<br />
$iHeight = (string) $oBanner->getValue('height');<br />
<br />
<br />
<br />
ВНИМАНИЕ! после обновления системы эти изменения пропадут и их нужно будет вносить заново!<br />
<br />
Для редактирования типа данных пройдите в модуль "Шаблоны-данных" -> "Баннер" -> редактирование "Баннер с флешкой". Поскольку все поля закрыты для редактирования, применим "хак": в адресной строке (при использовании скина "Основной") допишите ?skip-lock=1 и нажмите "ввод". После этого поля станут доступны для редактирования. Измените тип полей "Ширина" и "Высота" на "Строка"<br />
<br />
Внимание, если у других флеш-баннеров у вас заданы размеры, то после смены типа данных они "слетят".<br />
<br />
Будьте предельно внимательны и осторожны при редактировании закрытых полей, поскольку неверные действия могут повлечь за собой неработоспособность сайта<br />
<br />
Данное решение позволяет указывать размеры баннеров в процентах (например, 100%). Конвертирование символа "%" в &#0З7; никак не влияет на результат</div>Svhttps://wiki.umisoft.ru/index.php?title=%D0%9C%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E,_%D0%B3%D0%B4%D0%B5_%D0%BA%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA&diff=260Многоуровневое меню, где каждый уровень - отдельный список2009-09-01T11:59:11Z<p>Sv: переименовал «Как сделать многоуровневое меню, где каждый уровень - отдельный список?» в «[[Многоуровневое меню, где каждый уровень - отде</p>
<hr />
<div><hr><br />
<h2>Как сделать многоуровневое меню, где каждый уровень - отдельный список?</h2><br />
<br />
<br />
<br />
Для решения этой задачи придется использовать не совсем корректный способ. Не рекомендуется использовать его для меню с большой вложенностью.<br />
<br />
В шаблоне дизайна пропишите макрос % content menu('sl')%, где sl - шаблон из папки tpls/content/menu/ вида:<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
% lines%<br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
% sub_menu%<br />
END;<br />
<br />
<br />
<br />
$FORMS['menu_block_level2'] = <<<END<br />
<ul id="submenu">% lines%</ul><br />
% content menu('sl2',% pid%)%<br />
END;<br />
<br />
$FORMS['menu_line_level2'] = <<<END<br />
<li><a href="% link%">% text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level2_a'] = <<<END<br />
<li class="active"><a href="%link%">% text%</a></li><br />
END;<br />
<br />
?><br />
</source><br />
<br />
Обратите внимание на макрос % content menu('sl2',% pid%)% из блока ['menu_block_level2']. В нем, с помощью макроса % pid% мы подхватываем идентификатор текущей (то есть активной) страницы и, таким образом, указываем макросу родительский элемент, от которого следует выводить страницы. Шаблон tpls/content/menu/sl2.tpl должен иметь вид:<br />
<br />
<br />
<source lang="php"><br />
<?php<br />
<br />
$FORM = Array();<br />
<br />
$FORMS['menu_block_level1'] = <<<END<br />
<ul id="submenu">% lines%</ul><br />
END;<br />
<br />
$FORMS['menu_line_level1'] = <<<END<br />
<li><a href="% link%">% text%</a></li><br />
END;<br />
<br />
$FORMS['menu_line_level1_a'] = <<<END<br />
<li class="active"><a href="% link%">% text%</a></li><br />
END;<br />
<br />
?><br />
</source></div>Svhttps://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%BC%D0%BD%D0%BE%D0%B3%D0%BE%D1%83%D1%80%D0%BE%D0%B2%D0%BD%D0%B5%D0%B2%D0%BE%D0%B5_%D0%BC%D0%B5%D0%BD%D1%8E,_%D0%B3%D0%B4%D0%B5_%D0%BA%D0%B0%D0%B6%D0%B4%D1%8B%D0%B9_%D1%83%D1%80%D0%BE%D0%B2%D0%B5%D0%BD%D1%8C_-_%D0%BE%D1%82%D0%B4%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B9_%D1%81%D0%BF%D0%B8%D1%81%D0%BE%D0%BA%3F&diff=261Как сделать многоуровневое меню, где каждый уровень - отдельный список?2009-09-01T11:59:11Z<p>Sv: переименовал «Как сделать многоуровневое меню, где каждый уровень - отдельный список?» в «[[Многоуровневое меню, где каждый уровень - отде</p>
<hr />
<div>#перенаправление [[Многоуровневое меню, где каждый уровень - отдельный список]]</div>Sv