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

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

*

MefistoKazan

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Селект со списоком товара
« : 22 Августа 2012, 13:46:26 »
Помогите, как вывести на страницу select со всеми товарами.

Создал файл шаблона:

<xsl:template name="left-selector-items">
    <noindex>
    <form action="" method="get">
    <select>
        <option>тест</option>
        </select>
        </form>
    </noindex>
</xsl:template>
</xsl:stylesheet>

Подключил в нужном месте - показывает, а как быть дальше? понятно что через макрос getObjectsList, но как?

Помогите, очень надо, новичок в xsl


*

MefistoKazan

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #1 : 24 Августа 2012, 14:38:55 »
уточню вопрос
1. как правильно вместо <option>тест</option> вызвать макрос getObjectsList например с шаблоном selector
2. как этот шаблон правильно написать и куда положить

*

BaceH

  • ***
  • 141
  • +21/-0
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #2 : 24 Августа 2012, 15:47:03 »
<xsl:template name="left-selector-items">
    <noindex>
    <form action="" method="get">
    <select>
        <xsl:apply-templates select="document('udata://catalog/getObjectsList')//item" mode="select_option" />
        </select>
        </form>
    </noindex>
</xsl:template>


<xsl:template match="udata[@method = 'getObjectsList']" mode="select_option">
<option>{item}</option>
 </xsl:template>

схема ваших действий. А более детально разберите на примере сайта демодизи , вывод getObjectsList. Вам нужно его вывести по тому же принципу только без лишней информации, и вывадить не в див а в option.

*

MefistoKazan

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #3 : 25 Августа 2012, 22:23:06 »
BaceH, большое спасибо, я буду пробовать.

*

