Курс 2016 года “Разработка на UMI.CMS от 0 до готового сайта”
Поиск по каталогу (поиск товаров/объектов)

Автор samРаздел Шаблоны XSLT

Ответов: 14
Просмотров: 8582
Последний ответ 26 Января 2015, 12:07:22
от Axiomateria
Изменение количества товара в списке товаров и карточке товара

Автор bepluyРаздел JS и AJAX

Ответов: 2
Просмотров: 2802
Последний ответ 14 Ноября 2015, 13:52:43
от bepluy
Импортировать "Опционные свойтва" товаров в UMIDump из CML 2.0. Хэлп!

Автор Alex_nosРаздел Custom макросы

Ответов: 3
Просмотров: 4633
Последний ответ 09 Февраля 2012, 13:08:00
от admin
Добавление тегов для товаров, и вывод блока с тегами в любом месте сайта

Автор FelixTheCatРаздел Шаблоны XSLT

Ответов: 9
Просмотров: 5513
Последний ответ 26 Июля 2014, 10:58:09
от FelixTheCat
фильтр товаров с условием OR и поиск по нескольким (не всем) разделам каталога

Автор bosyaРаздел Custom макросы

Ответов: 3
Просмотров: 5500
Последний ответ 18 Мая 2012, 11:08:37
от web-industry

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

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
действительно пропустил один ;)

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
можно пойти еще более простым путем, так как в xslt мы можем подхватывать значения из адресной строки в глобальные параметры, то надо просто дописать в файл /xsltTpls/default.xsl, повыше <xsl:param name="p">0</xsl:param> параметр с именем count, который будет подхватывать из адресной строки, а если его не будет то параметр count будет равен пустому значению
<xsl:param name="count" select="''" />

теперь мы можtм использовать переменную $count в наших шаблонах/ В итоге, в шаблоне где происходит вызов %catalog getObjectsList()%  мы пишем:
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '//',$count))/udata" />

а там, где надо вывести выпадающий список для смены количества, пишем:
<select name="count" onchange="this.form.submit()">
    <option>
         <xsl:if test="$count=10"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
         10
    </option>
    <option>
         <xsl:if test="$count=20"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
         20
    </option>
    <option>
         <xsl:if test="$count=30"><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
         30
    </option>
 </select>

Сделал всё вот так же в точности, и даже в файл classes/modules/custom.php из статьи Динамическое изменение количества отображаемых товаров на странице вставил макрос...

Выпадающие значения количества объектов для вывода  на странице раздела появились конечно, но при выборе одного из этих значений ни чего не происходит...

Подскажите, пожалуйста, что я пропустил ?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
при выборе значения из выпадающего списка доложна отправиться какая-то форма (судя по строчке onchange="this.form.submit()"). У вас select внутри формы?

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
при выборе значения из выпадающего списка доложна отправиться какая-то форма (судя по строчке onchange="this.form.submit()"). У вас select внутри формы?

Нет, не внутри формы - видимо это и есть мой промах.
А форма должна быть типа:
    <xsl:template match="udata[@method = 'search']">
        <form id="catalog_filters" method="get" action="">
            <xsl:apply-templates select="group" mode="search"/>
        </form>
    </xsl:template>

?

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
скорее всего форма должна содержать в себе и выбор сортировки и поля для фильтра. Хотя в вашем случае, наверно проще применить
onchange="window.location = this.options[this.selectedIndex].value;"

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
скорее всего форма должна содержать в себе и выбор сортировки и поля для фильтра. Хотя в вашем случае, наверно проще применить
onchange="window.location = this.options[this.selectedIndex].value;"

При таком варианте получается, что в адресной строке добавляется в конце адреса /32/ - оно же выбранное значение из выпадающего списка = 32

Ссылка выходит в итоге такая www.site.ru/catalog/tovary/32/

и вот в результате получается как бы ошибка 404...
 а броузер пишет "Эта веб-страница содержит бесконечное перенаправление"
 

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
На данный момент вот так всё отладил:
 
 <form>
                <input type="text" name="" />
                <select name="count" onchange="this.form.submit()">
                    <option>
                        <xsl:if test="$count=20">
                            <xsl:attribute name="selected">selected</xsl:attribute>
                        </xsl:if>
                        20
                    </option>
                    <option>
                        <xsl:if test="$count=32">
                            <xsl:attribute name="selected">selected</xsl:attribute>
                        </xsl:if>
                        32
                    </option>
                    <option>
                        <xsl:if test="$count=40">
                            <xsl:attribute name="selected">selected</xsl:attribute>
                        </xsl:if>
                        40
                    </option>
                    <option value="100000">
                        <xsl:if test="$count=100000" >
                            <xsl:attribute name="selected">selected</xsl:attribute>
                        </xsl:if>
                        Всё
                    </option>
                </select>
            </form>

И в результате в адресную строку стали вроде правильные поступать ?fields_filter%5B%5D=&count=100000

