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

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

*

sam

  • ***
  • 215
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Здравствуйте! У меня такой вопрос: как можно в объектах каталога вывести, например, 5 строк (tr) из характеристик товара через XSLT, т.е. без JS (правда, варианта с JS тож нет у меня)?

Заранее спасибо!
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #1 : 07 Ноябрь 2014, 21:11:35 »
То есть, вы выводите характеристики, каждая характеристика формирует tr элемент и характеристик может быть больше чем 5?

*

sam

  • ***
  • 215
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #2 : 07 Ноябрь 2014, 21:39:50 »
Перефразирую свой вопрос с пояснениями:
Реализовал страницу объекта в каталоге со вкладками с помощью css и html, без использования какого-либо скрипта (вкладки: описание/характеристики и комментарии). В каждой вкладке вывожу соответствующую информацию (вызываю через xsl-вызов). Так вот, во вкладке "описание" кроме самого описания хочу вывести еще часть характеристик (примерно 5-6 строк). А вот как это реализовать понятия не имею. Характеристики (полные) вызываются следующим вызовом:

<xsl:apply-templates select=".//group[@name = '&group-parameter;']" mode="table" />

Как-то можно ведь сделать так, чтобы выводились не все строки из характеристик во вкладке "описание", а как и писал выше, всего первые 5-6 строк (tr)? Полные характеристики вывожу во вкладке "характеристики" вызовом выше.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #3 : 08 Ноябрь 2014, 01:00:33 »
чтобы вывести часть  характеристик

выпишете
<xsl:apply-templates select=".//group[@name = '&group-parameter;']" mode="table_short" />

и добавляете шаблон
<xsl:template match="group" mode="table_short">
<table class="object">
<thead>
<tr>
<th colspan="2">
<xsl:value-of select="concat(title, ':')" />
</th>
</tr>
</thead>
<tbody umi:element-id="{../../@id}">
<xsl:apply-templates select="property[position() &lt; 6]" mode="table" />
</tbody>
</table>
</xsl:template>

соответственно, выводится будут только первые 5 property

*

sam

  • ***
  • 215
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #4 : 08 Ноябрь 2014, 01:46:47 »
Спасибо! XSLT само волшебство, а Вы волшебник, который взмахом волшебной палочки воплощает всё в реальность.

А можно ведь выводить еще определенные строчки из характеристик, т.е. не первые 5, а например, 1-я 3-я 6-я 10-я и т.д., чтобы выводить основные характеристики?
« Последнее редактирование: 08 Ноябрь 2014, 02:19:47 от sam »
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #5 : 08 Ноябрь 2014, 04:56:02 »
тут нет волшебства, только код.

да, можно привязыватся и к порядку. Например? вывод каждого четногоproperty
<xsl:apply-templates select="property[position() mod 2 = 0]" mode="table" />

*

sam

  • ***
  • 215
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #6 : 08 Ноябрь 2014, 16:11:48 »
За четные и нечетные спасибо! А как на счет определенных строк - любая строка из списка, например, 1-я, 2-я, 5-я и т.д., т.е. любая строка на выбор?
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

admin

  • *****
  • 2421
  • +172/-1
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #7 : 08 Ноябрь 2014, 17:45:47 »
[position() = 4]

P.S. почитайте в википедии или в интернете про xpath, многие вопросы прояснятся

*

sam

  • ***
  • 215
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #8 : 08 Ноябрь 2014, 22:43:16 »
Спасибо! Теперь понятно - сделал так:

<xsl:apply-templates select="property[position() = 5]" mode="table" />
<xsl:apply-templates select="property[position() = 6]" mode="table" />
<xsl:apply-templates select="property[position() = 7]" mode="table" />
<xsl:apply-templates select="property[position() = 11]" mode="table" />
<xsl:apply-templates select="property[position() = 12]" mode="table" />

Главное, что так я могу вызвать любую строку из таблицы.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.

*

sam

  • ***
  • 215
  • +3/-1
  • "Век живи - век учись!"
    • Просмотр профиля
Re:Объекты каталога - характеристики коротко
« Ответ #9 : 11 Ноябрь 2014, 23:25:26 »
admin помог мне, и я решил в долгу не оставаться - поделюсь личным опытом:
вариант, который я описал выше и думал, что решает мою задачу, оказался отнюдь не верным решением. А всё потому, что  через property[position() = номер] когда делаешь вызовы, в разных категориях вызываются разные строки, т.е. категорий несколько, и характеристики у них разные, и содержимое этих характеристик тоже отличаются, соответственно таким вызовом везде получается всё неправильно. Другими словами, содержимое шаблона table_short подгоняешь под одну категорию, а в других категориях уже получается не совсем то, что надо.

Как я решил эту задачу? Всё очень просто - строки надо вызывать не по номеру позиции, а по названию (//property[@name = 'name']), т.е так, как ниже:

<xsl:apply-templates select="//property[@name = 'property_name']" mode="table" />

При таком вызове можно вызывать любую строку из любой категории в любом количестве, т.е., например, категория "ноутбуки" - вызываешь необходимые краткие характеристики; "смартфоны" - точно также, вызываешь свои характеристики; и т.д., и все эти строки в одном файле. Если какие-то строки совпадают в категориях, они выводятся в них, а если чего-то нет, то и выводиться эта строка не будет.
Жизнь слишком коротка, чтобы выучить и знать всё на свете. Тем более, что мир быстро меняется, и технологии за ним тоже. Но это не повод, чтобы перестать учиться к чему-то новому. "Век живи - век учись!" Иначе жизнь будет прожита без пользы, как для себя, так и для окружающих.