[2.3.6] Множественное значение фильтра (мультифильтр)

Доработка позволяет фильтровать товары по множественным свойства товара.

К примеру в интернет магазинах одежды и обуви часто требуется отфильтровать товары по нескольким параметрам фильтра одновременно, как вариант цвет: синий, черный, белый, размер: XL, L, S.

 

Приступим.

1. В файле api/Products.php в 107-й строке (функция get_products) замените:

$features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM s_options WHERE feature_id=? AND value=? ) ', $feature, $value);

вот на этот код:

$features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM s_options WHERE feature_id=? AND value in (?@) ) ', $feature, $value);

 

2. В файле api/Products.php в 198-й строке (функция count_products) замените:

$features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM s_options WHERE feature_id=? AND value=? ) ', $feature, $value);

на вот этот код:

$features_filter .= $this->db->placehold('AND p.id in (SELECT product_id FROM s_options WHERE feature_id=? AND value in (?@) ) ', $feature, $value);

 

 

3. В файле api/Features.php в 176-й строке (функция get_options) замените:

$features_filter .= $this->db->placehold('AND (po.feature_id=? OR po.product_id in (SELECT product_id FROM s_options WHERE feature_id=? AND value=? )) ', $feature, $feature, $value);

на вот этот код:

$features_filter .= $this->db->placehold('AND (po.feature_id=? OR po.product_id in (SELECT product_id FROM s_options WHERE feature_id=? AND value in (?@) )) ', $feature, $feature, $value);

 

4. В файле view/ProductsView.php после 72-й строки добавьте:

$filter['features'] = array();

 

Далее на строке 77 замените код:

if(($val = strval($this->request->get($feature->id)))!='')
	$filter['features'][$feature->id] = $val;

на этот:

if(($val = $this->request->get($feature->id))!='')
	$filter['features'][$feature->id] = $val;

 

Далее после 108-й строки пропишите:

$this->design->assign('filter_features', $filter['features']);

 

5. В файле design/папка вашего шаблона/html/products.tpl вместо кода:

{if $features}
<table id="features">
	{foreach $features as $key=>$f}
	<tr>
	<td class="feature_name" data-feature="{$f->id}">
		{$f->name}:
	</td>
	<td class="feature_values">
		<a href="{url params=[$f->id=>null, page=>null]}" {if !$smarty.get.$key}class="selected"{/if}>Все</a>
		{foreach $f->options as $o}
		<a href="{url params=[$f->id=>$o->value, page=>null]}" {if $smarty.get.$key == $o->value}class="selected"{/if}>{$o->value|escape}</a>
		{/foreach}
	</td>
	</tr>
	{/foreach}
</table>
{/if}

пропишите вот этот:

{if $features}
<form method="get" action="{url page=null}">
	<table id="features">
		{foreach $features as $f}
		<tr>
			<td class="feature_name" data-feature="{$f->id}">
				{$f->name}:
			</td>
			<td class="feature_values">
				<ul>
					{foreach $f->options as $k=>$o}
					<li style="list-style:none;float:left;margin-right:15px;">
						<label>
							<input type="checkbox" name="{$f->id}[]" onchange="submit(this.form);" {if $filter_features.{$f->id} && in_array($o->value,$filter_features.{$f->id})}checked="checked"{/if} value="{$o->value|escape}" />{$o->value|escape}
						</label>
					</li>
					{/foreach}
				</ul>
			</td>
		</tr>
		{/foreach}
	</table>
</form>
{/if}

Все готово!

Внедряем себе на сайт и отписываемся в комментариях.



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





