Перейти к содержимому


Фотография
- - - - -

Произвольная сортировка каталога с фронта. ХАК. Делаем сами.

сортировка

Сообщений в теме: 12

#1 Ёшкин Кот

Ёшкин Кот

Отправлено 12 June 2016 - 14:55

*
Популярное сообщение!

Разберемся как сделать произвольную быструю сортировку для каталога. Примерно такую как на картинках. (Стили и вывод можно настроить самому).

 

1b652db1f9.jpg fe708569db.jpg

 

Прежде всего определяемся какие сортировки будут нужны

 

в нашем случае:

 

по возрастанию цены
по убыванию цены
по популярности
по дате добавления (сначала новые)
по дате добавления (сначала старые)
 
Первым делом будем править файлы в темплейте JBZoo (В моем случае это темплейт по умолчанию Default (Catalog))
 
media\zoo\applications\jbuniversal\templates\catalog\category.php - для вывода сортировки каталога
media\zoo\applications\jbuniversal\templates\catalog\filter.php - для вывода сортировки результатов поиска
 
media\zoo\applications\jbuniversal\templates\catalog\category.php 
 
В место, где надо вывести сортировку вставляем блок:
 
  1. //Шаблон для сортировок в каталоге ======================================================================
  2. if ($this->app->zoo->getApplication()->id == 1) { //проверяем в каком приложении мы находимся
  3.  
  4. // Получаем URL где находимся
  5.  
  6. $myuri = JFactory::getURI();
  7. $myurl = $myuri->toString(array('path', '', 'fragment'));
  8.  
  9. $currentorder = $_SESSION['orderkit'];
  10. if (!$currentorder) {$currentorder = 'price_asc';} //устанавливаем значение сортировки по умолчанию.
  11.  
  12. //Вывод сортировки
  13. ?>
  14. <div class="orderblock">
  15. <span class="ordertitle">Сортировать</span>
  16. <span class="searchsel">
  17. <ul>
  18. <li <?php if ($currentorder == "price_asc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=price_asc" class="price asc">c начала дешевые</a></li>
  19. <li <?php if ($currentorder == "price_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=price_desc" class="price desc">c начала дорогие</a></li>
  20. <li <?php if ($currentorder == "popular_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=popular_desc" class="popular desc">c начала популярные</a></li>
  21. <li <?php if ($currentorder == "date_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=date_desc" class="date desc">c начала новые</a></li>
  22. <li <?php if ($currentorder == "date_asc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=date_asc" class="date asc">c начала старые</a></li>
  23. </ul>
  24. </span>
  25. </div>
  26. <?php
  27.  
  28. }
  29. //Шаблон для сортировок в каталоге ======================================================================
 

У меня это 55 строчка. 

 

сразу же после строк:

  1. // category items render
  2. if ($this->params->get('config.items_show', 1) && count($this->items)) {

Далее правим media\zoo\applications\jbuniversal\templates\catalog\filter.php

 

В место где необходимо вывести сортировку вставляем этот блок:

  1. //Шаблон для сортировок в фильтре ======================================================================
  2.  
  3. if ($this->app->zoo->getApplication()->id == 1) { //проверяем в каком приложении мы находимся
  4.  
  5. // Получаем URL где находимся
  6. $myuri = JFactory::getURI();
  7. $myurl = $myuri->toString(array('path', 'query', 'fragment'));
  8. $currentorder = $_SESSION['orderkit'];
  9. if (!$currentorder) {$currentorder = 'price_asc';} //устанавливаем значение сортировки по умолчанию.
  10. //Вывод сортировки
  11. ?>
  12. <div class="orderblock">
  13. <span class="ordertitle">Сортировать</span>
  14. <span class="searchsel">
  15. <ul>
  16. <li <?php if ($currentorder == "price_asc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>&orderkit=price_asc" class="price asc">c начала дешевые</a></li>
  17. <li <?php if ($currentorder == "price_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>&orderkit=price_desc" class="price desc">c начала дорогие</a></li>
  18. <li <?php if ($currentorder == "popular_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>&orderkit=popular_desc" class="popular desc">c начала популярные</a></li>
  19. <li <?php if ($currentorder == "date_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>&orderkit=date_desc" class="date desc">c начала новые</a></li>
  20. <li <?php if ($currentorder == "date_asc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>&orderkit=date_asc" class="date asc">c начала старые</a></li>
  21. </ul>
  22. </span>
  23. </div>
  24. <?php
  25. }
  26.  
  27. //Шаблон для сортировок в каталоге ======================================================================

У меня по условиям дизайна блок выводится над заголовком (24 строка).

 

заголовок:

  1. ?><h1 class="title"><?php echo JText::_('JBZOO_SEARCH_RESULT'); ?></h1><?php

Эти блоки отличаются друг от друга. Они не взаимозаменяемые. Основное отличие в формировании ссылок и изначального адреса ссылки.

 

В первом случае ?orderkit=price_asc для категории и &orderkit=price_asc для поиска. 

 

Данные правки позволят вывести необходимые наборы сортировок в нужных нам местах с уникальными значениями ссылок.

  1. <div class="orderblock">
  2. <span class="ordertitle">Сортировать</span>
  3. <span class="searchsel">
  4. <ul>
  5. <li <?php if ($currentorder == "price_asc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=price_asc" class="price asc">c начала дешевые</a></li>
  6. <li <?php if ($currentorder == "price_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=price_desc" class="price desc">c начала дорогие</a></li>
  7. <li <?php if ($currentorder == "popular_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=popular_desc" class="popular desc">c начала популярные</a></li>
  8. <li <?php if ($currentorder == "date_desc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=date_desc" class="date desc">c начала новые</a></li>
  9. <li <?php if ($currentorder == "date_asc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=date_asc" class="date asc">c начала старые</a></li>
  10. </ul>
  11. </span>
  12. </div>

Данные блоки надо редактировать под себя перечисляя в них свои сортировки. Я делал через ul li список. Вы форматируйте как вам угодно.

 

Так выглядит строка:

 

<li <?php if ($currentorder == "price_asc") {print 'class="active"';} ?>><a href="<?php print $myurl; ?>?orderkit=price_asc" class="price asc">c начала дешевые</a></li>

 

Я выделил цветом ключевые переменные. В данном случае price_asc

 

Эта переменная будет передана в адресе при клике на соответствующий пункт сортировки c начала дешевые

 

Вы создаете любой набор сортировок со своими переменными. У меня:

 

по возрастанию ценыprice_asc
по убыванию цены price_desc
по популярностиpopular_desc
по дате добавления (сначала новые)date_desc
по дате добавления (сначала старые)date_asc

 

Стили внешнего вида пока не настраиваем. Для начала запустим, чтобы все это дело заработало.

 

Переходим к правке файлов отвечающих за сортировку. Это:

 

components\com_zoo\controllers\default.php - отвечает за сортировку категории

media\zoo\applications\jbuniversal\framework\controllers\search.php - сортировка результатов поиска

 

components\com_zoo\controllers\default.php открываем данный файл.

 

ищем строку:

  1. $this->item_order = $params->get('config.item_order');

У меня это оказалась 228 строка. После нее вставляем следующий код:

  1. //Блок сортировок для каталога---------------------------------------------
  2. if ($this->app->zoo->getApplication()->id == 1) { //проверяем в каком приложении мы находимся
  3. //jbdump ($this->item_order,0); //Используйте эту строку, если у вас подключен JBdump
  4. //echo '<pre>';print_r ($this->item_order);echo '</pre>'; //Используйте эту строку, если у вас не подключен JBdump покажет значения выбраной сортировки
  5. //print 'Текущее значение сессии сортировки: '.$_SESSION['orderkit']; //Посмотреть текущее значение сессии для сортировки
  6. if ($_SESSION['orderkit'] == "") {$_SESSION['orderkit'] = 'price_asc';} //устанавливаем значение сортировки по умолчанию.
  7. //Получаем переменную для направления сортировки
  8. if (isset($_GET['orderkit'])) { $_SESSION['orderkit'] = $_GET['orderkit'];} //Меняем сортировку, если есть ключ в URL
  9.  
  10. if (isset($_SESSION['orderkit'])) {
  11. switch ($_SESSION['orderkit']) {
  12. case 'price_asc':
  13. $this->item_order = array(
  14. '_jbzoo_0_field_01ab859d-e9ce-42a3-b24b-4d11422bba90___value',
  15. '_jbzoo_0_mode_n',
  16. '_jbzoo_0_order_asc'
  17. );
  18. break;
  19. case 'price_desc':
  20. $this->item_order = array(
  21. '_jbzoo_0_field_01ab859d-e9ce-42a3-b24b-4d11422bba90___value',
  22. '_jbzoo_0_mode_n',
  23. '_jbzoo_0_order_desc'
  24. );
  25. break;
  26. case 'popular_desc':
  27. $this->item_order = array(
  28. '_jbzoo_0_field_corehits',
  29. '_jbzoo_0_mode_n',
  30. '_jbzoo_0_order_desc'
  31. );
  32. break;
  33. case 'date_asc':
  34. $this->item_order = array(
  35. '_jbzoo_0_field_corecreated',
  36. '_jbzoo_0_mode_d',
  37. '_jbzoo_0_order_asc'
  38. );
  39. break;
  40. case 'date_desc':
  41. $this->item_order = array(
  42. '_jbzoo_0_field_corecreated',
  43. '_jbzoo_0_mode_d',
  44. '_jbzoo_0_order_desc'
  45. );
  46. break;
  47. }
  48. }
  49. }
  50. //jbdump ($this->item_order,0); //Используйте эту строку, если у вас подключен JBdump
  51. //echo '<pre>';print_r ($this->item_order);echo '</pre>'; //Используйте эту строку, если у вас не подключен JBdump покажет значения выбраной сортировки
  52. //Блок сортировок для каталога---------------------------------------------
  53.  

Здесь видим следующие блоки:

  1. case 'price_asc':
  2. $this->item_order = array(
  3. '_jbzoo_0_field_01ab859d-e9ce-42a3-b24b-4d11422bba90___value',
  4. '_jbzoo_0_mode_n',
  5. '_jbzoo_0_order_asc'
  6. );
  7. break;

Именно они отвечают за обработку созданных нами переменных в шаблонах. Разберу по частям что за что отвечает.

 

case 'price_asc': - Определяет какую переменную будет обрабатывать данный блок. В нашем случае price_asc то есть по возрастанию цены

 

Следовательно нам нвдо заставить каталог сортироваться по нужному элементу цены в нужном порядке. Как его найти?

 

Для этого в блоке я сделал несколько строчек. Они по умолчанию закомментированы.

  1. //jbdump ($this->item_order,0); //Используйте эту строку, если у вас подключен JBdump
  2. //echo '<pre>';print_r ($this->item_order);echo '</pre>'; //Используйте эту строку, если у вас не подключен JBdump покажет значения выбраной сортировки
  3. //print 'Текущее значение сессии сортировки: '.$_SESSION['orderkit']; //Посмотреть текущее значение сессии для сортировки

Будем считать, что JBdump нам не доступен. Раскомментируем вторую строку убрав // перед ней

  1. //jbdump ($this->item_order,0); //Используйте эту строку, если у вас подключен JBdump
  2. echo '<pre>';print_r ($this->item_order);echo '</pre>'; //Используйте эту строку, если у вас не подключен JBdump покажет значения выбраной сортировки
  3. //print 'Текущее значение сессии сортировки: '.$_SESSION['orderkit']; //Посмотреть текущее значение сессии для сортировки

сохраняем все это дело

Идем в административную панель и в настройках каталога выбираем элемент соответствующий нужной нм сортировке. Если в данном случае идет речь о цене по возрастанию то  ищем нужный нам элемент цены выбираем сортировку по умолчанию по нему. 

867833d6cb.jpg

Сохраняем. Обновляем страницу каталога и получаем нечто такое:

085316a3cb.jpg

 

Это сортировка выбранная нами в админке. Мы видим ID элемента, тип сортировки и ее направление:

  1. [0] => _jbzoo_0_field_433a0a0e-30e8-4e71-92ab-4b9eb0d678f7___value
[1] => _jbzoo_0_mode_n
[2] => _jbzoo_0_order_asc

переносим значения сортировкив наш блок
case 'price_asc':
    $this->item_order = array(
        '_jbzoo_0_field_433a0a0e-30e8-4e71-92ab-4b9eb0d678f7___value',
        '_jbzoo_0_mode_n',
        '_jbzoo_0_order_asc'
);
break;

Таким образом создаем все блоки обработки наших сортировок. 

То есть столько блоков сколько мы создали в шаблонах столько делаем в данном месте и настраиваем их изменяя сортировки в админке для каталога для вывода необходимых нам данных для блоков.

 

Параллельно проверяем работоспособность соответствующих сортировок используя созданные нами ссылки в каталоге.

 

После настройки фильтра в категориях каталога комментируем снова строчку для вывода переменных сортировок и переходим к настройке фильтра для результатов поиска.

 

Открываем файл media\zoo\applications\jbuniversal\framework\controllers\search.php

 

находим строку:

  1. $appId = $this->_jbrequest->get('app_id');

и после нее вставляем следующий блок:

  1. //Блок сортировок для фильтра---------------------------------------------
  2. //jbdump ($order,0); //Используйте эту строку, если у вас подключен JBdump
  3. //echo '<pre>';print_r ($order);echo '</pre>'; //Используйте эту строку, если у вас не подключен JBdump покажет значения выбраной сортировки
  4. //print 'Текущее значение сессии сортировки: '.$_SESSION['orderkit']; //Посмотреть текущее значение сессии для сортировки
  5.  
  6. if ($this->app->zoo->getApplication()->id == 1) { //проверяем в каком приложении мы находимся
  7. if ($_SESSION['orderkit'] == "") {$_SESSION['orderkit'] = 'price_asc';} //устанавливаем значение сортировки по умолчанию.
  8. //Получаем переменную для направления сортировки
  9. if (isset($_GET['orderkit'])) { $_SESSION['orderkit'] = $_GET['orderkit'];} //Меняем сортировку, если есть ключ в URL
  10. if (isset($_SESSION['orderkit'])) {
  11. switch ($_SESSION['orderkit']) {
  12. case 'price_asc':
  13. $order[field] = '01ab859d-e9ce-42a3-b24b-4d11422bba90___value';
  14. $order[mode] = 'n';
  15. $order[order] = 'asc';
  16. break;
  17. case 'price_desc':
  18. $order[field] = '01ab859d-e9ce-42a3-b24b-4d11422bba90___value';
  19. $order[mode] = 'n';
  20. $order[order] = 'desc';
  21. break;
  22. case 'popular_desc':
  23. $order[field] = '_jbzoo_0_field_corehits';
  24. $order[mode] = 'n';
  25. $order[order] = 'desc';
  26. break;
  27. case 'date_asc':
  28. $order[field] = 'corecreated';
  29. $order[mode] = 'd';
  30. $order[order] = 'asc';
  31. break;
  32. case 'date_desc':
  33. $order[field] = 'corecreated';
  34. $order[mode] = 'd';
  35. $order[order] = 'desc';
  36. break;
  37. }
  38. }
  39. }
  40.  

Здесь блоки обработки сортировок выглядят иначе:

  1. case 'price_asc':
  2. $order[field] = '01ab859d-e9ce-42a3-b24b-4d11422bba90___value';
  3. $order[mode] = 'n';
  4. $order[order] = 'asc';
  5. break;

если сравнить их с уже настроенными блоками то мы увидим, что разница не так и велика.

 
для каталога:
 
case 'price_asc':
    $this->item_order = array(
        '_jbzoo_0_field_433a0a0e-30e8-4e71-92ab-4b9eb0d678f7___value',
        '_jbzoo_0_mode_n',
        '_jbzoo_0_order_asc'
);
break;

Для поиска

:

case 'price_asc':
        $order[field] = '01ab859d-e9ce-42a3-b24b-4d11422bba90___value';
        $order[mode] = 'n';
        $order[order] = 'asc';
break;

 

То есть здесь просто иначе формируется массив и обрезаны префиксы для элементов.

Можно изменить уже готовые блоки.

 

После этого можно настроить стили для фильтра. На картинках стили представлены ниже:

  1. .orderblock {
  2. border-top: 1px solid #c7c7c7;
  3. float: left;
  4. width: 100%;
  5. padding: 10px 0;
  6. text-align:right;
  7. }
  8. .orderblock .searchsel {
  9. display: inline-block;
  10. float: right;
  11. margin: 0;
  12. padding: 5px 15px;
  13. border: 1px solid #c7c7c7;
  14. height: 35px;
  15. position: relative;
  16. overflow: hidden;
  17. border-radius: 20px;
  18. text-align:left;
  19. background: url("../images/drop.png") no-repeat right;
  20. width: 200px;
  21. }
  22. .orderblock .searchsel:hover {
  23. overflow: visible;
  24. border-radius:20px 20px 0 0;
  25. }
  26. span.searchsel ul {
  27. position: absolute;
  28. top: 33px;
  29. right: -1px;
  30. left: -1px;
  31. border: 1px solid #c7c7c7;
  32. border-top: none;
  33. z-index: 50;
  34. background: #fff;
  35. padding: 15px;
  36. border-radius: 0 0 20px 20px;
  37. }
  38. .orderblock ul li {
  39. list-style: none;
  40. padding: 5px;
  41. }
  42. .orderblock ul li:hover a {
  43. color: #999;
  44. }
  45. .orderblock li.active {
  46. position:absolute;
  47. top: -34px;
  48. }
  49. .orderblock li a {
  50. color:#000;
  51. }
  52. span.ordertitle {
  53. display: inline-block;
  54. padding: 5px 20px;
  55. }
  56. #yoo-zoo > div.category {
  57. margin: 0;
  58. padding: 0;
  59. }

Обратите внимание на следующие строки в коде:

  1. if ($this->app->zoo->getApplication()->id == 1) { //проверяем в каком приложении мы находимся

Этим условием обернут весь код блоков сортировок и определяет в каком приложении выводится работает это все дело. Иначе сортировки будут выводится везде и работать например в блоге если он отдельным приложением сделан. Так же в данном месте можно поставить условие по категориям или иные условия для ограничения работы сортировок.. 

 
Файлы: Прикрепленный файл  files-sotr.zip   12.22К   434 Количество загрузок:

Прикрепленные изображения

  • e0cf56e9a1.jpg

Сообщение отредактировал Ёшкин Кот: 12 June 2016 - 16:26

  • 15

#2 fiction13

fiction13

Отправлено 12 June 2016 - 17:00

*
Популярное сообщение!

Начал писать подробное FAQ по этой теме, но раз Вы написали, то думаю, что уже не допишу.

 

Переменные из сессии и GET лучше (читай безопаснее) брать с помощью стандартных функций Joomla.

 

А так да, принцип описан верный. По такому же принципу вешается селект с выбором количества товаров для отображения.


  • 5

#3 Ёшкин Кот

Ёшкин Кот

Отправлено 12 June 2016 - 19:46

Я еще не прокачался на столько.. корректировки приветствуются.

 

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


Сообщение отредактировал Ёшкин Кот: 12 June 2016 - 19:49

  • 2

#4 fiction13

fiction13

Отправлено 13 June 2016 - 08:22

*
Популярное сообщение!

Ёшкин Кот сказал(а) 12 Июн 2016 - 18:46:

Я еще не прокачался на столько.. корректировки приветствуются.

Это ж несложно.

 

Берем переменную из GET

  1. JFactory::getApplication()->input->getString('order', '');

Берем значение из сессии

  1. JFactory::getSession()->get('order')

Пихаем значение в сессию

  1. JFactory::getSession()->set('order', 'ЗНАЧЕНИЕ');

  • 6

#5 Alex Def

Alex Def

Отправлено 05 September 2016 - 00:32

В одной категории могут быть материалы разных типов, а в каталоге разных типов может быть несколько десятков... Поэтому использование ID элемента цены, мягко говоря, неудобное решение.

Попробовал создать элемент ядра Zoo, который подхватывал бы значение элемента цены у любого типа материала. С помощью кода подсказанного fiction13:

  1. foreach($this->_item->getElements() as $element) {
  2. if($element->config->type == 'jbpriceplain') {
  3. $price = trim($element->getList()->getTotal()->plain('RUB'));
  4. $price = $price ? (int)str_ireplace(' ', '', $price) : 'empty';
  5. }
  6. }

Всё бы круто работало, но оказывается сортировка Zoo происходит при запросе к БД (вот так открытие =)), из-за чего возникает ошибка 1054 - неизвестный столбец.

В итоге мне удалось запихнуть искомое значение цены лишь в столбец created_by_alias и... сортировка заработала для всех типов материалов в категории! Но тут два очевидных минуса: значение записывается только при пересохранении материала, т.к. при создании материала элемент цены ещё пустой. А второй минус появляется если в каталоге используется несколько разных валют, — значение записывается с текущим курсом и не обновляется при изменение этого самого курса.

 

Так вот к чему я всё это. Всё описание выше я проделывал стандартными средствами Zoo. И судя по тому, что в JBZoo сортировки работают по любым полям, вытекает такой вопрос: а есть ли возможность создать такой же элемент ядра jbzoo (с одинаковым ID для всех типов материалов, так сказать)?


Сообщение отредактировал Alex Def: 05 September 2016 - 00:53

  • 0

#6 Alex Def

Alex Def

Отправлено 09 October 2016 - 15:29

Господа, так как быть если в одной категории несколько типов товаров?


  • 1

#7 SmetDenis

SmetDenis

Отправлено 10 October 2016 - 08:07

Alex Def сказал(а) 09 Окт 2016 - 14:29:

Господа, так как быть если в одной категории несколько типов товаров?

 

К сожалению, сортировка как и фильтр работает в рамках только одного типа материала.

Наследие компонента ZOO...


  • 0
JBZoo v4.0 и новый чудный мир Open Source GPL
Отключайте проверку лицензий как можно скорее!



— Есть два типа людей: Кто еще не делает бекапы и кто уже делает бекапы.


#8 Alex Def

Alex Def

Отправлено 10 October 2016 - 08:48

Есть проекты на 2.1.5. Там конечно jbprice advance, но движок воспринимает его как одно целое. Можно в настройках приложения указать jbprice от одного типа материалов — сортироваться корректно будут все, это касается и сортировок в модулях. И при пересечениях никаких проблем.

 

Так что это больше похоже на "наследие" v2.2.0.


  • 0

#9 mr.varhola

mr.varhola

Отправлено 24 October 2019 - 14:33

Подскажите, а если нужно сортировать например по цене и сразу по наличию в результатах фильтра?

с товарами в категории все понятно, нужно писать так:

  1. switch ($_SESSION['orderkit']) {
  2. case 'price_asc':
  3. $this->item_order = array(
  4. '_jbzoo_0_field_e2f56125-d1af-4772-9890-742c61e026ac',
  5. '_jbzoo_0_mode_s',
  6. '_jbzoo_0_order_asc',
  7. '_jbzoo_1_field_62a4dad1-3cbd-4e01-a32a-9c7dc798cb2d___value',
  8. '_jbzoo_1_mode_n',
  9. '_jbzoo_1_order_asc'
  10. );
  11. break;
  12. case 'price_desc':
  13. $this->item_order = array(
  14. '_jbzoo_0_field_e2f56125-d1af-4772-9890-742c61e026ac',
  15. '_jbzoo_0_mode_s',
  16. '_jbzoo_0_order_asc',
  17. '_jbzoo_1_field_62a4dad1-3cbd-4e01-a32a-9c7dc798cb2d___value',
  18. '_jbzoo_1_mode_n',
  19. '_jbzoo_1_order_desc'
  20. );
  21. break;

и все отлично, строки с _jbzoo_0 сортируют по наличию, делая вывод товаров с нулевым количеством в конце списка, а вот как писать это же для поиска не пойму.

Пишу так, но ничего не выходит:

 

  1. switch ($_SESSION['orderkit']) {
  2. case 'price_asc':
  3. $order[field] = 'e2f56125-d1af-4772-9890-742c61e026ac';
  4. $order[mode] = 's';
  5. $order[order] = 'asc';
  6. $order[field] = '62a4dad1-3cbd-4e01-a32a-9c7dc798cb2d___value';
  7. $order[mode] = 'n';
  8. $order[order] = 'asc';
  9. break;
  10. case 'price_desc':
  11. $order[field] = 'e2f56125-d1af-4772-9890-742c61e026ac';
  12. $order[mode] = 's';
  13. $order[order] = 'asc';
  14. $order[field] = '62a4dad1-3cbd-4e01-a32a-9c7dc798cb2d___value';
  15. $order[mode] = 'n';
  16. $order[order] = 'desc';
  17. break;

непонятно где тут писать 0 а где 1
 


  • 0

#10 CB9TOIIIA

CB9TOIIIA

Отправлено 24 October 2019 - 18:24

mr.varhola сказал(а) 24 Окт 2019 - 13:33:

Подскажите, а если нужно сортировать например по цене и сразу по наличию в результатах фильтра?

с товарами в категории все понятно, нужно писать так:

  1. switch ($_SESSION['orderkit']) {
  2. case 'price_asc':
  3. $this->item_order = array(
  4. '_jbzoo_0_field_e2f56125-d1af-4772-9890-742c61e026ac',
  5. '_jbzoo_0_mode_s',
  6. '_jbzoo_0_order_asc',
  7. '_jbzoo_1_field_62a4dad1-3cbd-4e01-a32a-9c7dc798cb2d___value',
  8. '_jbzoo_1_mode_n',
  9. '_jbzoo_1_order_asc'
  10. );
  11. break;
  12. case 'price_desc':
  13. $this->item_order = array(
  14. '_jbzoo_0_field_e2f56125-d1af-4772-9890-742c61e026ac',
  15. '_jbzoo_0_mode_s',
  16. '_jbzoo_0_order_asc',
  17. '_jbzoo_1_field_62a4dad1-3cbd-4e01-a32a-9c7dc798cb2d___value',
  18. '_jbzoo_1_mode_n',
  19. '_jbzoo_1_order_desc'
  20. );
  21. break;

и все отлично, строки с _jbzoo_0 сортируют по наличию, делая вывод товаров с нулевым количеством в конце списка, а вот как писать это же для поиска не пойму.

Пишу так, но ничего не выходит:

  1. switch ($_SESSION['orderkit']) {
  2. case 'price_asc':
  3. $order[field] = 'e2f56125-d1af-4772-9890-742c61e026ac';
  4. $order[mode] = 's';
  5. $order[order] = 'asc';
  6. $order[field] = '62a4dad1-3cbd-4e01-a32a-9c7dc798cb2d___value';
  7. $order[mode] = 'n';
  8. $order[order] = 'asc';
  9. break;
  10. case 'price_desc':
  11. $order[field] = 'e2f56125-d1af-4772-9890-742c61e026ac';
  12. $order[mode] = 's';
  13. $order[order] = 'asc';
  14. $order[field] = '62a4dad1-3cbd-4e01-a32a-9c7dc798cb2d___value';
  15. $order[mode] = 'n';
  16. $order[order] = 'desc';
  17. break;

непонятно где тут писать 0 а где 1
 

 

 

$order[0][field] и $order[1][field]

 

может?


  • 0





Темы с аналогичным тегами сортировка

Click to return to top of page in style!