Jump to content

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


Recommended Posts

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

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

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

Link to post
Share on other sites

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

 

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

Link to post
Share on other sites

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

Link to post
Share on other sites

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

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

Link to post
Share on other sites
  • 2 years later...

Добрый день.

 

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

 

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

 

 

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

 

 

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 by Bogus
Link to post
Share on other sites
  • 1 year later...

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


 

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

 

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

Link to post
Share on other sites
  • 11 months later...
  • 6 months later...

Господа, а кто нибудь может помочь с 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} 
Link to post
Share on other sites
  • 1 year later...

 

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

 

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

Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...