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


Фото
- - - - -

Как вывести фильтр на странице "Все товары"?


  • Чтобы отвечать, сперва войдите на форум
8 ответов в теме

#1 pif

pif
  • Пользователь
  • 15 сообщений
  • Заказчик

Опубликовано 21.04.2013 - 23:22

Дано: страница http://урл-магазина/products/, то есть - отображение всех товаров в магазине.

Нужно: вывести фильтр как в страницах категорий. 

Костыль знаю - сделать отдельную категорию "Все товары". Но наверняка можно как-то проще?



#2 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 21.04.2013 - 23:35

Дано: страница 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);
}

 

Вроде все. Должно работать.



#3 Kasha

Kasha

    Поддержка пользователей

  • Администратор
  • 1 690 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 22.04.2013 - 01:12

Нокс готовый файлик цепляй чтобы можно было посмотреть в случае ошибок - очень удобное дело.



#4 Noxter

Noxter
  • Забаненый
  • 1 сообщений
  • Дизайн, Программирование, Верстка
  • Версия CMS:2.x
  • Откуда:Киев

Опубликовано 22.04.2013 - 08:29

Нокс готовый файлик цепляй чтобы можно было посмотреть в случае ошибок - очень удобное дело.

Обойдутся, пусть практикуют. Уж очень много ленивых развелось.



#5 Bogus

Bogus
  • Пользователь
  • 1 сообщений
  • Дизайн, Программирование
  • Версия CMS:2.x

Опубликовано 15.06.2015 - 14:41

Добрый день.

 

судя по дате, пост сильно устарел. можно ли обновить как то на актуальный момент? 

 

и если можно то не с № строки по № строки а хотя бы куском кода как начинается и как заканчивается. я не ленивый но после даже одного модуля, файл у меня явно имеет другую нумерацию.

 

 

Буду вам безгранично благодарен за обновление поста =)

 

 

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

Изменено: Bogus, 15.06.2015 - 15:40


#6 Maksclub

Maksclub
  • Фрилансер
  • 1 398 сообщений
  • Дизайн, Программирование, Верстка, Заказчик, Пользователь
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 10.02.2017 - 11:23

В шаблон products.tpl в самом верху вставьте такой код:


 

Вроде все. Должно работать.

 

Все работает, а как еще и бренды вывалить сюда? То есть чтобы сортировка шла по брендам и свойствам



#7 aroman80

aroman80
  • Пользователь
  • 30 сообщений
  • Пользователь
  • Версия CMS:2.x
  • Откуда:Марс

Опубликовано 06.02.2018 - 00:13

если удалить

if(!empty($category))

то и так выводится в /products



#8 WebWC

WebWC
  • Пользователь
  • 6 сообщений
  • Дизайн, Программирование, Верстка, SEO
  • Версия CMS:2.x
  • Откуда:Москва

Опубликовано 15.08.2018 - 18:32

Господа, а кто нибудь может помочь с 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} 


#9 megauser

megauser
  • Пользователь
  • 127 сообщений
  • Дизайн, Заказчик, Пользователь
  • Откуда:Россия

Опубликовано 26.03.2020 - 09:23

Господа, а кто нибудь может помочь с 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} 

 

Та же самая проблема, фильтр работает, но значения в селекты включаются, сбросить значение не выходит






0 пользователей читают эту тему

0 пользователей, 0 гостей, 0 скрытых