MefistoKazan

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #4 : 26 Августа 2012, 20:47:05 »
не выводит option :(

<xsl:template match="udata[@method = 'getObjectsList']" name="left-selector-items">
    <noindex>
    <form action="" method="get">
    <select umi:element-id="{category_id}" umi:module="catalog" umi:method="getObjectsList" umi:sortable="sortable">
        <xsl:apply-templates select="lines/item" mode="select_option" />
        </select>
        </form>
    </noindex>
</xsl:template>
   
    <xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
        <option umi:element-id="{@id}"  umi:region="row">{item}</option>
    </xsl:template>
« Последнее редактирование: 26 Августа 2012, 23:44:49 от MefistoKazan »

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #5 : 27 Августа 2012, 01:35:18 »
в вашем шаблоне:
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
        <option umi:element-id="{@id}"  umi:region="row">{item}</option>
    </xsl:template>

вы пытаетесь вывести что-то строчкой {item}, я так понимаю, тут должно быть название товара.
Вы сделали как минимум 2 ошибки:
- Во-первых, фигурные скобки используются только тогда, когда вам надо вывести значение в атрибут какого-то тега (например ссылку в атрибут href тега a : <a href="{@link}">ссылка</a>), а при выводе значение в остальных местах используется <xsl:value-of /> или схожие конструкции.

- Во-вторых, вы пытаетесь вывести item в шаблоне, который уже обрабатывает item (match="udata[@method = 'getObjectsList']//item"). То есть, система будет искать в xml, который вы обрабатываете, узел по xpath = udata[@method = 'getObjectsList']//item/item, а такого узла макрос getObjectsList не возвращает. Так как, вам надо вывести текст в данном узле и вы его уже обрабатываете, используйте точку (.) или xpath функцию text()

В итоге у ваш неправильный  шаблон приведенный мною выше, станет таким:
 <xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
        <option umi:element-id="{@id}"  umi:region="row"><xsl:value-of select="text()" /></option>
    </xsl:template>

*

MefistoKazan

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #6 : 27 Августа 2012, 12:20:44 »
в вашем шаблоне:
<xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
        <option umi:element-id="{@id}"  umi:region="row">{item}</option>
    </xsl:template>

вы пытаетесь вывести что-то строчкой {item}, я так понимаю, тут должно быть название товара.
Вы сделали как минимум 2 ошибки:
- Во-первых, фигурные скобки используются только тогда, когда вам надо вывести значение в атрибут какого-то тега (например ссылку в атрибут href тега a : <a href="{@link}">ссылка</a>), а при выводе значение в остальных местах используется <xsl:value-of /> или схожие конструкции.

- Во-вторых, вы пытаетесь вывести item в шаблоне, который уже обрабатывает item (match="udata[@method = 'getObjectsList']//item"). То есть, система будет искать в xml, который вы обрабатываете, узел по xpath = udata[@method = 'getObjectsList']//item/item, а такого узла макрос getObjectsList не возвращает. Так как, вам надо вывести текст в данном узле и вы его уже обрабатываете, используйте точку (.) или xpath функцию text()

В итоге у ваш неправильный  шаблон приведенный мною выше, станет таким:
 <xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
        <option umi:element-id="{@id}"  umi:region="row"><xsl:value-of select="text()" /></option>
    </xsl:template>


спасибо за ценный совет, я поправил
но дело в том что до формирования <option> дело даже не доходит, цикл не запускается. не могу понять где ошибка в первом шаблоне

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #7 : 27 Августа 2012, 12:47:25 »
поменфйте свой первый шаблон на

<xsl:template match="udata[@method = 'getObjectsList']" name="left-selector-items">
        <xsl:copy-of select="."  />
       <noindex>
       <form action="" method="get">
       <select umi:element-id="{category_id}" umi:module="catalog" umi:method="getObjectsList" umi:sortable="sortable">
        <xsl:apply-templates select="lines/item" mode="select_option" />
        </select>
        </form>
       </noindex>
</xsl:template>

строчка <xsl:copy-of select="."  /> выведет весь xml, с которым вы работаете в данном шаблоне. Посмотрите есть ли в нем элементы по xpath lines/item

*

MefistoKazan

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #8 : 27 Августа 2012, 13:39:40 »
в  xml нет items, но выявилось другое. в подкатегориях каталога список объектов принимает вид селектора и он с option. почему так?

вот текущий код:

вызов макроса
<xsl:apply-templates select="document('udata://catalog/getObjectsList/left-selector-items')/udata"/>
шаблоны
<xsl:template match="udata[@method = 'getObjectsList']" name="left-selector-items">
     <noindex>
     <form action="" method="get">
     <select umi:element-id="{category_id}" umi:module="catalog" umi:method="getObjectsList" umi:sortable="sortable">
        <xsl:apply-templates select="lines/item" mode="select_option" />
        </select>
        </form>
     </noindex>
</xsl:template>
    
    <xsl:template match="udata[@method = 'getObjectsList']//item" mode="select_option">
        <option umi:element-id="{@id}"  umi:region="row"><xsl:value-of select="text()" /></option>
    </xsl:template>
 

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #9 : 27 Августа 2012, 14:11:10 »
потому как макрос catalog/getObjectsList ищет товары в текущем разделе (если иное не указанно явно при помощи параметров к данному макросу), посмотрите документацию по данному макросу

*

MefistoKazan

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #10 : 27 Августа 2012, 21:42:11 »
это понятно, вопрос теперь один и он вот в чем: как сделать так, чтобы на главной листинг выходил в виде селектора, а на страницах разделов каталога все осталось по прежнему, т.е. в виде картинок с названиями.


*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #11 : 27 Августа 2012, 22:41:40 »
ммм... не понял, что именно вас смущает?
Делаете 2 шаблона различающиеся через mode, один для главной (выводит select), другой для всех остальных страниц. Или вопрос в том, как на главной вызвать макрос getObjectList со своим mode ?

*

MefistoKazan

  • *
  • 9
  • +0/-0
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #12 : 28 Августа 2012, 08:03:35 »
да, вопрос в том, как на главной вызвать макрос getObjectList со своим mode
« Последнее редактирование: 28 Августа 2012, 08:11:33 от MefistoKazan »

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
Re:Селект со списоком товара
« Ответ #13 : 28 Августа 2012, 09:18:41 »
на форуме это уже обсуждалось http://umihelp.ru/forum/index.php/topic,1214.msg4264.html#msg4264