https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2_%D0%BA%D0%B0%D0%BA_%D0%BD%D0%B0_umi-cms.ru&feed=atom&action=historyПодборка разработчиков как на umi-cms.ru - История изменений2024-03-28T19:18:53ZИстория изменений этой страницы в викиMediaWiki 1.31.0https://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2_%D0%BA%D0%B0%D0%BA_%D0%BD%D0%B0_umi-cms.ru&diff=8864&oldid=prevWhoa в 14:03, 21 ноября 20182018-11-21T14:03:32Z<p></p>
<table class="diff diff-contentalign-left" data-mw="interface">
<col class="diff-marker" />
<col class="diff-content" />
<col class="diff-marker" />
<col class="diff-content" />
<tr class="diff-title" lang="ru">
<td colspan="2" style="background-color: #fff; color: #222; text-align: center;">← Предыдущая</td>
<td colspan="2" style="background-color: #fff; color: #222; text-align: center;">Версия 14:03, 21 ноября 2018</td>
</tr><tr><td colspan="2" class="diff-lineno" id="mw-diff-left-l104" >Строка 104:</td>
<td colspan="2" class="diff-lineno">Строка 104:</td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"></td></tr>
<tr><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div><b><i>За написание этой статьи мы приносим особую благодарность</i> Дмитрию Неуймину</b></div></td><td class='diff-marker'> </td><td style="background-color: #f8f9fa; color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #eaecf0; vertical-align: top; white-space: pre-wrap;"><div><b><i>За написание этой статьи мы приносим особую благодарность</i> Дмитрию Неуймину</b></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;"></ins></div></td></tr>
<tr><td colspan="2"> </td><td class='diff-marker'>+</td><td style="color: #222; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;"><div><ins style="font-weight: bold; text-decoration: none;">[[Категория: Верстка в XSLT]]</ins></div></td></tr>
</table>Whoahttps://wiki.umisoft.ru/index.php?title=%D0%9F%D0%BE%D0%B4%D0%B1%D0%BE%D1%80%D0%BA%D0%B0_%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D1%87%D0%B8%D0%BA%D0%BE%D0%B2_%D0%BA%D0%B0%D0%BA_%D0%BD%D0%B0_umi-cms.ru&diff=1960&oldid=prevKirill: Новая страница: «'''Задача:<br/>''' Необходимо организовать подбор разработчиков, как на сайте на umi-cms.ru, но толь…»2010-11-21T12:40:25Z<p>Новая страница: «'''Задача:<br/>''' Необходимо организовать подбор разработчиков, как на сайте на umi-cms.ru, но толь…»</p>
<p><b>Новая страница</b></p><div>'''Задача:<br/>'''<br />
Необходимо организовать подбор разработчиков, как на сайте на umi-cms.ru, но только по городу. Пользователю предлагается список городов. При выборе города, система возвращает список разработчиков в этом городе. В административной панели, город - это выпадающий список со справочником.<br/><br />
При решении данной задачи мы использовали передачу параметров из адресной строки и два usel'а<br/><br />
<br/><br />
'''Исходные данные:'''<br />
Объекты каталога с type-id="830", среди которых производится выборка по значению поля типа "выпадающий список" с названием "os" . <br/><br />
<br/><br />
'''Решение:<br/>'''<br />
Для начала выведем список наших городов, который представляет собой элементы в справочнике для поля gorod. <br />
Найдём (создадим) этот справочник в модуле "Шаблоны данных". Просмотр содержимого справочника доступен по адресу /admin/data/guide_items/817/, где 817 - id справочника.<br/><br />
Теперь составим usel. Создадим в папке /usels/ новый файл goroda.xml следующего содержания:<br />
<br />
<?xml version="1.0" encoding="utf-8"?><br />
<selection><br />
<target result="objects"><br />
<type id="{1}" /><br />
</target><br />
<limit page="0">100</limit><br />
</selection><br />
<br />
Этот usel делает выборку всех объектов того типа, который задаётся при вызове usel'а. <br />
Проверить его можно, вызвав через адресную строку http://имя_сайта/usel/goroda/817/<br />
В данном случае - мы выбираем все объекты типа 817, что соответствует всем элементам справочника для поля "os".<br/><br />
Результат должен быть примерно таким:<br />
<br />
<udata generation-time="0.016162"><br />
<item id="27537" name="SMB" type-id="817" ownerId="14" xlink:href="uobject://27537"/><br />
<item id="27539" name="Windows M" type-id="817" ownerId="14" xlink:href="uobject://27539"/><br />
<item id="27541" name="TXT" type-id="817" ownerId="14" xlink:href="uobject://27541"/><br />
<item id="27542" name="gsm" type-id="817" ownerId="14" xlink:href="uobject://27542"/><br />
<total>4</total><br />
</udata><br />
<br />
Теперь создадим usel для выборки всех объектов каталога с типом 830 с определенным значением поля os, причем само значение будем передавать в качестве параметра. <br/><br />
Создадим в папке /usels/ новый файл goroda-res.xml следующего содержания:<br />
<br />
<?xml version="1.0" encoding="utf-8"?><br />
<selection><br />
<target result="pages"><br />
<type id="<b>830</b>" /><br />
</target><br />
<property name="os"><br />
<object>{1}</object><br />
</property><br />
<limit page="0">100</limit><br />
</selection><br />
<br />
Проверим его работу. Сделаем выборку всех объектов каталога, у которых в выпадающем списке выбрано "Windows M". id этого значения, как мы можем убедиться в выборке goroda, равно <b>27539</b>. Соответственно, вызов выборки будет выглядеть следующим образом: http://адрес_сайта/usel/goroda-res/27539/<br/><br />
<br />
Примерный результат:<br />
<udata generation-time="0.030022"><br />
<page id="59" parentId="58" link="/shop/mobil_naya_svyaz/kommunikatory/elektronika_71/" <br />
is-active="1" object-id="27654" type-id="830" update-time="1289758610" alt-name="elektronika_71" xlink:href="upage://59"><br />
<basetype id="6" module="catalog" method="object">Объекты каталога</basetype><br />
<name>Elektronika 71</name><br />
</page><br />
<page id="63" parentId="62" link="/shop/mobil_naya_svyaz/smartfony/ericssont_415/" <br />
is-active="1" object-id="27658" type-id="830" update-time="1289762117" alt-name="ericssont_415" xlink:href="upage://63"><br />
<basetype id="6" module="catalog" method="object">Объекты каталога</basetype><br />
<name>Ericssont 415</name><br />
</page><br />
<total>2</total><br />
</udata> <br />
<br />
Это и есть два объекта каталога нужного нам типа, в поле os которых выбрано "Windows M". Более подробно о возможностях usel можно прочитать здесь: http://help-dev.umi-cms.ru/chapter.XSLTTemplates.usel.html<br/><br />
<br />
Теперь выведем информацию на сайт:<br/><br />
Создадим две страницы: /vyborka/ с pageId = <b>89</b> для вывода списка значения справочника с ссылками на результат конкретной выборки и /rezultat/ pageId = <b>90</b> c для отображения результатов.<br />
<br />
Мы, для удобства, создали новую таблицу стилей (файл .xsl), которую подключили к основной таблице стилей с помощью <xsl:include><br/><br />
Добавим туда шаблон для обработки страницы /vyborka/<br />
<br />
<xsl:param name="gorod" select="0" /><br />
<xsl:template match="result[@pageId = '<b>89</b>']"><br />
<xsl:apply-templates select="document('usel://goroda/<b>817</b>')/udata" mode="goroda" /><br />
</xsl:template><br />
<xsl:template match="udata" mode="goroda" ><br />
<xsl:apply-templates select="item" mode="goroda" /><br />
</xsl:template><br />
<xsl:template match="item" mode="goroda" ><br />
<a href="<b>/rezultat/?gorod={@id}</b>"><xsl:value-of select="@name" /></a> &#160; &#160;<br />
</xsl:template><br />
<br />
Эти шаблоны выведут на странице /vyborka/ (с pageId = '<b>89</b>') список всех элементов справочника с id = <b>817</b> в строчку, причем каждый их элементов будет представлять из себя ссылку вида /rezultat/?gorod=27539<br/><br />
<br />
Теперь зададим шаблоны для вывода нужной выборки:<br />
<xsl:template match="result[@pageId = '<b>90</b>']"><br />
<xsl:apply-templates select="document(concat('usel://goroda-res/',$gorod))/udata" mode="goroda-res" /><br />
</xsl:template><br />
<xsl:template match="udata" mode="goroda-res" ><br />
<xsl:apply-templates select="page" mode="goroda-res" /><br />
</xsl:template><br />
<xsl:template match="page" mode="goroda-res" ><br />
<a href="{@link}"><xsl:value-of select="name" /></a> &#160; &#160;<br />
</xsl:template><br />
<br />
Эти шаблоны выведут на странице /rezultat/ (с pageId = '<b>90</b>') ту или иную выборку объектов каталога в зависимости от того, какой параметр будет присутствовать в адресной строке. Параметр у нас будет браться из ссылок на странице /vyborka/<br/><br />
<br />
Необходимо создать три файла:<br />
gorod.xsl нужно положить в /xsltTpls/ и подключить к основной таблице с помощью инструкции <xsl:include href = "gorod.xsl"> goroda.xml и goroda-res.xml нужно положить в usels.<br />
<br />
Жирным выделены id , которые нужно будет изменить в соответствии с id в вашей системе.<br />
<br/><br/><br />
<br />
<b><i>За написание этой статьи мы приносим особую благодарность</i> Дмитрию Неуймину</b></div>Kirill