pif Posted April 21, 2013 Report Share Posted April 21, 2013 Дано: страница http://урл-магазина/products/, то есть - отображение всех товаров в магазине.Нужно: вывести фильтр как в страницах категорий. Костыль знаю - сделать отдельную категорию "Все товары". Но наверняка можно как-то проще? Quote Link to post Share on other sites
Noxter Posted April 21, 2013 Report Share Posted April 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); } Вроде все. Должно работать. Quote Link to post Share on other sites
Kasha Posted April 21, 2013 Report Share Posted April 21, 2013 Нокс готовый файлик цепляй чтобы можно было посмотреть в случае ошибок - очень удобное дело. Quote Link to post Share on other sites
Noxter Posted April 22, 2013 Report Share Posted April 22, 2013 Нокс готовый файлик цепляй чтобы можно было посмотреть в случае ошибок - очень удобное дело.Обойдутся, пусть практикуют. Уж очень много ленивых развелось. Quote Link to post Share on other sites
Bogus Posted June 15, 2015 Report Share Posted June 15, 2015 (edited) Добрый день. судя по дате, пост сильно устарел. можно ли обновить как то на актуальный момент? и если можно то не с № строки по № строки а хотя бы куском кода как начинается и как заканчивается. я не ленивый но после даже одного модуля, файл у меня явно имеет другую нумерацию. Буду вам безгранично благодарен за обновление поста =) 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 Edited June 15, 2015 by Bogus Quote Link to post Share on other sites
Maksclub Posted February 10, 2017 Report Share Posted February 10, 2017 В шаблон products.tpl в самом верху вставьте такой код: Вроде все. Должно работать. Все работает, а как еще и бренды вывалить сюда? То есть чтобы сортировка шла по брендам и свойствам Quote Link to post Share on other sites
aroman80 Posted February 5, 2018 Report Share Posted February 5, 2018 если удалить if(!empty($category)) то и так выводится в /products Quote Link to post Share on other sites
WebWC Posted August 15, 2018 Report Share Posted August 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} Quote Link to post Share on other sites
megauser Posted March 26, 2020 Report Share Posted March 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} Та же самая проблема, фильтр работает, но значения в селекты включаются, сбросить значение не выходит Quote Link to post Share on other sites
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.