Всего 24 комментария

  1. Andrey Spikelan
    #1

    Просто круто! спасибо огромное!!! Даже у такого тупого как я, не знающего ничего в пхп все работает.

  2. Noxter
    #2

    Andrey Spikelan, всегда пожалуйста! 

     

  3. #3

    Здравствуйте. Вы не могли бы уточнить по поводу: "Далее на строке 77 замените код:", "Далее после 108-й строки пропишите:" и "после 72-й строки добавьте:" - какой код изначально был на этих строках. Дело втом, что этот файл у меня уже редактировался и исходные куски кода сместились с этих позиций.

  4. Noxter
    #4

    LevTornado, возьмите оригинальный код симплы версии 2.3.6 и сравните, далее подставляйте код в свой файл в нужные строки.

     

  5. #5

    Добрый день!

     

    Сколько будет стоить прикрутить цену к фильтру плюс кнопку сброса. Отпишитесь на почту пожалуйста!

  6. Noxter
    #6

    LevTornado, отписался и все еще жду ответа D83DDE10

     

  7. #7

    Скажите, а как сюда возможно добавить дополнительно фильтровать по вариантам?

  8. Noxter
    #8

    LevTornado, никак потому как фильтра по вариантам в симпле нет.

    Если нужна индивидуальная доработка, то за небольшую плату могу сделать.

     

  9. lentalux
    #9

    Поставил, но пока не понял как пользоваться..Изменений не вижу.

  10. Noxter
    #10

    lentalux, значит что то упустили, скорее всего не вносили изменения в products.tpl, также рекомендую почистить папку compiled.

     

  11. encore24
    #11

    Кто подскажет фильтрует ли данный фильтр (прошу прощения за тафталогию) варианты товара?

  12. Noxter
    #12

    encore24, к сожалению нет, но Вы всегда можете заказать любое дополнение написав нам в скайп simplacms.

     

  13. Angel
    #13

    что-то не получается.Только делаю первое и сайт падает.

     

  14. Noxter
    #14

    Angel, а не нужно делать "только первое" и проверять работает или нет, нужно выполнить все по пунктам в точности как написано в инструкции, а после уже проверять.

    И откуда у Вас такая логика берется, сделать часть работы и проверять работоспособность? Это как в машине сменить колеса и проверить едет или нет, конечно же не установив двигатель D83DDE06

  15. Angel
    #15

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

  16. founder
    #16

    поставил на локалку, работает, версия 2.1.5

    залил на сервер, в uri добавляет значения для фильтра, но не ищет по ним.

    версия PHP 5.2 стоит на сервере, может надо повысить?

  17. Noxter
    #17

    Zine, повысьте до 5.3

     

  18. founder
    #18

    Noxter, после повышения до 5.3 и даже 5.4, сайт вообще не работает.

    Из-за чего может быть такая разница что на локалке все работает, а на хостинге так лажа?

     

  19. founder
    #19

    Noxter, хотя ранее работало, точно помню. а после устранения хостерами каких-то неполадок на хостинге заметил что перестало.... Заливаю на хостинг сайт 1:1 что на локалке, на локалке работает, а там нет...((

     

  20. Noxter
    #20

    founder, честно без понятия.

    Скорее всего индивидуальная проблема с хостингом.

     

  21. founder
    #21

    Noxter, проблема была на стороне хостеров.

    Может кому понадобится, вот их ответ:

     

    Проблема в использовании квадратных скобок в именах полей форм в сайте и в, похоже, неспособности сайта распознать ситуацию, когда эти квадратные скобки при GET-зпросе передаются в "urlencoded" виде. У Вас в HTML-коде, который отдаёт сайт, например:
    ....
    <form method="get" action="/catalog/zhenskaya-odezhda">
    ....
    <input type="checkbox" name="152[]" id="Adidas" onchange="submit(this.form);" value="Adidas">
    ....
    ну и так далее.
    При использовании таких сомнительных техник, расчитывать на то, что сайт будет нормально работать на любых сборках стандартных web-серверов, как-то странно.
     

     

    Сейчас мы пересобрали один из apache httpd на более новую версию и проблема самоустранилась. При этом стоит отметить, что именно этот apache давно не менялся (не то, что на этой неделе, а вообще несколько лет), поэтому что послужило причиной именно изменения работы сайта сказать крайне затруднительно.

     

  22. Noxter
    #22

    founder, бред какой-то ваша тех. поддержка пишет.

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

    Советую лучше перейти на timeweb.

  23. Andrei
    #23

    Здравствуйте. А можно как-то сделать подбирать в фильтре по параметрам через кнопку подобрать? чтобы не сразу фильровало, а только после множественного выбора в фильтре, а потом нажатие кнопки подобрать и уже выводятся все товары с данными параметрами.

  24. Димас
    #24

    Работает на php 7.0?

     

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