однако как было восемь объектов (как поумолчанию) на одной странице, так и осталось...
« Последнее редактирование: 12 Ноября 2014, 00:21:42 от Axiomateria »

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
проверяйте по цепочке

1. параметр в адресной строке должен подхватываться. Проверьте так ли это, вставьте вручную в адресную строку данный параметр и сделайте вывод данной переменной в шаблоне.
2. параметр переданный в вызов getobjectsList меняет кол-во товаров. Попробуйте вручную в шаблоне передавать разные значения, меняется ли кол-во при выводе.
3. при выборе в выпадающем списке передается тот же параметр который вы тестировали в первом пункте

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
1. параметр в адресной строке должен подхватываться. Проверьте так ли это, вставьте вручную в адресную строку данный параметр и сделайте вывод данной переменной в шаблоне.
Да, в адресную строку данный параметр вставляется в виде ?count=40, если выбрать, к примеру, значение = 40
А в шаблоне я так его вывод сделал:
<form>
                <input type="text" name="" />
                <select name="count" onchange="this.form.submit()">
                    <option>
                        <xsl:if test="$count=20">
                            <xsl:attribute name="selected">selected</xsl:attribute>
                        </xsl:if>
                        20
                    </option>
                    <option>
                        <xsl:if test="$count=32">
                            <xsl:attribute name="selected">selected</xsl:attribute>
                        </xsl:if>
                        32
                    </option>
                    <option>
                        <xsl:if test="$count=40">
                            <xsl:attribute name="selected">selected</xsl:attribute>
                        </xsl:if>
                        40
                    </option>
                    <option value="100000">
                        <xsl:if test="$count=100000" >
                            <xsl:attribute name="selected">selected</xsl:attribute>
                        </xsl:if>
                        Всё
                    </option>
                </select>
            </form>
2. параметр переданный в вызов getobjectsList меняет кол-во товаров. Попробуйте вручную в шаблоне передавать разные значения, меняется ли кол-во при выводе.
У меня в шаблоне значение количество объектоа на странице = 8
    <xsl:template match="result[@method = 'category']" mode="layout_0_s1">   
        <xsl:apply-templates select=".//property[@name = 'descr']" mode="seo_content" />
        <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//8//10/,$count'))/udata" mode="layout_0" />
        <xsl:apply-templates select="document('udata://catalog/getObjectsList/')/udata/total" mode="total_items" />
    </xsl:template>, если я его, к примеру, в ручную меняю на 16, то и 16 объектов на странице выводятся как и указано.
3. при выборе в выпадающем списке передается тот же параметр который вы тестировали в первом пункте

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
У меня в шаблоне значение количество объектоа на странице = 8
            <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//8//10/,$count'))/udata" mode="layout_0" />

по задумке, параметр $count должен становиться per_page параметром при вызове функции getObjectsList, у вас почему-то $count никак не связан с параметром per_page. Более того, per_page у вас всегда равен 8.

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
У меня в шаблоне значение количество объектоа на странице = 8
            <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//8//10/,$count'))/udata" mode="layout_0" />

по задумке, параметр $count должен становиться per_page параметром при вызове функции getObjectsList, у вас почему-то $count никак не связан с параметром per_page. Более того, per_page у вас всегда равен 8.

Видимо я не совсем точно понял Ваше сообщение здесь http://umihelp.ru/forum/index.php/topic,1249.msg4554.html#msg4554 про этот вызов:

<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '//',$count))/udata" />

А если же я вставляю в <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//$count//10/'))/udata" mode="layout_0" />

то ни один объект на странице не выводится вообще

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
А если же я вставляю в <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//$count//10/'))/udata" mode="layout_0" />

то ни один объект на странице не выводится вообще

а чему равен $count в этом случае?

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
А если же я вставляю в <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//$count//10/'))/udata" mode="layout_0" />

то ни один объект на странице не выводится вообще

а чему равен $count в этом случае?

по идее он должен быть равен выбранному значению из выпадающего списка, к примеру = 40 ,что бы сорок объектов на странице вывелось.
Параметр count от сюда <xsl:param name="count" select="''" />, то есть в общем я тут свои действия с кодом изложил на основе Вашего метода:  http://umihelp.ru/forum/index.php/topic,1249.msg8627.html#msg8627
 

*

admin

  • *****
  • 2444
  • +172/-1
    • Просмотр профиля
попробуйте вывести значение $count прямо в шаблоне, чтобы знать что он подставляет именно в том случае. когда у вас пустота вместо товаров выводится.

P.S. ошибка где-то прячется, по частям все выглядит правильным

*

Axiomateria

  • ****
  • 322
  • +5/-0
    • Просмотр профиля
    • Разработка продающих сайтов под ключ по честным ценам
попробуйте вывести значение $count прямо в шаблоне, чтобы знать что он подставляет именно в том случае. когда у вас пустота вместо товаров выводится.

не совсем точно понял, что значит "вывести значение $count прямо в шаблоне" ?