UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: shoto от 19 Февраля 2013, 11:20:12

Название: Вывод всех property из group раздела каталога.
Отправлено: shoto от 19 Февраля 2013, 11:20:12
Добрый день.
Пришлось столкнуться с необходимостью вывода дополнительных значений из раздела каталога.
в разделе каталога была создана дополнительная группа, в нее добавлено несколько полей одинакового типа.
Необходимо вывести эти поля по определенному шаблону.
но максимум что у меня получается - вывести значение первого поля property.
Как написать запрос что бы выводились все?

В файле Category-view.xsl задан шаблон, который выводит значения проверяя соответствие конкретного раздела каталога
<xsl:template match="/result[@method = 'category'][@pageId='86']">
и внутри максимум что получилось:
xsl:variable name="item" select="document(concat('upage://', $document-page-id))/udata" />
<xsl:value-of select=".//group[@name='3d']/property"/>

при попытке использовать <xsl:apply-templates.... /> - белая страница.
Что посоветуете?
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: Rodogor от 19 Февраля 2013, 13:58:45
Что-то я не особо въехал, но так и должно быть.

Есть каталог. В каталоге раздел, для которого описан конкретный шаблон, не общий. Для раздела каталога установлены дополнительные поля, которые необходимо вывести и видимо название группы - 3d.

Если мы выводим данные страницы, внутри которой находимся, то сохранять её в переменную нелогично, т.к. можно и так получить доступ. Ну типо лишние переменные, лишняя память, лишняя нагрузка и т.п... Я вот по оптимизации парюсь - поэтому у меня все сайты тупят. :)

Так вот.. Что бы вывести property внутри group, делаем такой шаблон:

<xsl:apply-templates select=".//group[@name='3d']/property" mode="group_property"/>

Далее делаем шаблон для group:

<xsl:template match="property" mode="group_property">
тут обрабатываем property, учитывая что они бывают разного вида....
</xsl:template>

Ещё можно заюзать поиск - http://umihelp.ru/forum/index.php/topic,1388.msg5329.html
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: shoto от 19 Февраля 2013, 14:57:36
Спасибо за комментарий "юзайте поиск"
За неделю многое просмотрела и попробовала.
Но как я уже написала выше, попытка вставить  шаблон вида
<xsl:apply-templates select=".//group[@name='3d']/property" mode="3d"/>
приводит к белой странице, вместо сайта
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: Rodogor от 19 Февраля 2013, 19:53:33
Нужно найти место, где возникает ошибка... Локализовать её...

Белая страница обычно бывает тогда, когда сильно накосячишь на php. Никакие действия там не используются с этими данными ?

Нужно убедиться, что код для вывода полей группы правильный. Это можно сделать на другом объекте, на другом хосте. Убедиться, что работает xslt процессор (или как его там...)

Нужно попробовать вывести свойства, которые не выводятся, через property. <xsl:value-of select=".//property[@name='ololo']/value"/>

Нужно убедиться, что косяк происходит именно при использование apply (хотя я думаю в таком случае вообще ничего бы не работало и скорее всего это не так).

Сделать свой метод какого-нибудь класса, который будет возвращаться  var_dump(666); exit; и постепенно перетаскивая <xsl:value-of select="document('udata://content/myDump/'"/> найти место до которого работает и после которого не работает...
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: shoto от 19 Февраля 2013, 22:14:36
Вывести значение Property методом <xsl:value-of /> получается одно, первое значение, что и логично, потому что value-of выводит первое подходящее значение. И белый экран появляется именно при вставке единственной строки <xsl:apply-templates....../>
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: Rodogor от 19 Февраля 2013, 22:35:30
Смотрите как можно сделать. К примеру, у вас внутри group с названием 3d хранятся следующие property - propertyName1, propertyName2, propertyName3.
Вывести можно так:
<xsl:value-of select=".//property[@name='propertyName1']/value"/>
<xsl:value-of select=".//property[@name='propertyName2']/value"/>
<xsl:value-of select=".//property[@name='propertyName3']/value"/>

И ещё - попробуйте объект, который зависает вывести через класс data метод getEditForm
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: shoto от 20 Февраля 2013, 07:59:36
Этот вариант конечно хорош если этих property не сколько, но если их уже больше 15-ти....
Но судя по всему иного варианта у меня сейчас нет.
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: Rodogor от 20 Февраля 2013, 08:52:04
Блин, я может непонятно пишу - нужно попробовать вывести разными способами и найти то место, на котором возникает ошибка. Может база покоцана и при получение какой-то записи из неё (какого-то property) происходит затык, может быть значение какое-то там некорретное (я когда своими кривыми руками базу потыкаю, то бывает, что потом много непонятных ошибок выскакивает).
Уже писал выше - надо попробовать разные варианты + getEditForm
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: shoto от 20 Февраля 2013, 09:02:37
Все заработало как мне надо после того как я изменила параметры MATCH
вместо:
<xsl:template match="/result[@method = 'category'][@pageId='86']">
оставила:
Цитировать
<xsl:template match="/result[@pageId='86']">

<xsl:value-of select=".//property[@name='descr']/value" disable-output-escaping="yes" />
<xsl:apply-templates select=".//group[@name='3d']/property" mode="group_property"/>
</xsl:template>   
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: Rodogor от 20 Февраля 2013, 10:34:18
Я что-то запутался. Получается, что "белая страница" - это не означало ошибку и остановку выполнения каких-то алгоритмов (типа break), а просто не получалось написать условие, по которому должен был сработать шаблон.
Заработало и славно.
Название: Re:Вывод всех property из group раздела каталога.
Отправлено: shoto от 20 Февраля 2013, 11:31:11
Ну, если писать так:
<xsl:template match="/result[@method = 'category'][@pageId='86']">
<xsl:value-of select=".//property[@name='descr']/value" disable-output-escaping="yes" />
<xsl:apply-templates select=".//group[@name='3d']/property" mode="group_property"/>
</xsl:template>
то не работает, а работает если убрать <xsl:apply-templates
а если написать вот так:
<xsl:template match="/result[@pageId='86']">
<xsl:value-of select=".//property[@name='descr']/value" disable-output-escaping="yes" />
<xsl:apply-templates select=".//group[@name='3d']/property" mode="group_property"/>
</xsl:template>
То все работает.

т.е. загвоздка была в лишнем условии [@method = 'category']