UMIhelp

Разработка сайта на UMI.CMS => Шаблоны XSLT => Тема начата: shoto от 05 Июля 2012, 13:13:42

Название: Выбор числа отображения товаров на странице.
Отправлено: shoto от 05 Июля 2012, 13:13:42
Добрый день.
В админке в настройках предусмотрена установка по сколько товаров выводить на страницу.
Но требуется что бы на самой странице сайта было выпадающее меню где пользователь мог бы выбрать сам кратность отображения числа товаров на странице, 15/30/все.
Как это реализовать, есть примеры?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Vladimir от 05 Июля 2012, 18:27:33
Однажды была такая задача (правда, потом разум возобладал и от этого бреда отказались).
Делал так: выпадающий список количества на страницу пишется в шаблоне. Сам список - это форма, отправляющая на кастомный макрос, который записывает в сессию выбранное значение списка.  По умолчанию число в списке равно настройкам в админке. При изменении значения списка страница перезагружается, в сеесию сохранятся значение.
Естественно, теперь каталог надо выводить кастомом. Кастом следующий: читаем значение из сессии и вызываем штатные getObjectList c требуемым значением $limit.
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: shoto от 06 Июля 2012, 10:20:11
Теоретически понятно.
а практически, есть какие нибудь примеры?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Vladimir от 06 Июля 2012, 10:56:19
практически уже не сохранилось. навскидку это было так:
<?php
//Здесь записываем в сессию количество страниц  и редирект обратно
public function setPager(){
if($pager = getRequest('pager')){
$_SESSION['pager'] = $pager;
}
$refererUrl = getServer('HTTP_REFERER') ? getServer('HTTP_REFERER') : '/';
def_module::redirect($refererUrl);
}

//выводит список товаров в каталоге
public function getObjectsList2($template = "default", $path = false, $limit = false, $ignore_paging = false, $i_need_deep = 0, $field_id = false, $asc = true){

if(!$limit){
if(isset($_SESSION['pager'])) $limit = $_SESSION['pager'];
}
$moduleCatalog = cmsController::getInstance()->getModule('catalog');
return $moduleCatalog -> getObjectsList($template, $path, $limit, $ignore_paging, $i_need_deep, $field_id, $asc);
}


public function pagerList(){
$arr = array(20,30,40);//кол страниц
if(getSession('pager')){
$pager = (int) getSession('pager')
}
else $pager  = 20;

$s = <<<END
<form action="/catalog/setPager/">
<select name="pager">
END;

foreach($arr as $v){
if($v == $pager) $checked = 'checked';else $checked = '';//чтобы был выбран правильный элемент
$s .= <<<END
<option value="{$v}" {$checked}>{$v}</option>
END;
}

$s .= <<<END
</select>
</form>
END;
return $s;
}

?>
Соотв. в шаблоне выбор количества страниц
%catalog pagerList()%

Список товаров %catalog getObjectsList2()%

Конечно, для xslt надо будет изменить вывод списка

Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 09 Июля 2012, 16:08:01
есть статья по данному вопросу. Правда для tpl, но в xslt реализации практически нет отличий Динамическое изменение количества отображаемых товаров на странице, tpl-шаблоны (http://wiki.umisoft.ru/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B0%D0%B5%D0%BC%D1%8B%D1%85_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5,_tpl-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B)
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: shoto от 10 Июля 2012, 19:35:15
Параметры: catalog getObjectsList( [template = 'default', category_id = false, limit = false, ignore_paging = false, i_need_deep = 0, field_id = false, asc = true])
вызов исходный
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '////2/have/1'))/udata" />
как правильно вставить переменную %custom getcount()%
в какой шаблон в данном случае добавлять
<select name="count" onchange="this.form.submit()">
    <option %custom is_sel(10)%>10</option>
    <option %custom is_sel(20)%>20</option>
    <option %custom is_sel(30)%>30</option>
 </select>
? и опять таки, а как правильно указывать значения %макросов% что в TPL, для XSLT.
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: shoto от 16 Июля 2012, 14:51:35
Правильно ли я понимаю что:
%custom getcount()% это равно udata://custom/getcount
и получается что надо получить значение из select (пока не понятно куда и как его добавлять)
и передать в:
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '// СЮДА? //2/have/1'))/udata" />
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 16 Июля 2012, 16:00:02
можно пойти еще более простым путем, так как в 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>

