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

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

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

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

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

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

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

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

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

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

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

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

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Добрый день.
В админке в настройках предусмотрена установка по сколько товаров выводить на страницу.
Но требуется что бы на самой странице сайта было выпадающее меню где пользователь мог бы выбрать сам кратность отображения числа товаров на странице, 15/30/все.
Как это реализовать, есть примеры?

*

Vladimir

  • ****
  • 271
  • +46/-0
    • Просмотр профиля
Однажды была такая задача (правда, потом разум возобладал и от этого бреда отказались).
Делал так: выпадающий список количества на страницу пишется в шаблоне. Сам список - это форма, отправляющая на кастомный макрос, который записывает в сессию выбранное значение списка.  По умолчанию число в списке равно настройкам в админке. При изменении значения списка страница перезагружается, в сеесию сохранятся значение.
Естественно, теперь каталог надо выводить кастомом. Кастом следующий: читаем значение из сессии и вызываем штатные getObjectList c требуемым значением $limit.

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Теоретически понятно.
а практически, есть какие нибудь примеры?

*

Vladimir

  • ****
  • 271
  • +46/-0
    • Просмотр профиля
практически уже не сохранилось. навскидку это было так:
<?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 надо будет изменить вывод списка

« Последнее редактирование: 06 Июля 2012, 10:58:11 от Vladimir »

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
есть статья по данному вопросу. Правда для tpl, но в xslt реализации практически нет отличий Динамическое изменение количества отображаемых товаров на странице, tpl-шаблоны

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Параметры: 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.

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Правильно ли я понимаю что:
%custom getcount()% это равно udata://custom/getcount
и получается что надо получить значение из select (пока не понятно куда и как его добавлять)
и передать в:
<xsl:apply-templates select="document(concat('udata://catalog/getObjectsList/', page/@id, '// СЮДА? //2/have/1'))/udata" />

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
можно пойти еще более простым путем, так как в 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>

« Последнее редактирование: 16 Июля 2012, 16:02:30 от admin »

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Вывод количества товаров на странице изменяется. но вот где отредактировать параметр: maxPages='5' у %system numpages()% чтобы выводилось всё количество страниц.
и как там же вывести все товары на одной странице. как такой параметр задать?
« Последнее редактирование: 16 Июля 2012, 16:48:02 от shoto »

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
Цитировать
Вывод количества товаров на странице изменяется. но вот где отредактировать параметр: 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>

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
Сложность  только в том что я нигде не вижу что бы был вызов со значением равным 5. что бы прописать равным другому значению. или это значение по умолчанию задается если нет иного?

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
5 это значение по умолчанию, попробуйте такой вызов

<xsl:apply-templates select="document('udata://system/numpages/////1000')/udata" />

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
у меня в стандартном шаблоне такой вызов:
<xsl:template match="total[. &gt; ../per_page]">
<xsl:apply-templates select="document(concat('udata://system/numpages/', ., '/', ../per_page))" />
</xsl:template>
если я данный вызов меняю на предложенный , то не выводится вообще ничего.

*

admin

  • *****
  • 2419
  • +172/-1
    • Просмотр профиля
так и есть, для замены написанного скорее всего нужно писать так

<xsl:template match="total[. &gt; ../per_page]">
<xsl:apply-templates select="document(concat('udata://system/numpages/', ., '/', ../per_page,'//100000'))" />
</xsl:template>

*

shoto

  • ***
  • 233
  • +4/-0
    • Просмотр профиля
нашла, надо еще один /.

<xsl:template match="total[. &gt; ../per_page]">
      <xsl:apply-templates select="document(concat('udata://system/numpages/', ., '/', ../per_page,'///100000'))" />
   </xsl:template>
« Последнее редактирование: 18 Июля 2012, 16:31:09 от shoto »