1. Вопрос с иконкой в принципе оставим на самый конец (за ссылку спасибо!, статья полезная). Понятно, что для ее вывода надо будет использовать xsl:if test="checked", если мы говорим о "чекбокс"-е (детали, при возникновении вопроса, обсудим уже по факту реализации).
2. Если я Вас правильно понял, для начало "Новинку" в объектах каталога в опции управления, наряду с лучш.предлож. надо добавить, с идентификатором, например, "new_items" (кнопка-флажок). Правильно?
3. USEL такого рода будет (точная директива: /docs/usels/new-items.xml)?
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="catalog" method="object" />
</target>
<property name="new_items" value="1" />
<sort>rand()</sort>
<limit page="0">{limit}</limit>
</selection>
4. Не совсем понял, т.е. также создать аналогичный файл, только new-items.xsl с похожим содержанием, как и special-offers.xsl, с изменениями для новинок? Или вызов сделать уже в имеющемся special-offers.xsl?
5. А на главной странице выводиться это всё тоже будет после всего, или для этого надо дополнительно еще что-то сделать?
P.S. Я прошу прощения, понимаю, что вопросов много - "Лучшие предложения" - как так сделать, чтобы на главной странице внутри h1 (лучш.предлож.) появилась еще и ссылка "Все", которая будет ссылаться на страницу со всеми лучшими предложениями? Есть один сайт на UMI, на котором подобное реализовано, просто рекламировать его не хочу (могу скинуть ссылку на сайт в "личку", при необходимости).
Сделать новинки с usel, и создать страницу и вывести ее на главной получилось, а вот со вторым h1 (новинки) никак не получается. USEL вызовы сейчас выглядят так:
<xsl:template match="result[page/@is-default = '1']" priority="1">
<xsl:apply-templates select="document('usel://special-offers/?limit=&specials-limit;')" mode="special-offers" />
<xsl:apply-templates select="document('usel://new-items/?limit=&news-limit;')" mode="special-offers" />
</xsl:template>
Как сделать, чтобы после блока с лучшими предложениями (полностью после 9 лучш. предложений) вывести еще один h1 (новинки) после чего и должны выводиться новинки? Проблема с заголовком (h1) для новинок.
Как сделать, чтобы после блока с лучшими предложениями (полностью после 9 лучш. предложений) вывести еще один h1 (новинки) после чего и должны выводиться новинки? Проблема с заголовком (h1) для новинок.
<xsl:template match="result[page/@is-default = '1']" priority="1">
<xsl:apply-templates select="document('usel://special-offers/?limit=&specials-limit;')" mode="special-offers" />
<h1>мой второй h1 заголовок, но это не очень хорошо для seo</h1>
<xsl:apply-templates select="document('usel://new-items/?limit=&news-limit;')" mode="special-offers" />
</xsl:template>
чтобы ссылаться/перейти на нелимитированную страницу с полным списком предложений
у вас при вызове usel файла есть параметр limit, через него задайте очень большое число, ну например 1000000
<xsl:template match="result[page/@is-default = '1']" priority="1">
<xsl:apply-templates select="document('usel://special-offers/?limit=&specials-limit;')" mode="special-offers" />
<h1>мой второй h1 заголовок, но это не очень хорошо для seo</h1>
<xsl:apply-templates select="document('usel://new-items/?limit=&news-limit;')" mode="special-offers" />
</xsl:template>
Вместо h1 решил использовать h2, чтобы не ухудшать SEO. Здесь разобрался с Вашей помощью. Спасибо!
*************************
у вас при вызове usel файла есть параметр limit, через него задайте очень большое число, ну например 1000000
Я в курсе, только такой вариант не подойдет, потому, что на главной стр. лимит должен быть настраиваемым (например, 6 случайных объектов), а на своей странице уже полный список новинок или лучших предложений. Как быть?
*************************
С шаблоном для "новинок" тоже проблема - ничего не понял (приложил файл - название только менял, содержимое без изменений). Просто не совсем понял, где и как здесь сделать вызов usel, что оставить в коде, а что убрать?! ID новинок 3389. Просто было бы хорошо, если это был шаблоном как для новинок, так и для лучш.предлож. с полным списком предложений.
Подскажите, как можно этот файл (во вложении) под новинки подправить?
*************************
да, только не xsl:if test="checked" , а xsl:if test=".//property[@name='new_items']/value"
Подобная проверка не работает (иконка не видна (без проверки могу выводить, с проверкой никак))! Делаю так:
<xsl:if test=".//property[@name='best_offers']/value">
<img src="/images/icons/best.png" border="0" height="52" width="52" alt="Лучшее" />
</xsl:if>
<xsl:if test=".//property[@name='new_items']/value">
<img src="/images/icons/new.png" border="0" height="52" width="52" alt="Новинка" />
</xsl:if>
Пробовал содержимое test заключить в not() добавив после value !='', и без not() добавить ='1' ничего не помогает. Что посоветуете по этому поводу?
Я в курсе, только такой вариант не подойдет, потому, что на главной стр. лимит должен быть настраиваемым (например, 6 случайных объектов), а на своей странице уже полный список новинок или лучших предложений. Как быть?
У вас есть шаблон для главной страницы (где вы вставляли h2 заголовки), там вы ставили limit у usel вызова как вам надо для главной.
Для вывода списка всех новинок у вас должен быть отдельный шаблон с вызовом usel, там limit ставите 100000.
По поводу вывода всех новинок:
Вы привели файл newitem-view.xsl, судя по всему это копия файла catalog-view.xsl . Это не совсем то, о чем я говорил.
Сейчас для показа всех "лучших предложений" система использует шаблон (файл catalog-view)
<xsl:template match="/result[@method = 'category']">
<xsl:apply-templates select="document(concat('usel://special-category-offers/', $document-page-id, '?limit=&specials-limit;'))" mode="special-offers" />
<xsl:apply-templates select="document('udata://catalog/getCategoryList/void/shop//1/')" mode="left-column" />
</xsl:template>
срабатывает этот шаблон из-за того, что страница для вывода "лучших предложений" лежит на первом уровне вложенности (если посмотреть на шаблоны ниже вышеприведенного в файле catalog-view можно заметить что там стоят проверки на кол-во родителей то есть, вывод товаров происходит если мы находимся на странице раздела 2 и более уровня вложенности).
И вот, у нас появилась необходимость создать шаблон для вывода "новинок". Написать шаблон для страниц первого уровня мы не можем (перекроем шаблон для "лучших предложений") поэтому привяжемся к id страницы. Для этого ниже шаблона (который приведен выше) в файле catalog-view пишем шаблон вида
<xsl:template match="/result[@method = 'category' and @pageId=3389]">
<xsl:apply-templates select="document(concat('usel://news-item/', $document-page-id, '?limit=1000000'))" mode="special-offers" />
</xsl:template>
возможно добавятся еще какие-то вызовы или html элементы внутри данного шаблона или поменяется mode, но принцип думаю понятен.
[quote]Подобная проверка не работает (иконка не видна (без проверки могу выводить, с проверкой никак))! Делаю так:
Код:
<xsl:if test=".//property[@name='best_offers']/value">
<img src="/images/icons/best.png" border="0" height="52" width="52" alt="Лучшее" />
</xsl:if>
<xsl:if test=".//property[@name='new_items']/value">
<img src="/images/icons/new.png" border="0" height="52" width="52" alt="Новинка" />
</xsl:if>
Пробовал содержимое test заключить в not() добавив после value !='', и без not() добавить ='1' ничего не помогает. Что посоветуете по этому поводу?[/quote]
У вас не проходит проверка, так как скорее всего в xml, который обрабатывает данный шаблон, не содержит информацию о поле new_items.
Для того, чтобы она там появилась воспользуйтесь механизмом дополнительных данных общий принцип (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/makrosy_protokol_udata/#extended) и особенность для usel (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/vyborki_iz_bd_protokol_usel/#extended) или более грубый вариант сделайте проверку так
<xsl:if test="document(concat('upage://',@id,'.new_items'))//value">
<img src="/images/icons/new.png" border="0" height="52" width="52" alt="Новинка" />
</xsl:if>
и такую же проверку для поля best_offers, по аналогии
при запросе вида upage://333.field_name вы тратите больше ресурсов сервера, чем при использовании подгрузки дополнительных данных при вызове (ссылки я прикладывал в своем предыдущем сообщении)
Т. е., получается нагрузка на сервер. Это конечно же не хорошо.
У вас не проходит проверка, так как скорее всего в xml, который обрабатывает данный шаблон, не содержит информацию о поле new_items.
Для того, чтобы она там появилась воспользуйтесь механизмом дополнительных данных общий принцип и особенность для usel
Можете конкретно написать, что в xml файлы добавить для new_items и best_offers (код)?
1. "наличие usel файла для выборки" - для лучш.предлож. уже было, для новинок создал.
2. "наличие страницы в админке, на которой будут выводиться все новинки" - уже созданы страницы - их ID 3389 и 3395
3. "наличие шаблона для вызова usel файла именно на странице, которую мы создали на 2 шаге" - код ниже в файле category-view.xsl после <xsl:template match="/result[@method = 'category']">:
<xsl:template match="/result[@method = 'category' and @pageId=3389]">
<xsl:apply-templates select="document(concat('usel://new-items/', $document-page-id, '?limit=1000000'))" mode="special-offers" />
</xsl:template>
<xsl:template match="/result[@method = 'category' and @pageId=3395]">
<xsl:apply-templates select="document(concat('usel://special-offers/', $document-page-id, '?limit=1000000'))" mode="special-offers" />
</xsl:template>
Что в этих кодах не так - вроде Ваши подсказки реализованы. Может я что-то не так делаю?
P.S. единственное, что могу предположить, пример шаблона (3 шаг), который я приводил ранее, срабатывает когда страница является разделом каталога и когда у неё определенный id. Можете еще попробовать данный шаблон перенести ниже всех других шаблонов в файле catalog-view.xsl
Перенести - это как, сам код, или же дописать в эти шаблоны доп.элементы?
Если логически рассуждать, то объекты должны вызываться с помощью "udata://catalog/getObjectsList/", но этого не происходит, и страницы выводяться пустыми.
Просьба, вроде две вещи доделать осталось:
1. В xml (usel) дописать коды для срабатывания проверок
2. И вывод объектов на новых двух страницах (коды с ID выше)
Все можно проверить. Любой вызов через любой протокол (usel, upage, uobject и т.п.) можно проверить (что именно он возвращает и возвращает ли) вызвав его из адресной строки. Для usel читайте тут (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/vyborki_iz_bd_protokol_usel/#sel=36:1,39:25)
Узнайте что у вас подставляется в шаблоне
<xsl:template match="/result[@method = 'category' and @pageId=3389]">
<xsl:apply-templates select="document(concat('usel://new-items/', $document-page-id, '?limit=1000000'))" mode="special-offers" />
</xsl:template>
заместо переменной $document-page-id скорее всего это 3389 и сделайте вызов из адресной строки http://ваш_сайт/usel/new-items/3389. Если ваш usel написан верно и параметр ему передан верно (я не знаю для чего именно вы передаете параметр 3389, может в нем какая причина), то вы увидите xml со списком новинок.
Это для того, чтобы понять где у вас ошибка, в получении xml списка новинок или в обработке его и выводе на сайте.
А насчет экономичных вызовов, видимо надо пояснить на примере.
Вот у вас есть xml, который получился благодаря какому-то вызову из шаблона (мой пример не из umi, а просто для понимания)
<result>
<value>333</value>
</result>
если в шаблоне, который обрабатывает данный xml, вы поставите условие
<xsl:if test="title='222'">...</xsl:if>
то это правило никогда не вернет true , так как в данном xml изначально нет узла <title>, который можно было бы проверить
А вот если бы у вас был вывод узла <title>, то результат проверки зависил бы от того, что внутри этого узла содержится. То есть, если обрабатывать шаблоном, с if проверкой, такой xml
<result>
<title>111</title>
<value>333</value>
</result>
, то if проверка вернет false, но не из-за того что узла нет, а из-за того, что в нем неверное значение. А если шаблон будет обрабатывать xml вида
<result>
<title>222</title>
<value>333</value>
</result>
, то у вас сработает условие.
Ваша ситуация с property, который вы пытаетесь найти в результатах вызова usel://new-items точно такая же. У вас в этом результате (xml данных) не выводится property[@name='new_items'] вообще, даже если он у товара есть. Потому как usel возвращает только общую информацию о объекте, который попал в результат usel выборки. А для того, чтобы в этот результат(xml данные) вывести еще какую-то информацию, например о каком-то поле, есть возможность указать это в usel файле (как это делается я уже приводил ссылку, еще раз повторю (http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/vyborki_iz_bd_protokol_usel/#sel=140:1,140:40)).
Вывод usel, вместе с доп. данными тоже можно проверить через адресную строчку http://ваш_сайт/usel/new-items/3389, если в самом usel будет инструкция о выводе расширенных данных (ссылка выше).
Ваша ситуация с property, который вы пытаетесь найти в результатах вызова usel://new-items точно такая же. У вас в этом результате (xml данных) не выводится property[@name='new_items'] вообще, даже если он у товара есть. Потому как usel возвращает только общую информацию о объекте, который попал в результат usel выборки. А для того, чтобы в этот результат(xml данные) вывести еще какую-то информацию, например о каком-то поле, есть возможность указать это в usel файле (как это делается я уже приводил ссылку, еще раз повторю).
Правильно ли понял, что в usel внутри selection мне надо добавить следующий код:
<extended>
<properties>new_items</properties>
</extended>
заместо переменной $document-page-id скорее всего это 3389 и сделайте вызов из адресной строки http://ваш_сайт/usel/new-items/3389. Если ваш usel написан верно и параметр ему передан верно (я не знаю для чего именно вы передаете параметр 3389, может в нем какая причина), то вы увидите xml со списком новинок.
Это для того, чтобы понять где у вас ошибка, в получении xml списка новинок или в обработке его и выводе на сайте.
Вызовы usel по id 3389 и 3395 как Вы в цитате описали сделал, и объекты там есть (xml), в т.ч. и без добавления id к этим вызовам xml отображает объекты. $document-page-id заменил на 3389 и 3395 - сами страницы всё равно пустые. Если я Вас правильно понял, получается, что ошибка в обработке и выводе объектов на сайте. Может ли проблема быть в том, что страницы с id 3389 и 3395 созданы как страница контента (хотя страница с id 35 (лучш.предлож.) также является страницей контента)?
Посмотрите содержимое одного из usel (xml по нему формируется без проблем):
<?xml version="1.0" encoding="utf-8"?>
<selection>
<target result="pages">
<type module="catalog" method="object" />
</target>
<property name="new_items" value="1" />
<sort>rand()</sort>
<limit page="0">{limit}</limit>
</selection>
XML-файл:
С этим XML-файлом не связана ни одна таблица стилей. Ниже показано дерево элементов.
<udata module="usel" method="new-items" generation-time="0.975321"><page id="3374" parentId="92" link="/shop/notebooks/hp/g6v95ea/" is-active="1" object-id="31534" type-id="115" update-time="1412854655" alt-name="g6v95ea" xlink:href="upage://3374"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP ProBook 455 G2 (G6V95EA)</name></page><page id="3361" parentId="92" link="/shop/notebooks/hp/g7w29ea/" is-active="1" object-id="31518" type-id="115" update-time="1412968412" alt-name="g7w29ea" xlink:href="upage://3361"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP Pavilion x360 11-n050sr (G7W29EA)</name></page><page id="3372" parentId="92" link="/shop/notebooks/hp/g6v98ea/" is-active="1" object-id="31532" type-id="115" update-time="1412853207" alt-name="g6v98ea" xlink:href="upage://3372"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP ProBook 455 G2 (G6V98EA)</name></page><page id="3371" parentId="92" link="/shop/notebooks/hp/g6w45ea/" is-active="1" object-id="31531" type-id="115" update-time="1412852709" alt-name="g6w45ea" xlink:href="upage://3371"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP ProBook 455 G2 (G6W45EA)</name></page><page id="3271" parentId="244" link="/shop/monoblocks/hp/k2b39ea/" is-active="1" object-id="31396" type-id="131" update-time="1412968636" alt-name="k2b39ea" xlink:href="upage://3271"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP Envy Recline 23-k301nr TouchSmart (K2B39EA)</name></page><page id="3270" parentId="244" link="/shop/monoblocks/hp/k2b38ea/" is-active="1" object-id="31395" type-id="131" update-time="1412968622" alt-name="k2b38ea" xlink:href="upage://3270"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP Envy Recline 23-k300nr TouchSmart (K2B38EA)</name></page><page id="3362" parentId="92" link="/shop/notebooks/hp/g7w30ea/" is-active="1" object-id="31519" type-id="115" update-time="1412968425" alt-name="g7w30ea" xlink:href="upage://3362"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP Pavilion x360 11-n051sr (G7W30EA)</name></page><page id="3272" parentId="244" link="/shop/monoblocks/hp/k2b44ea/" is-active="1" object-id="31397" type-id="131" update-time="1412968650" alt-name="k2b44ea" xlink:href="upage://3272"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP Envy Recline 27-k300nr TouchSmart (K2B44EA)</name></page><page id="3373" parentId="92" link="/shop/notebooks/hp/g6w42ea/" is-active="1" object-id="31533" type-id="115" update-time="1412854377" alt-name="g6w42ea" xlink:href="upage://3373"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP ProBook 455 G2 (G6W42EA)</name></page><page id="3273" parentId="244" link="/shop/monoblocks/hp/k2b45ea/" is-active="1" object-id="31398" type-id="131" update-time="1412968663" alt-name="k2b45ea" xlink:href="upage://3273"><basetype id="55" module="catalog" method="object">Объекты каталога</basetype><name>HP Envy Recline 27-k301nr TouchSmart (K2B45EA)</name></page><total>10</total></udata>
Может ли проблема быть в том, что страницы с id 3389 и 3395 созданы как страница контента
Да, может, так как ваш шаблон
<xsl:template match="/result[@method = 'category' and @pageId=3389]">
<xsl:apply-templates select="document(concat('usel://news-item/', $document-page-id, '?limit=1000000'))" mode="special-offers" />
</xsl:template>
ищет страницу с id = 3389 относящуюся к методу category (такой метод выводится у страниц типа "раздел каталога"). Либо меняйте проверку @method в шаблоне, либо создавайте новую страницу соответствующего типа данных... и меняйте id в шаблоне
Либо меняйте проверку @method в шаблоне, либо создавайте новую страницу соответствующего типа данных... и меняйте id в шаблоне
Помог первый вариант (поменял @method = 'category' на @method = 'content') - объекты появились! Второй вариант с новыми страницами тоже вывел пустые страницы, не смотря на то, что я создал их как разделы каталога (не в модуле "структура", а в "каталог" как разделы) и в шаблоне изменил только их id, без изменения @method. Делал так (3405 id новый страницы):
<xsl:template match="/result[@method = 'category' and @pageId=3405]">
<xsl:apply-templates select="document(concat('usel://special-offers/', $document-page-id, '?limit=1000000'))" mode="special-offers" />
</xsl:template>
Правильно ли понял, что в usel внутри selection для проверки/выборки мне надо добавить следующий код?:
<extended>
<properties>new_items</properties>
</extended>
Добавил extended - вот результат xml:
<page id="3374" parentId="92" link="/shop/notebooks/hp/g6v95ea/" is-active="1" object-id="31534" type-id="115" update-time="1412854655" alt-name="g6v95ea" xlink:href="upage://3374">
<basetype id="55" module="catalog" method="object">Объекты каталога</basetype>
<name>HP ProBook 455 G2 (G6V95EA)</name>
<extended>
<properties>
<property id="642" name="new_items" type="boolean">
<title>Новые предложения</title>
<value>1</value>
</property>
</properties>
</extended>
</page>
Минус в том, что на главной-то стр. отображаются иконки, а вот в разделах каталога со списком объектов иконки исчезли (проверку сделал через .//property)?! А внутри самих объектов (карточки) вовсе обе иконки отображаются?! (:
Понятно. Спасибо! Вы и так меня за руку, как младенца вели. Оставлю "грубый", но в то же время рабочий вариант (просто, боюсь на производительность сайта данный вариант будет влиять, особенно когда количество объектов в них будет больше, чем сейчас):
<xsl:if test="document(concat('upage://', page/@id, '.best_offers'))//value">
<img src="/images/icons/best.png" border="0" height="52" width="52" />
</xsl:if>
<xsl:if test="document(concat('upage://', page/@id, '.new_items'))//value">
<img src="/images/icons/new.png" border="0" height="52" width="52" />
</xsl:if>