Название: Re:Выбор числа отображения товаров на стран&#
Отправлено: shoto от 16 Июля 2012, 16:45:57
Вывод количества товаров на странице изменяется. но вот где отредактировать параметр: maxPages='5' у %system numpages()% чтобы выводилось всё количество страниц.
и как там же вывести все товары на одной странице. как такой параметр задать?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 16 Июля 2012, 17:01:32
Цитировать
Вывод количества товаров на странице изменяется. но вот где отредактировать параметр: maxPages='5' у %system numpages()% чтобы выводилось всё количество страниц.

а в чем сложность? делаем вызов с параметром maxPages настолько большим, чтобы уж точно хватило, например maxPages=10000

то же самое с выводом всех товаров в данном разделе.... делаете в выпадающем списке, который меняет количество товаров отображаемых на странице, новый option такого вида

 <option value="100000">
         <xsl:if test="$count=100000" ><xsl:attribute name="selected">selected</xsl:attribute></xsl:if>
         Вывести все товары
    </option>
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: shoto от 17 Июля 2012, 11:26:27
Сложность  только в том что я нигде не вижу что бы был вызов со значением равным 5. что бы прописать равным другому значению. или это значение по умолчанию задается если нет иного?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 17 Июля 2012, 20:07:38
5 это значение по умолчанию, попробуйте такой вызов

<xsl:apply-templates select="document('udata://system/numpages/////1000')/udata" />
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: shoto от 18 Июля 2012, 15:56:07
у меня в стандартном шаблоне такой вызов:
<xsl:template match="total[. &gt; ../per_page]">
<xsl:apply-templates select="document(concat('udata://system/numpages/', ., '/', ../per_page))" />
</xsl:template>
если я данный вызов меняю на предложенный , то не выводится вообще ничего.
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 18 Июля 2012, 16:14:21
так и есть, для замены написанного скорее всего нужно писать так

<xsl:template match="total[. &gt; ../per_page]">
<xsl:apply-templates select="document(concat('udata://system/numpages/', ., '/', ../per_page,'//100000'))" />
</xsl:template>
Название: Re:Выбор числа отображения товаров на стран&#
Отправлено: shoto от 18 Июля 2012, 16:26:54
нашла, надо еще один /.

