UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: sam от 23 Октября 2014, 16:02:26

Название: Поиск по каталогу (поиск товаров/объектов)
Отправлено: sam от 23 Октября 2014, 16:02:26
На данный момент поиск отвечая на запросы (поиск товаров) выдает ответ - порядковый номер, ссылку на найденный объект плюс строку, где есть соответствующие поисковому запросу ключевые слова. 

Вопрос: не могли бы подсказать, как можно сохранив вышеописанный вывод для всех разделов сайта кроме каталога, сделать еще один шаблон для раздела "каталог", где поисковый ответ должен будет равняться short-view, т.е. так, как объекты отображаются в категориях, если мы говорим о поиске товаров на сайте? Как бы получается, что добавить шаблон заключенный в xsl:if test="если поисковое слово найдено в объектах/категориях, то выводить этот шаблон", далее шаблон short-view. Или же с xsl:choosе - как логичнее на ваш взгляд. Примерный код шаблона с проверкой можете предложить?

Заранее спасибо!
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: admin от 07 Ноября 2014, 23:41:21
Если вы хотите выводить результаты поиска в виде краткой краточки товара, то стоит организовать поиск таким образом, чтобы он искал только среди товаров. Для этого вам достаточно в форме поиска, добавить поле, указывающее какой базовый тип данных вас интересует.
<input type="hidden" value="6" name="search_types">
В данном примере, 6 - это id базового типа данных "Объект каталога", базовые типы данных можно увидеть в модуле "Шаблоны данных", на странице "настройки модуля"

По поводу вывода. Вы можете просто поменять mode/ В большинстве случаев, этого будет достаточно. То есть
<xsl:apply-templates select="items/item" mode="search-result" />
заменить на
<xsl:apply-templates select="items/item" mode="short-view" />

Стоит помнить, что если при вызове getObjectsList вы используете ?extProps, то такой же ?extProps надо прописать вызову
<xsl:apply-templates select="document('udata://search/search_do')" />


Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: sam от 08 Ноября 2014, 17:08:46
Спасибо за подробное объяснение! Попробую сделать.

Только следующее не совсем понял:

Цитировать
Стоит помнить, что если при вызове getObjectsList вы используете ?extProps, то такой же ?extProps надо прописать вызову
Код:
<xsl:apply-templates select="document('udata://search/search_do')" />


Что за ?extProps, и как это прописать в вышеуказанном вызове?
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: admin от 08 Ноября 2014, 17:46:20
читайте тут http://dev.docs.umi-cms.ru/shablony_i_makrosy/xslt-shablonizator_umi_cms/makrosy_protokol_udata/#extended
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: sam от 09 Ноября 2014, 16:42:47
admin, один не могу справиться - получается какая-та белиберда непонятная?! В следующий  код вставил предложенный Вами hidden input (search-results.xsl):
		<form class="search" action="/search/search_do/" method="get">
<input type="hidden" value="6" name="search_types">
<input type="text" value="{$search_string}" name="search_string" class="textinputs"  x-webkit-speech="" speech="" />
<input type="submit" class="button" value="Найти" />
</form>

А потом уже нашел следующий код
<xsl:apply-templates select="items/item" mode="search-result" />
и заменил его на
<xsl:apply-templates select="items/item" mode="short-view" />

В результате поиска в ответ получил "ключевые слова", фото, цена, кнопка и всё это построчно и съезжается в разброс по странице, т.е. желаемый результат не получается. И не знаю, используем ли ?extProps?!  

А я хочу получить результат, точно как скрин во вложении (см. прикрепленный файл). Прикрепляю еще базовый файл поиска (файл без изменений, т.е. от UMI). Помогите получить желаемый результат.
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: sam от 25 Ноября 2014, 13:47:45
Эта тема еще актуальна - см. предыдущее сообщение.
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: admin от 25 Ноября 2014, 17:17:11
Эта тема еще актуальна - см. предыдущее сообщение.
sam, учитесь ставить вопросы. На ваш вопрос "Помогите получить желаемый результат" я бы ответил так.

1. при отправке формы поиска используйте скрытый input с типом данных который вас интересует (скрытый input есть, равен ли 6 нужный вам тип данных... не знаю, это надо проверять вам в вашей системе... вы знаете где посмотреть id типа данных?)

2. в шаблоне, который обрабатывает результаты, вывести результаты как краткие карточки товара. На первый взгляд, вы попытались вывести результаты поиска используя шаблон для краткой карточки товара , добавив mode="short-view" , но решило ли это все вопросы, видимо нет. Вам надо проверить:
- вызывается ли шаблон краткой карточки (добавьте в него 123 и проверьте выводиться ли он или это какой-то другой шаблон)
- достаточно ли данных передает результат макроса search шаблону mode="short-view"
- выводит ли система тот html, который выводиться в разделе каталога.
- применяется ли на этот html css, который применяются в разделе каталога (возможно у вас все ок с html, но стили не применяются из-за отсутствия какого-то родительского класса или т.п.)


