Перейти к содержанию
Официальный форум поддержки Simpla

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


Рекомендуемые сообщения

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 2 года спустя...

Добрый день.

 

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

 

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

 

 

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

 

 

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
Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

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


 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 11 месяцев спустя...
  • 6 месяцев спустя...

Господа, а кто нибудь может помочь с 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} 
Ссылка на сообщение
Поделиться на другие сайты
  • 1 год спустя...

 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...