hamelyon Опубликовано 22 июня, 2015 Жалоба Поделиться Опубликовано 22 июня, 2015 Здравствуйте! Есть товар на сайте в наличии с остатком > 1Также есть товар под заказ с остатком = 0 В чистой simpla есть возможность сортировки: sort - порядок товаров, возможные значения: position(по умолчанию), name, price Как добавить сортировку в наличии и под заказ Что то типа {* Сортировка *} {if $products|count>0} <div class="sort"> Сортировать по <a {if $sort=='position'} class="selected"{/if} href="{url sort=position page=null}">умолчанию</a> <a {if $sort=='price'} class="selected"{/if} href="{url sort=price page=null}">цене</a> <a {if $sort=='name'} class="selected"{/if} href="{url sort=name page=null}">названию</a> <a {if $sort=='in_stock'} class="selected"{/if} href="{url sort=in_stock page=null}">наличию</a> </div> {/if} + под заказ Видел реализацию на форуме, но теперь не могу найти. Спасибо! Цитата Ссылка на сообщение Поделиться на другие сайты
Dysha-Kuzbass Опубликовано 5 августа, 2015 Жалоба Поделиться Опубликовано 5 августа, 2015 Да, тоже это интересует. Цитата Ссылка на сообщение Поделиться на другие сайты
filth Опубликовано 20 августа, 2015 Жалоба Поделиться Опубликовано 20 августа, 2015 А что вы будете сортировать? у Вас же всего 2 варианта: есть товар, и нет. Вам фильтр наверно нужен показать все товары с кол. >0 и =0. То тут все просто: файл ProductsView.php после // Сортировка товаров, сохраняем в сесси, чтобы текущая сортировка оставалась для всего сайта if($sort = $this->request->get('sort', 'string')) $_SESSION['sort'] = $sort; if (!empty($_SESSION['sort'])) $filter['sort'] = $_SESSION['sort']; else $filter['sort'] = 'position'; $this->design->assign('sort', $filter['sort']); добавим // Текущий фильтр if($f = $this->request->get('filter', 'string')) { if($f == 'outofstock') $filter['in_stock'] = 0; elseif($f == 'in_stock') $filter['in_stock'] = 1; $this->design->assign('filter', $f); } В файле products.tpl после <div class="sort"> Сортировать по <a {if $sort=='position'} class="selected"{/if} href="{url sort=position page=null}">умолчанию</a> <a {if $sort=='price'} class="selected"{/if} href="{url sort=price page=null}">цене</a> <a {if $sort=='name'} class="selected"{/if} href="{url sort=name page=null}">названию</a> </div> Добавим <div class="filter"> <ul> <li>Показать:</li> <li {if !$filter}class="selected"{/if}><a href="{url brand_id=null category_id=null keyword=null page=null filter=null}">Все товары</a></li> <li {if $filter=='in_stock'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='in_stock'}">В наличии</a></li> <li {if $filter=='outofstock'}class="selected"{/if}><a href="{url keyword=null brand_id=null category_id=null page=null filter='outofstock'}">Нет в наличии</a></li> </ul> </div> И все. Это есть в админке, и все классы в API уже прописаны. Так же можно сделать сортировку по товарам со скидкой и если товар хит продаж. Цитата Ссылка на сообщение Поделиться на другие сайты
Sharfik Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 filth, спасибо! именно то, что нужнодумаю тему стоит перенести в готовые решения Цитата Ссылка на сообщение Поделиться на другие сайты
filth Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 хм, заметил одну деталь, в админке фильтр сохраняет свое значение при выборе категорий и брендов, у клиента фильтр сбрасывается. Вопрос знатокам - возможно ли сохранить в сессии фильтр? Если да, подскажите как))) Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 хм, заметил одну деталь, в админке фильтр сохраняет свое значение при выборе категорий и брендов, у клиента фильтр сбрасывается. Вопрос знатокам - возможно ли сохранить в сессии фильтр? Если да, подскажите как))) сохраняйте значение фильтра в сессию $_SESSION['in_stock'] = $filter['in_stock']; и передавайте эту сессию назад в шаблон Цитата Ссылка на сообщение Поделиться на другие сайты
filth Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 сохраняйте значение фильтра в сессию $_SESSION['in_stock'] = $filter['in_stock']; и передавайте эту сессию назад в шаблонПонимаю, что прошу многовато, но помогите как правильно это добавить сюда // Текущий фильтр if($f = $this->request->get('filter', 'string')) { if($f == 'featured') $filter['featured'] = 1; elseif($f == 'discounted') $filter['discounted'] = 1; elseif($f == 'outofstock') $filter['in_stock'] = 0; elseif($f == 'in_stock') $filter['in_stock'] = 1; $this->design->assign('filter', $f); } Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 Понимаю, что прошу многовато, но помогите как правильно это добавить сюда так попробуйте // Текущий фильтр если был передан запрос get-параметром if($this->request->get('filter', 'string')) { $f = $this->request->get('filter', 'string'); } // если ничего не передавали, но в сессии присутствует значение фильтра elseif(isset($_SESSION['filter_stat'])) { $f = $_SESSION['filter_stat']; } if(isset($f)) { if($f == 'featured') $filter['featured'] = 1; elseif($f == 'discounted') $filter['discounted'] = 1; elseif($f == 'outofstock') $filter['in_stock'] = 0; elseif($f == 'in_stock') $filter['in_stock'] = 1; // запишем новое значение фильтра в сессию $_SESSION['filter_stat'] = $f; //передадим значение назад в шаблон $this->design->assign('filter', $f); } Цитата Ссылка на сообщение Поделиться на другие сайты
filth Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 (изменено) так попробуйте // Текущий фильтр если был передан запрос get-параметром if($this->request->get('filter', 'string')) { $f = $this->request->get('filter', 'string'); } // если ничего не передавали, но в сессии присутствует значение фильтра elseif(isset($_SESSION['filter_stat'])) { $f = $_SESSION['filter_stat']; } if(isset($f)) { if($f == 'featured') $filter['featured'] = 1; elseif($f == 'discounted') $filter['discounted'] = 1; elseif($f == 'outofstock') $filter['in_stock'] = 0; elseif($f == 'in_stock') $filter['in_stock'] = 1; // запишем новое значение фильтра в сессию $_SESSION['filter_stat'] = $f; //передадим значение назад в шаблон $this->design->assign('filter', $f); } Работает на отлично! Спасибо огромное, уверен много кому будет полезно. Изменено 28 августа, 2015 пользователем filth Цитата Ссылка на сообщение Поделиться на другие сайты
filth Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 так попробуйте // Текущий фильтр если был передан запрос get-параметром if($this->request->get('filter', 'string')) { $f = $this->request->get('filter', 'string'); } // если ничего не передавали, но в сессии присутствует значение фильтра elseif(isset($_SESSION['filter_stat'])) { $f = $_SESSION['filter_stat']; } if(isset($f)) { if($f == 'featured') $filter['featured'] = 1; elseif($f == 'discounted') $filter['discounted'] = 1; elseif($f == 'outofstock') $filter['in_stock'] = 0; elseif($f == 'in_stock') $filter['in_stock'] = 1; // запишем новое значение фильтра в сессию $_SESSION['filter_stat'] = $f; //передадим значение назад в шаблон $this->design->assign('filter', $f); } Теперь надо бороться с случаем, если фильтр нашел 0 товаров, но то просто.... И вернуть возможность показать "все товары"))) Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 Теперь надо бороться с случаем, если фильтр нашел 0 товаров, но то просто.... И вернуть возможность показать "все товары"))) чтобы показать все товары просто передайте в параметр filter любое другое значение что отличается от ваших условий, например empty, тогда фильтры скинуться. и в сессию запишеться что фильтр пустой Цитата Ссылка на сообщение Поделиться на другие сайты
filth Опубликовано 28 августа, 2015 Жалоба Поделиться Опубликовано 28 августа, 2015 чтобы показать все товары просто передайте в параметр filter любое другое значение что отличается от ваших условий, например empty, тогда фильтры скинуться. и в сессию запишеться что фильтр пустой Уже так и сделал, спасибо) Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 31 января, 2016 Жалоба Поделиться Опубликовано 31 января, 2016 а у меня немного другая ситуация - для товаров под заказ у меня добавлен чекбок "zakaz" по инструкции с форума, для товаров в наличии zakaz = 0, под заказ zakaz = 1. Пытаюсь сделать фильтр как выше писали, вставляю в ProductsView.php: // Фильтр по наличию if($f = $this->request->get('filter', 'string')) { if($f == 'instock') $filter['zakaz'] = 0; elseif($f == 'outofstock') $filter['zakaz'] = 1; $this->design->assign('filter', $f); } В шаблоне вывожу так: <a href="{url brand_id=null category_id=null keyword=null page=null filter=null}" {if !$filter}class="selected"{/if}>Все</a> <a href="{url keyword=null brand_id=null category_id=null page=null filter='instock'}" {if $filter=='instock'}class="selected"{/if}>В наличии</a> <a href="{url keyword=null brand_id=null category_id=null page=null filter='outofstock'}" {if $filter=='outofstock'}class="selected"{/if}>Под заказ</a> И ничего не выходит, точнее работает фильтр только для товаров под заказ (zakaz = 1), а товары в наличии (zakaz = 0) отдельно не показывает, показывает все вместе в наличии и под заказ. Посмотрел файл api/Products.php, там для zakaz указано по аналогии с discounted: if(!empty($filter['zakaz'])) $is_zakaz_filter = $this->db->placehold('AND p.zakaz=?', intval($filter['zakaz'])); Не подскажите в какую сторону копать? Р.S. в базе данных глянул, у всех товаров проставлен zakaz как 0 или 1. Т.е. пустых значений нет Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 2 февраля, 2016 Жалоба Поделиться Опубликовано 2 февраля, 2016 пробовал так: $filter['zakaz'] = '0'; Тоже не помогает. Народ, выручайте! Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 2 февраля, 2016 Жалоба Поделиться Опубликовано 2 февраля, 2016 (изменено) пробовал так: $filter['zakaz'] = '0'; Тоже не помогает. Народ, выручайте! дело в том что empty() возвращает false при пустом и нулевом значении. верните на 0 и замените if(!empty($filter['zakaz'])) на if(isset($filter['zakaz'])) или так if(!empty($filter['zakaz']) || $filter['zakaz'] === 0) Изменено 2 февраля, 2016 пользователем mishanya Цитата Ссылка на сообщение Поделиться на другие сайты
simpler Опубликовано 2 февраля, 2016 Жалоба Поделиться Опубликовано 2 февраля, 2016 дело в том что empty() возвращает false при пустом и нулевом значении. верните на 0 и замените if(!empty($filter['zakaz'])) на if(isset($filter['zakaz'])) или так if(!empty($filter['zakaz']) || $filter['zakaz'] === 0) сделал как вы сказали, но почему то не сработало( странно, в чем может быть дело? Цитата Ссылка на сообщение Поделиться на другие сайты
mishanya Опубликовано 2 февраля, 2016 Жалоба Поделиться Опубликовано 2 февраля, 2016 сделал как вы сказали, но почему то не сработало( странно, в чем может быть дело?ну вроде должно выводить. надо смотреть что там у вас еще в Products.php. хотите пишите в личку фтп, так нет времени гадать). Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.