Для того, чтобы это проверить, надо просто уметь посмотреть с каким xml вы работает в каком шаблоне (xsl:copy-of, о котором мы говорили в другой теме, как раз для этого подойдет)
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: sam от 25 Ноября 2014, 18:42:15
admin, прошу прощения - понимаю, что обращаюсь за помощью, но иногда Вы такие встречные вопросы задаёте, что я недоумеваю.

Вы профи в своей области (в этом Ваше преимущество), а я в Вашей области не профи, потому ставлю вопросы так, как я это понимаю. Так что, извините, если формулировки вопросов не понятны для Вас!

Теперь по сути вопроса:
1. Настройки "Шаблона данных" у нас и в localhost аналогичны по порядку в списке модулей (они в настройках шаблона данных в 7-ой строке), а вот какой там id, и как/где это смотреть я не знаю, к сожалению (Ваше преимущество - Вы знаете, что и где посмотреть). <input type="hidden" value="6" name="search_types" /> - по этому hidden поиск ничего не находит, к сожалению.

2. Получил желаемый результат (dl class="..." заменил на div class="catalog", и в этот же div добавил еще один div class="objects"). Спасибо за подсказку! Но пришлось написать шаблон search-short-view в файле search-result.xsl, так как поиск придирался - название товара в short-view указано как name, а поиск требует @name, иначе выводит title из head.

2.1. Еще несколько вопросов:
а) все же, какой hidden с каким value поставить, чтобы искать в разделах среди объектов/товаров? не знаю я, где и как id посмотреть.
б) как указать лимит на количество найденных товаров, например, 50?
в) почему поиск требует @name, а не может по name (без собачки) вывести название, а в разделах каталога name (без собачки) работает?
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: admin от 26 Ноября 2014, 08:01:00
а) все же, какой hidden с каким value поставить, чтобы искать в разделах среди объектов/товаров? не знаю я, где и как id посмотреть.

id нужного вам типа данных, можно посмотреть в настройках модуля "Шаблоны данных". Там найдите тип данных "Объект каталога" и посмотрите, в html, какой id стоит у кнопки галочки напротив него (эта галочка используется для удаления и там есть id)

б) как указать лимит на количество найденных товаров, например, 50?

Кол-во страниц для вывода на одной странице (и появление пагинации если их больше этого кол-ва) можно задать в модуле "Поиск".

в) почему поиск требует @name, а не может по name (без собачки) вывести название, а в разделах каталога name (без собачки) работает?

Потому как xml возвращается по другому и шаблон для вывода товаров не во всем подходит для вывода результатов поиска. Зная это либо пишите в шаблоне short-view проверочные условия, либо делайте отдельный template (видимо по этому пути вы и пошли)

P.S. по поводу формулировок
Цитировать
admin, прошу прощения - понимаю, что обращаюсь за помощью, но иногда Вы такие встречные вопросы задаёте, что я недоумеваю.

Вы профи в своей области (в этом Ваше преимущество), а я в Вашей области не профи, потому ставлю вопросы так, как я это понимаю. Так что, извините, если формулировки вопросов не понятны для Вас!
Пусть так, но моя главная задача не ответить вам на конкретный вопрос, а помочь разобраться и научиться чему-то новому. А для этого, мне нужно чтобы вы самостоятельно формировали как можно более подробные вопросы. Так как при этом часть вопросов отпадет, а другая отпечатается в памяти.
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: sam от 26 Ноября 2014, 17:38:54
а) Спасибо за подсказку! - id 55 (<input type="checkbox" name="dels[]" value="55" class="check">. Поиск вроде среди объектов каталога производится.

б) Спасибо за подсказку! Вопрос: настроил лимит, сделал поиск, нашелся объектов больше установленного лимита, соответственно перелистывать, а блок с numpage не на своём месте, вернее, border-top с border-bottom (css) накладывается на последние 3 объекта, а содержимое numpage (1 2 3 |следующее) на своём месте внизу, после всех найденных объектов. По стилям все совпадает, а что тогда не так? Почему border-top с border-bottom (css) накладывается на последние 3 объекта?

в) Если честно, пробовал в common.xsl менять name на @name в mode=short-view, в разделах каталога всё ок, а вот новинки и лучшее название выводились примерно так "Объект каталога Ноутбук...". Подскажите, как сделать проверку для short-view, а именно для блока внутри ссылки с названием товара? Вот кусочек этого кода (что написать внутри test для проверки? - когда стр. поиск товаров, первое условие, а по умолчанию второе):
		<xsl:choose>
