Ситуация такая.
У меня есть куча Специалистов, которые должны быть привязаны к разным Специализациям, сейчас они привязываются с помощью выпадающего списка, в котором выбираются Специализации.
Специалисты и Специализации являются типом данных и так же они могут использоваться как справочник.
У некоторых Специалистов может быть несколько направлений.
Получается на странице сотрудников вверху под крошками есть список Специализаций, если выбираешь Администрация, то должны отобразиться Специалисты у которых выбрана Специализация Администрация.
И соответственно если выбираешь все Специализации, то идет заголовок <h3></h3> с вставленным названием Специализации, и получается так, что Специалист на странице должен появляться несколько раз.
Думала использовать облако тегов, но почитав, вообще реально в облако тегов занести данные из справочника Специализаций?
вот запрос сотрудников:
<xsl:template match="result[page/@id = '272']">
<div class="specialize">
<h3>Администрация</h3> <!-- тут по сути должен быть запрос, который берет название из справочника -->
</div>
<div class="specialists">
<ul>
<xsl:apply-templates select="document('usel://main/272/148')/udata" mode="human"/>
</ul>
</div>
</xsl:template>
<xsl:template match="udata" mode="human">
<xsl:apply-templates select="page" mode="human"/>
</xsl:template>
<xsl:template match="page" mode="human">
<li class="specialists_item">
<a href="{@link}">
<span class="text">
<img src="{.//property[@name='fotografiya']/value}" alt="" />
<big><xsl:value-of select="//property[@name = 'familiya']/value"/></big>
<small><xsl:value-of select="//property[@name = 'imya_otchestvo']/value"/></small>
<p><xsl:value-of select="extended/properties/property[@name = 'dolzhnost']/value" disable-output-escaping="yes"/></p>
</span>
</a>
</li>
</xsl:template>
Вопрос в том как это реализовать.
Я думала это реализовать через табы, но это будет просто оооочень огромная страница. Или можно как-то обратиться к справочнику, в данном случае Специализация, чтобы он вывелся в табы? А специалисты заносились в tabs__content....
Звучит и выглядеть кажется будет очень бредово...
Использовать хочу самый простой таб:
<div class="tabs">
<ul class="tabs__caption">
<li class="active">1-я вкладка</li>
<li>2-я вкладка</li>
</ul>
<div class="tabs__content active">
Содержимое первого блока
</div>
<div class="tabs__content">
Содержимое второго блока
</div>
</div>
Я просто не знаю как связать справочники между собой. Чтобы при выборе специализации фильтровались специалисты....
Например прикол в том, что нужно, чтобы два специалиста рандомно выводились в правой колонке на странице описания специализации.
У меня мозг уже охреневает на самом деле...
Как сделать его в студию, он локальный ><
Попробовала сделать по примерам получился вот такой xml (на это моих знаний и хватило)
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type id="152" />
</target>
<extended>
<properties>h1</properties>
</extended>
</selection>
Вот как идет запрос на странице специалисты, и сверху специалистов сейчас находится все Специализации в виде списка.
Лазила и по dev и по wiki сайтам по umi, даже думала что нашла, но так и не уловила суть. не нашла я как связать два справочника
У каждого специалиста есть выпадающий список с множественным выбором и там выделено какие специализации он имеет, хотела его вывести и посмотреть, но ничего не выводит, может я не так сделала запрос? (выделено комментарием)
<xsl:template match="result[page/@id = '272']">
<ul>
<xsl:apply-templates select="document('usel://directions/272/152')/udata" mode="directions"/>
</ul>
<div class="specialize">
<h3>Администрация</h3>
</div>
<div class="specialists">
<ul>
<xsl:apply-templates select="document('usel://main/272/148')/udata" mode="human"/>
</ul>
</div>
</xsl:template>
<xsl:template match="udata" mode="human">
<xsl:apply-templates select="page" mode="human"/>
</xsl:template>
<xsl:template match="page" mode="human">
<li class="specialists_item">
<a href="{@link}">
<span class="text">
<xsl:value-of select="extended/properties/property[@name = 'otdelenie']/value" /> <!-- вот эта строка не выводится, хотя поле прописано в xml -->
<img src="{extended/properties/property[@name='fotografiya']/value}" alt="" />
<big><xsl:value-of select="extended/properties/property[@name = 'familiya']/value"/></big>
<small><xsl:value-of select="extended/properties/property[@name = 'imya_otchestvo']/value"/></small>
<p><xsl:value-of select="extended/properties/property[@name = 'dolzhnost']/value" disable-output-escaping="yes"/></p>
</span>
</a>
</li>
</xsl:template>
<xsl:template match="udata" mode="directions">
<xsl:apply-templates select="page" mode="directions"/>
</xsl:template>
<xsl:template match="page" mode="directions">
<li>
<xsl:value-of select="extended/properties/property[@name = 'h1']/value" />
</li>
</xsl:template>
Хм... а как тогда по другому реализовать фильтр?
Я бы еще предположила сделать вывод Специалистов по отмеченным в поле Специализациям.
Т.е. у нас есть выводимый сверху список Специализаций, при выборе какой-то специализации выводить тех Специалистов, у которых в поле списка со множественным выбором, где подключен справочник Специализации, выбраны одна или несколько специализаций.
Но такой метод я сомневаюсь что осилю, тут кроме теоретической стороны, ничего предположить не могу
Не говоря о том, что у меня почему-то не выводится содержимое поля списка... (((
Хотя оно есть:
<group id="411" name="specialisty">
<title>Специалисты</title>
<property id="512" name="dolzhnost" type="text" is-important="0">
<title>Должность</title>
<value>Профессор, руководитель центра</value>
</property>
<property id="519" name="specialzaciya" type="relation" multiple="multiple" is-important="0">
<title>Специализация</title>
<value><!-- Вот список -- >
<item id="1314" name="Тест1" type-id="152" update-time="1456911122" ownerId="59" xlink:href="uobject://1314"/>
<item id="1343" name="Тест2" type-id="152" update-time="1456911260" ownerId="59" xlink:href="uobject://1343"/>
<item id="1344" name="Тест3" type-id="152" update-time="1456911865" ownerId="59" xlink:href="uobject://1344"/>
<item id="1363" name="Тест4" type-id="152" update-time="1456914369" ownerId="59" xlink:href="uobject://1363"/>
</value>
</property>
<property id="521" name="familiya" type="string" is-important="0">
<title>Фамилия</title>
<value>Вторая</value>
</property>
<property id="522" name="imya_otchestvo" type="string" is-important="0">
<title>Имя Отчество</title>
<value>Имя Первое</value>
</property>
</group>
Я нашла кучу запросов как вывести справочник, и ни одного как сделать связь/проверку для фильтра Т__Т
Изменила кстати запрос для справочника.
Теперь код для страницы выглядит так, в комментариях вопросы есть Т_Т
<xsl:template match="result[page/@id = '272']">
<ul class="directions">
<xsl:apply-templates select="document(concat('usel://guide/',152,'/name'))/udata/item" mode="guide.list"/>
</ul>
<div class="specialize">
<h3>Администрация</h3> <!-- по сути заголовок должен брать из выбранной в списке специализации -->
</div>
<div class="specialists">
<ul>
<xsl:apply-templates select="document('usel://main/272/148')/udata" mode="human"/>
</ul>
</div>
</xsl:template>
<xsl:template match="udata" mode="human">
<xsl:apply-templates select="page" mode="human"/>
</xsl:template>
<xsl:template match="page" mode="human">
<li class="specialists_item">
<a href="{@link}">
<span class="text">
<img src="{extended/properties/property[@name='fotografiya']/value}" alt="" />
<big><xsl:value-of select="extended/properties/property[@name = 'familiya']/value"/></big>
<small><xsl:value-of select="extended/properties/property[@name = 'imya_otchestvo']/value"/></small>
<p><xsl:value-of select="extended/properties/property[@name = 'dolzhnost']/value" disable-output-escaping="yes"/></p>
<xsl:value-of select="extended/properties/property[@name='otdelenie']/value/item" />
<!-- и вот вывод списка отделений так и не работает, почему? -->
</span>
</a>
</li>
</xsl:template>
<xsl:template match="udata/item" mode="guide.list">
<xsl:param name="guide-list-name" select="@name" />
<li>
<xsl:value-of select="$guide-list-name" />
</li>
</xsl:template>
Вот .xml одного специалиста и там видно, что поле с отделениями подтягивается:
<group id="411" name="specialisty">
<title>Специалисты</title>
<property id="512" name="dolzhnost" type="text" is-important="0">
<title>Должность</title>
<value>Профессор, руководитель центра</value>
</property>
<property id="519" name="specialzaciya" type="relation" multiple="multiple" is-important="0">
<title>Специализация</title>
<value><!-- Вот список специализаций у специалиста-- >
<item id="1314" name="Тест1" type-id="152" update-time="1456911122" ownerId="59" xlink:href="uobject://1314"/>
<item id="1343" name="Тест2" type-id="152" update-time="1456911260" ownerId="59" xlink:href="uobject://1343"/>
<item id="1344" name="Тест3" type-id="152" update-time="1456911865" ownerId="59" xlink:href="uobject://1344"/>
<item id="1363" name="Тест4" type-id="152" update-time="1456914369" ownerId="59" xlink:href="uobject://1363"/>
</value>
</property>
<property id="521" name="familiya" type="string" is-important="0">
<title>Фамилия</title>
<value>Вторая</value>
</property>
<property id="522" name="imya_otchestvo" type="string" is-important="0">
<title>Имя Отчество</title>
<value>Имя Первое</value>
</property>
</group>
А для работы с селекторами надо знать php? ((
Так.... Эпопея продолжается.
у меня есть xml грубо говоря который берет по id специалистов
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages" expected-result="count">
<type id="148" />
<category depth="2">{1}</category>
</target>
<limit page="0">{limit}</limit>
<extended>
<groups>specialisty</groups>
<properties>content, tags, h1, content, header_pic, menu_pic_a, photo, descr, vidimoepole, skrytoepole, zanayutiya, uslugi, priceuslug, familiya, imya_otchestvo, dolzhnost, fotografiya, otdelenie</properties>
</extended>
</selection>
Есть xml который по сути должен подтягивать специализации.
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages" expected-result="count">
<type id="152" />
<category depth="2">{1}</category>
</target>
<limit page="0">{limit}</limit>
</selection>
И вот есть что типа вызывается на страницу
<xsl:template match="result[page/@type-id = '146']">
<ul class="directions">
<li class="filter" data-filter=".mix">Все работы</li>
<xsl:apply-templates select="document('usel://razdely/273')/udata" mode="razdel"/>
</ul>
<div class="specialists">
123<xsl:apply-templates select="document(concat('usel://portfolio/',@id))/udata" mode="portfolio_list"/>
</div>
</xsl:template>
<xsl:template match="udata" mode="portfolio_list">
<xsl:apply-templates select="page" mode="portfolio_list"/>
</xsl:template>
<xsl:template match="page" mode="portfolio_list">
<xsl:variable name="tag-alt">
<xsl:apply-templates select="extended/groups/group/property[@name='napravlenie']/value/page" mode="tags-alt"/>
</xsl:variable>
<div class="mix {$tag-alt}">123
<div class="specialists" data-link="{@link}" data-id="{@id}">
<h6>123
<xsl:value-of select="name"/>
</h6>
<hr/>
<xsl:apply-templates select="extended/groups/group/property[@name='napravlenie']/value/page" mode="tags-name"/>
<div class="portfolio_over_link">
123 <xsl:variable name="link" select="extended/groups/group/property[@name='ssylka_na_sajt']/value"/>
<xsl:if test="$link">
<a href="{$link}" class="attach" target="_blank"></a>
</xsl:if>
<p class="js_link_portfolio link" data-link="{@link}"></p>
</div>
</div>
</div>
</xsl:template>
<xsl:template match="page" mode="tags-alt">
<xsl:value-of select="@alt-name"/><xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="page" mode="tags-name">
<p>
<span class="filter" data-filter=".{@alt-name}">
<xsl:value-of select="name"/>
</span>
</p>
</xsl:template>
<xsl:template match="udata" mode="razdel">
<xsl:apply-templates select="page" mode="razdel"/>
</xsl:template>
<xsl:template match="page" mode="razdel">
<li class="filter" data-filter=".{@alt-name}">
<xsl:value-of select="name"/>
</li>
</xsl:template>
Итог, специализации подтягиваются, а вот из всех тестовых 123 подтягивается только первый, что идет в самом начале (((((
И специалисты соответственно не выводятся....
Еще я подключила поле Ссылка на дерево
(кстати, можно тип данных переместить и сделать деревом другого типа данных когда он уже соединен )
Вот такой фильтр у меня получился на основе mixitup.
направления тип данных 152, у основания структуры тип данных 151:
151
--152
--152
151
--152
--152
151
--152
151
--152
Сейчас у меня для фильтра подтягиваются все направления которые есть, т.е. все названия с типом данных 152.
Как сделать, чтобы подтягивались направления из конкретного начала, т.е. из конкретного 151, допустим первого. И не подтягивал из последних трех?
<xsl:template match="result[page/@type-id = '146']">
<div class="controls">
<ul class="directions">
<li class="filter" data-filter=".mix">Все направление</li>
<xsl:apply-templates select="document('usel://razdely/273')/udata" mode="razdel"/> <!-- здесь подтягивается направления, все названия с типом данных 152 -->
</ul>
</div>
<div class="specialists" id="container">
<ul class="specialists_item">
<xsl:apply-templates select="document('usel://main/272/148')/udata" mode="portfolio_list"/>
</ul>
<div style="clear: both;"></div>
</div>
</xsl:template>
<xsl:template match="udata" mode="portfolio_list">
<xsl:apply-templates select="page" mode="portfolio_list"/>
</xsl:template>
<xsl:template match="page" mode="portfolio_list">
<h3><xsl:value-of select="name"/></h3> <!-- Как правильно написать обращение к имени, по которому фильтруется специалисты? -->
<xsl:variable name="tag-alt">
<xsl:apply-templates select="extended/groups/group/property[@name='napravlenie']/value/page" mode="tags-alt"/>
</xsl:variable>
<li class="mix {$tag-alt}">
<xsl:attribute name="class">
<xsl:value-of select="extended/properties/property[@name = 'css_class']/value" />
</xsl:attribute>
<xsl:apply-templates select="extended/groups/group/property[@name='napravlenie']/value/page" mode="tags-name"/>
<span class="text">
<a href="{@link}"><img src="{extended/properties/property[@name='fotografiya']/value}" alt="" />
<big><xsl:value-of select="extended/properties/property[@name = 'familiya']/value"/></big>
<small><xsl:value-of select="extended/properties/property[@name = 'imya_otchestvo']/value"/></small></a>
<p><xsl:value-of select="extended/properties/property[@name = 'dolzhnost']/value" disable-output-escaping="yes"/></p>
</span>
<div class="block-link">
<span><a href="#win1" class="apply">записаться</a></span>
<span><a href="#win3" class="reviews">Отзывы</a></span>
</div>
</li>
</xsl:template>
<xsl:template match="page" mode="tags-alt">
<xsl:value-of select="@alt-name"/><xsl:text> </xsl:text>
</xsl:template>
<xsl:template match="page" mode="tags-name">
<p>
<span class="filter" data-filter=".{@alt-name}">
<xsl:value-of select="name"/>
</span>
</p>
</xsl:template>
<xsl:template match="udata" mode="razdel">
<xsl:apply-templates select="page" mode="razdel"/>
</xsl:template>
<xsl:template match="page" mode="razdel">
<li class="filter" data-filter=".{@alt-name}">
<xsl:value-of select="name"/>
</li>
</xsl:template>
И скоромный вопрос указан в комментарии кода, просто нужно чтобы потягивалось название выбранного направления из фильтра в заголовок.