pif Опубликовано 21 апреля, 2013 Жалоба Поделиться Опубликовано 21 апреля, 2013 Дано: страница http://урл-магазина/products/, то есть - отображение всех товаров в магазине.Нужно: вывести фильтр как в страницах категорий. Костыль знаю - сделать отдельную категорию "Все товары". Но наверняка можно как-то проще? Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 21 апреля, 2013 Жалоба Поделиться Опубликовано 21 апреля, 2013 Дано: страница http://урл-магазина/products/, то есть - отображение всех товаров в магазине.Нужно: вывести фильтр как в страницах категорий. Костыль знаю - сделать отдельную категорию "Все товары". Но наверняка можно как-то проще? В шаблон products.tpl в самом верху вставьте такой код: {* Фильтр по свойствам *} {if $features_all} <table id="features"> {foreach $features_all as $fa} <tr> <td class="feature_name" data-feature="{$fa->id}"> {$fa->name}: </td> <td class="feature_values"> <a href="{url params=[$fa->id=>null, page=>null]}" {if !$smarty.get.$fa@key}class="selected"{/if}>Все</a> {foreach $fa->options as $ao} <a href="{url params=[$fa->id=>$ao->value, page=>null]}" {if $smarty.get.$fa@key == $ao->value}class="selected"{/if}>{$ao->value|escape}</a> {/foreach} </td> </tr> {/foreach} </table> {/if} Откройте файл view/ProductsView.php и замените код с 85-й строки по 121 на такой: // Свойства товаров if(!empty($category)) { $features = array(); foreach($this->features->get_features(array('category_id'=>$category->id, 'in_filter'=>1)) as $feature) { $features[$feature->id] = $feature; if(($val = $this->request->get($feature->id))!='') $filter['features'][$feature->id] = $val; } $options_filter['visible'] = 1; $features_ids = array_keys($features); if(!empty($features_ids)) $options_filter['feature_id'] = $features_ids; $options_filter['category_id'] = $category->children; if(isset($filter['features'])) $options_filter['features'] = $filter['features']; if(!empty($brand)) $options_filter['brand_id'] = $brand->id; $options = $this->features->get_options($options_filter); foreach($options as $option) { if(isset($features[$option->feature_id])) $features[$option->feature_id]->options[] = $option; } foreach($features as $i=>&$feature) { if(empty($feature->options)) unset($features[$i]); } $this->design->assign('features', $features); }else{ $features_all = array(); foreach($this->features->get_features(array('in_filter'=>1)) as $feature) { $features_all[$feature->id] = $feature; if(($val = $this->request->get($feature->id))!='') $filter['features'][$feature->id] = $val; } $options_filter['visible'] = 1; $features_ids = array_keys($features_all); if(!empty($features_ids)) $options_filter['feature_id'] = $features_ids; if(isset($filter['features'])) $options_filter['features'] = $filter['features']; if(!empty($brand)) $options_filter['brand_id'] = $brand->id; $options = $this->features->get_options($options_filter); foreach($options as $option) { if(isset($features_all[$option->feature_id])) $features_all[$option->feature_id]->options[] = $option; } foreach($features_all as $i=>&$feature) { if(empty($feature->options)) unset($features_all[$i]); } $this->design->assign('features_all', $features_all); } Вроде все. Должно работать. Цитата Ссылка на сообщение Поделиться на другие сайты
Kasha Опубликовано 21 апреля, 2013 Жалоба Поделиться Опубликовано 21 апреля, 2013 Нокс готовый файлик цепляй чтобы можно было посмотреть в случае ошибок - очень удобное дело. Цитата Ссылка на сообщение Поделиться на другие сайты
Noxter Опубликовано 22 апреля, 2013 Жалоба Поделиться Опубликовано 22 апреля, 2013 Нокс готовый файлик цепляй чтобы можно было посмотреть в случае ошибок - очень удобное дело.Обойдутся, пусть практикуют. Уж очень много ленивых развелось. Цитата Ссылка на сообщение Поделиться на другие сайты
Bogus Опубликовано 15 июня, 2015 Жалоба Поделиться Опубликовано 15 июня, 2015 (изменено) Добрый день. судя по дате, пост сильно устарел. можно ли обновить как то на актуальный момент? и если можно то не с № строки по № строки а хотя бы куском кода как начинается и как заканчивается. я не ленивый но после даже одного модуля, файл у меня явно имеет другую нумерацию. Буду вам безгранично благодарен за обновление поста =) UPD: прошу прощения, вспылил ... подумал погадал, вник разобрался =) все актуально. спасибо за решение UPD: перекрутил на измененный файл ProductsView от мультифильтра, в итоге получаю такую ошибку. подскажите в какую сторону копать? Warning: Placeholder substitution error. Diagnostics: "AND p.id in (SELECT product_id FROM s_options WHERE feature_id=? AND value in (NOT_AN_ARRAY_PLACEHOLDER_1) ) " in /var/www/****/data/www/*****/simpla/api/Database.php on line 109 Изменено 15 июня, 2015 пользователем Bogus Цитата Ссылка на сообщение Поделиться на другие сайты
Maksclub Опубликовано 10 февраля, 2017 Жалоба Поделиться Опубликовано 10 февраля, 2017 В шаблон products.tpl в самом верху вставьте такой код: Вроде все. Должно работать. Все работает, а как еще и бренды вывалить сюда? То есть чтобы сортировка шла по брендам и свойствам Цитата Ссылка на сообщение Поделиться на другие сайты
aroman80 Опубликовано 5 февраля, 2018 Жалоба Поделиться Опубликовано 5 февраля, 2018 если удалить if(!empty($category)) то и так выводится в /products Цитата Ссылка на сообщение Поделиться на другие сайты
WebWC Опубликовано 15 августа, 2018 Жалоба Поделиться Опубликовано 15 августа, 2018 Господа, а кто нибудь может помочь с select="select"? Не хочет сохраняться и соответственно пропадает возможность сбросить фильтрацию. {* Фильтр по свойствам *} {if $features_all} {foreach $features_all as $fa} <label class="label" for="sort" data-feature="{$fa->id}">{$fa->name}</label> <label class="select-sm"> <select id="sort"> <option {if !$smarty.get.$fa@key} selected="selected"{/if} value="{url params=[$fa->id=>null, page=>null]}">Все</option> {foreach $fa->options as $ao} <option {if $smarty.get.$fa@key == $ao->value} selected="selected"{/if} value="{url params=[$fa->id=>$ao->value, page=>null]}">{$ao->value|escape}</option> {/foreach} </select> </label> {/foreach} {/if} Цитата Ссылка на сообщение Поделиться на другие сайты
megauser Опубликовано 26 марта, 2020 Жалоба Поделиться Опубликовано 26 марта, 2020 Господа, а кто нибудь может помочь с select="select"? Не хочет сохраняться и соответственно пропадает возможность сбросить фильтрацию. {* Фильтр по свойствам *} {if $features_all} {foreach $features_all as $fa} <label class="label" for="sort" data-feature="{$fa->id}">{$fa->name}</label> <label class="select-sm"> <select id="sort"> <option {if !$smarty.get.$fa@key} selected="selected"{/if} value="{url params=[$fa->id=>null, page=>null]}">Все</option> {foreach $fa->options as $ao} <option {if $smarty.get.$fa@key == $ao->value} selected="selected"{/if} value="{url params=[$fa->id=>$ao->value, page=>null]}">{$ao->value|escape}</option> {/foreach} </select> </label> {/foreach} {/if} Та же самая проблема, фильтр работает, но значения в селекты включаются, сбросить значение не выходит Цитата Ссылка на сообщение Поделиться на другие сайты
Рекомендуемые сообщения
Присоединяйтесь к обсуждению
Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.