<xsl:when test="выводить, когда используется шаблон из search-results.xsl">
<xsl:value-of select="@name" />
<xsl:if test="not(@name)">
<xsl:apply-templates />
</xsl:if>
</xsl:when>
<xsl:otherwise><!-- по умолчанию -->
<xsl:value-of select="name" />
<xsl:if test="not(name)">
<xsl:apply-templates />
</xsl:if>
</xsl:otherwise>
</xsl:choose>

P.S. Не должно Вас смутить то что я напишу, но как и ранее писал, Вы водите меня почти за руку, и помогаете ориентироваться в недрах xslt/xml (для меня это всё тёмный лес). Пребольшое моё Вам спасибо за всё!
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: sam от 17 Декабря 2014, 14:56:14
Из предыдущего письма открытым остался вопрос/пункт "б":

б) Вопрос: настроил лимит, сделал поиск, нашелся объектов больше установленного лимита, соответственно перелистывать, а блок с numpage не на своём месте, вернее, border-top с border-bottom (css) накладывается на последние 3 объекта, а содержимое numpage (1 2 3 |следующее) на своём месте внизу, после всех найденных объектов. По стилям все совпадает, а что тогда не так? Почему border-top с border-bottom (css) накладывается на последние 3 объекта?

Буду признателен за подсказки!

P.S. С пунктом "в" (проверка на "name/@name") я справился самостоятельно.
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: admin от 17 Декабря 2014, 15:33:28
Из предыдущего письма открытым остался вопрос/пункт "б":

б) Вопрос: настроил лимит, сделал поиск, нашелся объектов больше установленного лимита, соответственно перелистывать, а блок с numpage не на своём месте, вернее, border-top с border-bottom (css) накладывается на последние 3 объекта, а содержимое numpage (1 2 3 |следующее) на своём месте внизу, после всех найденных объектов. По стилям все совпадает, а что тогда не так? Почему border-top с border-bottom (css) накладывается на последние 3 объекта?

Буду признателен за подсказки!

P.S. С пунктом "в" (проверка на "name/@name") я справился самостоятельно.

вопрос уже к css, возможно у вас результаты выводятся как float:left блоки, а контейнер в котором лежат результаты не имеет свойства clear:both в итоге, некоторые элементы расположенные ниже блока с результатами, как бы на него налазят.
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: sam от 17 Декабря 2014, 22:59:02
"Век живи - век учись"! Проблема была именно в этом - добавление clear:both к стилю numpages расставило все по своим местам. Спасибо! Тема закрыта.

P.S. Просьба, admin, по возможности попробуйте помочь в решении других вопросов - открыты еще несколько тем.

Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: Axiomateria от 25 Января 2015, 21:00:21
Если вы хотите выводить результаты поиска в виде краткой краточки товара, то стоит организовать поиск таким образом, чтобы он искал только среди товаров. Для этого вам достаточно в форме поиска, добавить поле, указывающее какой базовый тип данных вас интересует.
<input type="hidden" value="6" name="search_types">
В данном примере, 6 - это id базового типа данных "Объект каталога", базовые типы данных можно увидеть в модуле "Шаблоны данных", на странице "настройки модуля"

По поводу вывода. Вы можете просто поменять mode/ В большинстве случаев, этого будет достаточно. То есть
<xsl:apply-templates select="items/item" mode="search-result" />
заменить на
<xsl:apply-templates select="items/item" mode="short-view" />

Стоит помнить, что если при вызове getObjectsList вы используете ?extProps, то такой же ?extProps надо прописать вызову
<xsl:apply-templates select="document('udata://search/search_do')" />


Вот всё сделал, как и написано. Превью объектов вывелись как надо, то есть по шаблону категории товаров, но кроме одного нюанса - в моём случае названия объектов в их превью ссылки на подробные карточки товаров и в этих ссылках экроме названия самого объекта включились символы <p><b> Название объекта </p></b>   .

В полном виде это так выводится:

<a href="/market/ventilyaciya/ventilyatory/kanal_nye_ventilyatory/ventilyator_pervyj_no_ne_poslednij_test_11_panasonic/" class="title" umi:element-id="320" umi:field-name="name" umi:delete="delete" title="Вентилятор первый но не последний с длинным названием в три строки как бы - ТЕСТ 11 - Panasonic"><p>Радиальный <b>вентилятор</b> ТЕСТ 22 - LG Мульти сплит-система для 2-х помещений площадью до 25 м2 каждое на общую площадь до 50 м2 Мульти сплит-система (комплект) </p></a>

то есть в теге <a>...</a> добавилось не нужное форматирование - как его убрать ?
Название: Re:Поиск по каталогу (поиск товаров/объектов)
Отправлено: Axiomateria от 26 Января 2015, 12:07:22
то есть в теге <a>...</a> добавилось не нужное форматирование - как его убрать ?

А вот как: <xsl:value-of select="." disable-output-escaping="yes" />  и экранирование символов отключается в файле .../catalog/common.xsl