<xsl:template match="total[. &gt; ../per_page]">
      <xsl:apply-templates select="document(concat('udata://system/numpages/', ., '/', ../per_page,'///100000'))" />
   </xsl:template>
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 18 Июля 2012, 16:49:58
действительно пропустил один ;)
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 11 Ноября 2014, 22:35:19
можно пойти еще более простым путем, так как в 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 из статьи Динамическое изменение количества отображаемых товаров на странице (http://wiki.umisoft.ru/%D0%94%D0%B8%D0%BD%D0%B0%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%BE%D0%B5_%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B5%D0%BD%D0%B8%D0%B5_%D0%BA%D0%BE%D0%BB%D0%B8%D1%87%D0%B5%D1%81%D1%82%D0%B2%D0%B0_%D0%BE%D1%82%D0%BE%D0%B1%D1%80%D0%B0%D0%B6%D0%B0%D0%B5%D0%BC%D1%8B%D1%85_%D1%82%D0%BE%D0%B2%D0%B0%D1%80%D0%BE%D0%B2_%D0%BD%D0%B0_%D1%81%D1%82%D1%80%D0%B0%D0%BD%D0%B8%D1%86%D0%B5,_tpl-%D1%88%D0%B0%D0%B1%D0%BB%D0%BE%D0%BD%D1%8B) вставил макрос...

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

Подскажите, пожалуйста, что я пропустил ?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 11 Ноября 2014, 23:38:21
при выборе значения из выпадающего списка доложна отправиться какая-то форма (судя по строчке onchange="this.form.submit()"). У вас select внутри формы?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 11 Ноября 2014, 23:51:29
при выборе значения из выпадающего списка доложна отправиться какая-то форма (судя по строчке 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>

?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 11 Ноября 2014, 23:54:06
скорее всего форма должна содержать в себе и выбор сортировки и поля для фильтра. Хотя в вашем случае, наверно проще применить
onchange="window.location = this.options[this.selectedIndex].value;"
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 12 Ноября 2014, 00:08:43
скорее всего форма должна содержать в себе и выбор сортировки и поля для фильтра. Хотя в вашем случае, наверно проще применить
onchange="window.location = this.options[this.selectedIndex].value;"

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

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

и вот в результате получается как бы ошибка 404...
 а броузер пишет "Эта веб-страница содержит бесконечное перенаправление"
 
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 12 Ноября 2014, 00:14:37
На данный момент вот так всё отладил:
 
 <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

однако как было восемь объектов (как поумолчанию) на одной странице, так и осталось...
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 12 Ноября 2014, 09:36:58
проверяйте по цепочке

1. параметр в адресной строке должен подхватываться. Проверьте так ли это, вставьте вручную в адресную строку данный параметр и сделайте вывод данной переменной в шаблоне.
2. параметр переданный в вызов getobjectsList меняет кол-во товаров. Попробуйте вручную в шаблоне передавать разные значения, меняется ли кол-во при выводе.
3. при выборе в выпадающем списке передается тот же параметр который вы тестировали в первом пункте
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 12 Ноября 2014, 10:11:16
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. при выборе в выпадающем списке передается тот же параметр который вы тестировали в первом пункте
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 12 Ноября 2014, 10:22:01
У меня в шаблоне значение количество объектоа на странице = 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.
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 12 Ноября 2014, 10:30:29
У меня в шаблоне значение количество объектоа на странице = 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 (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" />

то ни один объект на странице не выводится вообще
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 12 Ноября 2014, 10:45:11
А если же я вставляю в <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//$count//10/'))/udata" mode="layout_0" />

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

а чему равен $count в этом случае?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 12 Ноября 2014, 11:00:15
А если же я вставляю в <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
 
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 12 Ноября 2014, 11:42:10
попробуйте вывести значение $count прямо в шаблоне, чтобы знать что он подставляет именно в том случае. когда у вас пустота вместо товаров выводится.

P.S. ошибка где-то прячется, по частям все выглядит правильным
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 12 Ноября 2014, 11:48:55
попробуйте вывести значение $count прямо в шаблоне, чтобы знать что он подставляет именно в том случае. когда у вас пустота вместо товаров выводится.

не совсем точно понял, что значит "вывести значение $count прямо в шаблоне" ?
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 12 Ноября 2014, 13:44:32
в шаблоне, рядом свызовом вывести данную переменную, чтобы её было видно
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//$count//10/'))/udata" mode="layout_0" />
<xsl:value-of select="$count" />
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 12 Ноября 2014, 19:40:39
в шаблоне, рядом свызовом вывести данную переменную, чтобы её было видно
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//$count//10/'))/udata" mode="layout_0" />
<xsl:value-of select="$count" />

При таком варианте
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//$count//10/'))/udata" mode="layout_0" />
<xsl:value-of select="$count" />
Не выводятся ни объекты, ни значение переменной,
а при таком
       <xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//8//10/,$count'))/udata" mode="layout_0" />
<xsl:value-of select="$count" />
выводятся только объекты, но значение переменной по прежнему не видно по прежнему...
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 12 Ноября 2014, 20:33:11
тогда ответ прост, переменная ;count не определена (можно включить еще дебаг ошибок, скорее всего будет такое сообщение)
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 12 Ноября 2014, 22:22:32
тогда ответ прост, переменная ;count не определена (можно включить еще дебаг ошибок, скорее всего будет такое сообщение)
Если речь идёт об этих настройках в config.ini
[debug]
enabled = "1"
show-backtrace = "1"
callstack.disabled = "0"

то он у меня включён и ошибок не выводится пока вообще ни каких.
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 12 Ноября 2014, 23:52:29
но тем не менее, при выводе результатов xslt шаблона, как только в шаблоне встречается переменная $count у вас все перестает выводиться, просто пустота.
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 13 Ноября 2014, 00:45:15
но тем не менее, при выводе результатов xslt шаблона, как только в шаблоне встречается переменная $count у вас все перестает выводиться, просто пустота.
Да. Так и есть - проблема не видимая пока получается.
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 13 Ноября 2014, 01:01:37
это означает, что вам надо проcледить, действительно ли параметр $count у вас глобальный (находится в файле /templates/demodizzy/xslt/default.xsl)
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 13 Ноября 2014, 01:28:49
это означает, что вам надо проcледить, действительно ли параметр $count у вас глобальный (находится в файле /templates/demodizzy/xslt/default.xsl)
Только что проверил и   <xsl:param name="count" select="''" />  на месте выше всех в списке переменных в этом самом файле
/templates/demodizzy/xslt/default.xsl
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 13 Ноября 2014, 01:56:02
Во всех вариациях, которые я описал чуть выше здесь http://umihelp.ru/forum/index.php/topic,1249.msg8645.html#msg8645
, как выяснилось, срабатывает шаблон такой
   <xsl:template match="udata[@method = 'getObjectsList'][total = '0']" mode="layout_0">
        в разделе нет товаров
    </xsl:template>
то есть всё-таки что-то происходит...  :)
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: admin от 13 Ноября 2014, 02:25:14
может, просто в остальных есть переменная $count?

Только что проверил и   <xsl:param name="count" select="''" />  на месте выше всех в списке переменных в этом самом файле
/templates/demodizzy/xslt/default.xsl

приведите кусок этого файла от начала, до этой переменной
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 13 Ноября 2014, 12:18:35
может, просто в остальных есть переменная $count?

Только что проверил и   <xsl:param name="count" select="''" />  на месте выше всех в списке переменных в этом самом файле
/templates/demodizzy/xslt/default.xsl

приведите кусок этого файла от начала, до этой переменной

в общем весь файл изнутри таков:
<?xml version="1.0" encoding="utf-8"?>
<xsl:stylesheet version="1.0"
                xmlns:xsl="http://www.w3.org/1999/XSL/Transform"
                xmlns:xlink="http://www.w3.org/TR/xlink">

    <xsl:output encoding="utf-8" method="html" indent="yes"/>

    <xsl:variable name="errors" select="document('udata://system/listErrorMessages')/udata"/>

    <xsl:variable name="lang-prefix" select="/result/@pre-lang" />
    <xsl:variable name="document-page-id" select="/result/@pageId" />
    <xsl:variable name="default-page" select="/result/page/@is-default" />
    <xsl:variable name="document-title" select="/result/@title" />
    <xsl:variable name="user-type" select="/result/user/@type" />
    <xsl:variable name="request-uri" select="/result/@request-uri" />
    <xsl:variable name="domain" select="/result/@domain" />
    <xsl:variable name="templates" select="'/templates/bs/'" />

    <xsl:variable name="parents" select="/result/parents" />
    <xsl:variable name="parentsTypeId1" select="$parents/page[1]/@type-id" />

    <xsl:variable name="site-info-id" select="document('upage://techno_contacts/')/udata/page/@id" />
    <xsl:variable name="site-info" select="document(concat('upage://',$site-info-id))//group[@name = 'transverse_data']/property" />
   
    <xsl:variable name="catalogPagesId" select="$site-info[@name = 'catalog_pages_count_default']/value/item/@id" />
    <xsl:param name="catalog_per_pages" select="number(concat('0',document(concat('uobject://', $catalogPagesId))/udata/object/properties/group/property/value))" />
    <xsl:param name="count" select="$catalog_per_pages" />

    <xsl:variable name="catalogLayoutId" select="$site-info[@name = 'catalog_default_layout']/value/item/@id" />
    <xsl:param name="catalog_layout" select="number(concat('0',document(concat('uobject://', $catalogLayoutId))/udata/object/properties/group/property/value))" />
 
    <xsl:variable name="user-id" select="/result/user/@id" />
    <xsl:variable name="user-info" select="document(concat('uobject://', $user-id))" />

    <xsl:variable name="module" select="/result/@module" />
    <xsl:variable name="method" select="/result/@method" />
   
    <xsl:decimal-format name="price" decimal-separator="," grouping-separator="&#160;"/>
    <xsl:variable name="currency-prefix" select="document('udata://emarket/cart/')/udata/summary/price/@prefix" />
    <xsl:variable name="currency-suffix" select="document('udata://emarket/cart/')/udata/summary/price/@suffix" />

    <xsl:param name="p">0</xsl:param>
    <xsl:param name="catalog" />
    <xsl:param name="search_string" />
   
    <xsl:include href="library/common.xsl" />
    <xsl:include href="layouts/default.xsl" />

    <xsl:include href="modules/users/common.xsl" />
    <xsl:include href="modules/content/common.xsl" />

    <xsl:include href="modules/catalog/common.xsl" />
    <xsl:include href="modules/data/common.xsl" />
    <xsl:include href="modules/emarket/common.xsl" />
    <xsl:include href="modules/search/common.xsl" />
    <xsl:include href="modules/webforms/common.xsl" />
    <xsl:include href="modules/filemanager/common.xsl" />
</xsl:stylesheet>
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 13 Ноября 2014, 15:04:13
А ещё я переделал переключатели
            <div class="sort_box mod_2">
                <dl class="sort_item">
                    <dt>Выводить по:</dt>
                    <dd class="sort_link_w active">
                        <a href="?count=20" class="sort_link">20</a>
                    </dd>
                    <dd class="sort_link_w">
                        <a href="?count=32" class="sort_link">32</a>
                    </dd>
                    <dd class="sort_link_w">
                        <a href="?count=40" class="sort_link">40</a>
                    </dd>
                    <dd class="sort_link_w">
                        <a href="?count=10000" class="sort_link">Все</a>
                    </dd>
                </dl>
            </div>
Название: Re:Выбор числа отображения товаров на странице.
Отправлено: Axiomateria от 14 Ноября 2014, 17:44:55
А вот так заработало:
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', '//', $count, '//10/'))/udata" mode="layout_0" />
Теперь вот как-то надо додумать такой момент, что кроме выбора показа количества страниц, есть ещё и выбор показа "Плитка" "Список", которые так же через переменные вызываются в таком порядке:
                <dl class="sort_item mod_1">
                    <dt>&objectsview;</dt>
                    <dd>    
                        <a rel="nofollow" title="плитка" href="?catalog_layout=0&amp;">  
                            <xsl:attribute name="class">type type_1</xsl:attribute>
                            <xsl:if test="$catalog_layout = 0">
                                <xsl:attribute name="class">type type_1 active</xsl:attribute>
                            </xsl:if>
                        </a>
                    </dd>  
                    <dd>  
                        <a rel="nofollow" title="список" href="?catalog_layout=2&amp;">
                            <xsl:attribute name="class">type type_2</xsl:attribute>
                            <xsl:if test="$catalog_layout = 2">
                                <xsl:attribute name="class">type type_2 active</xsl:attribute>
                            </xsl:if>
                        </a>
                    </dd>          
                </dl>
и всё бы ни чего, да вот только при выборе одного или другого в строке браузера они конечно взаимоотменяюся,
 то есть либо выбираем показывать по сорок страниц: /?count=40
либо показывать плиткой /?catalog_layout=0

А надо бы конечно, что бы они были в один ряд в строке браузера, как например:
 /?catalog_layout=0&count=40&

Есть такая задумка срастить эти переменные в адресной строке <form> , где переменная $catalog_layout показывать плиткой "по умолчанию" у меня уже прописана:
 <xsl:template match="udata[@method = 'search'][group]">
        <form class="catalog_filter" action="/result_search_snowboards/">
            <input type="hidden" id="catalog_layout" name="catalog_layout" value="{$catalog_layout}" />
           <input type="hidden" id="count" name="count" value="{$count}" />
            <div class="left">
                <xsl:apply-templates select=".//field[not(@data-type = 'boolean')]" mode="search" />
            </div>
            <div class="right">
                <xsl:apply-templates select=".//field[@data-type = 'boolean']" mode="search" />
            </div>
            <div class="clear"></div>
            <div class="select-btns">
                <input class="button" type="submit" value="&apply;"/>
                <input class="button" type="button" value="&reset;" onclick="javascript: window.location = '/';" />
            </div>
        </form>
    </xsl:template>