Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”

0 Пользователей и 1 Гость просматривают эту тему.

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Добрый день.
Пришлось столкнуться с необходимостью вывода дополнительных значений из раздела каталога.
в разделе каталога была создана дополнительная группа, в нее добавлено несколько полей одинакового типа.
Необходимо вывести эти поля по определенному шаблону.
но максимум что у меня получается - вывести значение первого поля 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.... /> - белая страница.
Что посоветуете?

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #1 : 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

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #2 : 19 Февраль 2013, 14:57:36 »
Спасибо за комментарий "юзайте поиск"
За неделю многое просмотрела и попробовала.
Но как я уже написала выше, попытка вставить  шаблон вида
<xsl:apply-templates select=".//group[@name='3d']/property" mode="3d"/>
приводит к белой странице, вместо сайта

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #3 : 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/'"/> найти место до которого работает и после которого не работает...

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #4 : 19 Февраль 2013, 22:14:36 »
Вывести значение Property методом <xsl:value-of /> получается одно, первое значение, что и логично, потому что value-of выводит первое подходящее значение. И белый экран появляется именно при вставке единственной строки <xsl:apply-templates....../>

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #5 : 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

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #6 : 20 Февраль 2013, 07:59:36 »
Этот вариант конечно хорош если этих property не сколько, но если их уже больше 15-ти....
Но судя по всему иного варианта у меня сейчас нет.

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #7 : 20 Февраль 2013, 08:52:04 »
Блин, я может непонятно пишу - нужно попробовать вывести разными способами и найти то место, на котором возникает ошибка. Может база покоцана и при получение какой-то записи из неё (какого-то property) происходит затык, может быть значение какое-то там некорретное (я когда своими кривыми руками базу потыкаю, то бывает, что потом много непонятных ошибок выскакивает).
Уже писал выше - надо попробовать разные варианты + getEditForm

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #8 : 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>   

*

Rodogor

  • ***
  • 189
  • +24/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #9 : 20 Февраль 2013, 10:34:18 »
Я что-то запутался. Получается, что "белая страница" - это не означало ошибку и остановку выполнения каких-то алгоритмов (типа break), а просто не получалось написать условие, по которому должен был сработать шаблон.
Заработало и славно.

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Re:Вывод всех property из group раздела каталога.
« Ответ #10 : 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']