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


Движки. Довесок к штатному фильтру.


  • Вы не можете ответить в тему
Сообщений в теме: 7

#1 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 16 March 2014 - 05:10 AM

Довесок к штатному фильтру. Добавляет в настройку фильтра в категории еще один вариант показа - движки задания диапазона.

Спонсор: Lenivec


Краткое описание:
-----------------

- работает с обоими видами характеристик - заданных и набором вариантов, и произвольной строкой.

- минимальное/максимальное значение диапазона находится автоматически путем перебора характеристик, имеющихся у товаров текущей категории.
т.к. характеристики штатно текстовые, то в число они преобразоуются следующим образом - убираются все пробелы, запятые меняются на точки, затем полученная строка преобразуется во float.
Из "1 234 см." получится 1234, из "2345,67об/мин" получится 2345.67 и т.п.
Соответственно, задавать тип фильтра "слайдер" для чисто текстовых (буквенных) характеристик совершенно бессмысленно.

- аналогичным образом происходит и фильтрация. Если не стоит галка "не важно", то при проверке товара на соответствие
он считается прошедшим фильтр если эта его характеристика (преобразованная во float) попадает в заданный диапазон.
В случае нескольких заданных товару вариантов характеристики - если попадает хотя бы одна.

- ну и до кучи цена тоже движками с изначальным min-max исходя из цен имеющихся в категории и подкатегориях товаров.

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

Установка:
----------

1. копируем filter.tpl.html поверх штатного в /core/tpl/user/[шаблон]/blocks/


2. В head.tpl.html вписываем линки на jquery и jquery-ui, если они еще не вписаны


<link rel="stylesheet" type="text/css" href="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/themes/base/jquery-ui.css">
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7/jquery.min.js"></script>
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jqueryui/1.8/jquery-ui.min.js"></script>



3. в файле advanced_search_in_category.php

3.1 перед


foreach( $options as $option ){


вставляем


# BEGIN filter-slider
$addonStock = (CONF_CHECKSTOCK == 1 && CONF_SHOW_NULL_STOCK == 1)?' AND in_stock > 0 ':'';
$catIDs = catGetSubCategories($_GET["categoryID"]);
$addonCat = (string)$_GET["categoryID"];
foreach ($catIDs as $catID) $addonCat .= ','.$catID;
$data = db_query("SELECT productID FROM ".CATEGORIY_PRODUCT_TABLE." WHERE categoryID IN($addonCat)");
$addPrd = array();
while ($row = db_fetch_assoc($data)) $addPrd[] = $row['productID'];
$addon = "$addonStock AND ".(empty($addPrd)?"categoryID IN ($addonCat)":"(categoryID IN($addonCat) OR productID IN(".implode(',',$addPrd)."))");
$row = db_fetch_assoc(db_query("SELECT MIN(Price) as MinPrice, MAX(Price) as MaxPrice FROM ".PRODUCTS_TABLE." WHERE enabled=1 $addon"));
$smarty->assign( "price_min", floor($row['MinPrice']*$selected_currency_details["currency_value"]));
$smarty->assign( "price_max", ceil($row['MaxPrice']*$selected_currency_details["currency_value"]));
# END filter-slider



3.2 перед


$params[] = $item;


вставляем


# BEGIN filter-slider
elseif ( $set_arbitrarily == 2 )
{
$row = db_fetch_assoc(db_query(
"SELECT MIN(REPLACE(REPLACE(option_value,',','.'),' ','')+0.0) AS min,
MAX(REPLACE(REPLACE(option_value,',','.'),' ','')+0.0) AS max
FROM ".PRODUCT_OPTIONS_VALUES_TABLE."
JOIN ".PRODUCTS_TABLE." USING (productID)
WHERE optionID=".$option['optionID']." AND option_type=0 AND option_value>'' AND enabled=1 $addon"));

$row1 = db_fetch_assoc(db_query("
SELECT MIN(REPLACE(REPLACE(option_value,',','.'),' ','')+0.0) AS min,
MAX(REPLACE(REPLACE(option_value,',','.'),' ','')+0.0) AS max
FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos
JOIN ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." USING (variantID)
JOIN ".PRODUCTS_TABLE." USING (productID)
WHERE pos.optionID=".$option['optionID']." AND enabled=1 $addon"));

$item["min"] = floor(min(is_null($row['min'])?$row1['min']:$row['min'],is_null($row1['min'])?$row['min']:$row1['min']));
$item["max"] = ceil(max(is_null($row['max'])?$row1['max']:$row['max'],is_null($row1['max'])?$row['max']:$row1['max']));
$item["min_set"] = isset($getData[$option["optionID"]]["param"][0])?$getData[$option["optionID"]]["param"][0]:$item["min"];
$item["max_set"] = isset($getData[$option["optionID"]]["param"][1])?$getData[$option["optionID"]]["param"][1]:$item["max"];
}
# END filter-slider



4. в файле product_functions.php в функции _testExtraParametrsTemplate

после


if ( $item['set_arbitrarily'] == 1 ){
$valueFromForm = $item["value"];


вставляем


# BEGIN filter-slider
}
elseif ( $item['set_arbitrarily'] == 2 ){
if(!isset($item['value'][2]))
{
$row = db_fetch_assoc(db_query("
SELECT COUNT(*) AS count
FROM ".PRODUCT_OPTIONS_VALUES_TABLE." AS pov
LEFT JOIN ".PRODUCTS_OPTIONS_SET_TABLE." AS pos ON (pos.optionID=pov.optionID AND pos.productID=pov.productID)
LEFT JOIN ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." AS povv ON (povv.variantID=pos.variantID)
WHERE pov.productID=$productID
AND pov.optionID=".$item['optionID']."
AND (pov.option_type=1
AND (REPLACE(REPLACE(povv.option_value,',','.'),' ','')+0.0) >=".$item['value'][0]."
AND (REPLACE(REPLACE(povv.option_value,',','.'),' ','')+0.0) <=".$item['value'][1]."
OR pov.option_type=0
AND (REPLACE(REPLACE(pov.option_value,',','.'),' ','')+0.0) >=".$item['value'][0]."
AND (REPLACE(REPLACE(pov.option_value,',','.'),' ','')+0.0) <=".$item['value'][1].")"));
if ($row['count'] == 0) return false;
else continue;
}
else continue;
# END filter-slider



5. в файле admin.php

5.1 блок (искать по "id='select_arbitrarily1")


if (count($option["variants"]) != 0)
{
?>
<tr><td></td>
<td align="center" valign="middle" class="cssel"><input type="radio" name='select_arbitrarily_<?php
echo $option["optionID"];
?>' id='select_arbitrarily1_<?php


изменяем на (комментируем две строки)


# BEGIN filter-slider
// if (count($option["variants"]) != 0)
// {
# END filter-slider
?>
<tr><td></td>
<td align="center" valign="middle" class="cssel"><input type="radio" name='select_arbitrarily_<?php
echo $option["optionID"];
?>' id='select_arbitrarily1_<?php


5.2 перед


<tr><td></td><td align="center" valign="middle" class="cssel"><input type="radio" name='select_arbitrarily_<?php


вставляем


<!-- BEGIN filter-slider -->
<tr><td></td>
<td align="center" valign="middle" class="cssel"><input type="radio" name='select_arbitrarily_<?php
echo $option["optionID"];
?>' id='select_arbitrarily3_<?php
echo $option["optionID"];
?>'
<?php
if ($option["set_arbitrarily"] == 2)
{
?>
checked
<?php
}
?>
value='2' onclick='Select_arbitrarily_Change_<?php
echo $option["optionID"];
?>()'></td><td colspan="2" align="left" valign="middle" class="toph3"><?php
echo 'Движки (слайдер)';
?></td>
</tr>
<?php
if (count($option["variants"]) != 0)
{
?>
<!-- END filter-slider -->


5.3 блок (искать по "getElementById('select_arbitrarily1")


if (count($option["variants"]) != 0)
{
?>
document.getElementById('select_arbitrarily1_<?php


изменяем на (комментируем две строки)


# BEGIN filter-slider
// if (count($option["variants"]) != 0)
// {
# END filter-slider
?>
document.getElementById('select_arbitrarily1_<?php


5.4 после


document.getElementById('select_arbitrarily1_<?php
echo $option["optionID"];
?>').disabled =!_checked;


вставляем


<!-- BEGIN filter-slider -->
document.getElementById('select_arbitrarily3_<?php
echo $option["optionID"];
?>').disabled =!_checked;
<?php
if (count($option["variants"]) != 0)
{
?>
<!-- END filter-slider -->

Прикрепленные файлы

  • Прикрепленный файл  filter.tpl.html   6.76К   11 Количество загрузок:

  • 2
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#2 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 18 March 2014 - 06:05 PM

Дополнение-исправление (при переходе на следующую страницу выборки фильтра либо смене сортировки "числа движков" пропадали):

В файле category.php в функциях _getUrlToNavigate и _getUrlToSort

вместо


$url .= "&param_".$key;
$url .= "=".$val["param"];


вставляем


# BEGIN filter-slider
#$url .= "&param_".$key;
#$url .= "=".$val["param"];
if (is_array($val["param"])) foreach ($val["param"] as $variant) $url .= "&param_".$key."[]=".$variant;
else $url .= "&param_".$key."=".$val["param"];
# END filter-slider

  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#3 aga1603

    Новичок

  • Download User
  • Pip
  • 8 сообщений
Репутация: 0
Начинающий
  • ГородМосква

Отправлено 13 May 2014 - 05:27 PM

Здравствуйте, Дмитрий. Очень полезное дополнение с штатному фильтру. Его плюс в том что значения он работает с характеристиками введенными в ручную. Ранее устанавливал Ваш расширенный фильтр, тоже отличная вещь, но к сожалению работает только с значениями заданными в виде вариантов характеристик. У меня к Вам вопрос следующий: возможно ли доработать этот "довесок к штатному фильтру" так, чтобы была еще возможность выбрать чекбоксы или селекты для вручную введенных характеристик с возможностью выбора в админки в редактирование категории? Это полезно для текстовых и прочих характеристик.
  • 0

#4 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 13 May 2014 - 06:11 PM

возможно ли доработать этот "довесок к штатному фильтру" так, чтобы была еще возможность выбрать чекбоксы или селекты для вручную введенных характеристик с возможностью выбора в админки в редактирование категории?

Возможно. Тезисы:
1. Если нужны чекбоксы в стиле "выбирается только один" (как селект и радиобаттоны), то это просто, т.к. смена оформления и не более того.
2. Если нужны нормальные чекбоксы, т.е. можно выбрать несколько вариантов хар-ки, то это сложнее, но тоже решаемо. Только надо помнить, что штатный фильтр либо ищет по характеристикам, введенным вручную (при выборе "произвольной строки"), либо по заданным вариантам характеристик. Одновременно по ВСЕМ характеристикам товара (и вписанным строкой, и заданым вариантами) штатный фильтр не ищет. Т.е. при чекбоксах будут проигнорированы характеристики, вписанные строкой.
3. Если надо искать и так, и этак, то это тоже решаемо, но еще сложнее. Отсюда пляшет цена каждого решения.

Короче, можно либо меня нанять (это не дешево), либо подождать, пока у меня будет свободное время и я окончательно (?) доделаю бесплатный "Развесистый фильтр". Я его уже начал доделывать, причесал и заметно оптимизировал (писался-то он три года назад), но ядро осталось то же самое. В планах сделать так, чтобы:
1. список вариантов выбора составлялся не только из вариантов характеристик, но и из заданных в товарах строк.
2. (как следствие) поиск товаров происходил не только по заданным вариантам, но и по заданным строкам.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#5 aga1603

    Новичок

  • Download User
  • Pip
  • 8 сообщений
Репутация: 0
Начинающий
  • ГородМосква

Отправлено 03 August 2015 - 06:24 PM

возможно ли доработать этот "довесок к штатному фильтру" так, чтобы была еще возможность выбрать чекбоксы или селекты для вручную введенных характеристик с возможностью выбора в админки в редактирование категории?

Возможно. Тезисы: 1. Если нужны чекбоксы в стиле "выбирается только один" (как селект и радиобаттоны), то это просто, т.к. смена оформления и не более того. 2. Если нужны нормальные чекбоксы, т.е. можно выбрать несколько вариантов хар-ки, то это сложнее, но тоже решаемо. Только надо помнить, что штатный фильтр либо ищет по характеристикам, введенным вручную (при выборе "произвольной строки"), либо по заданным вариантам характеристик. Одновременно по ВСЕМ характеристикам товара (и вписанным строкой, и заданым вариантами) штатный фильтр не ищет. Т.е. при чекбоксах будут проигнорированы характеристики, вписанные строкой. 3. Если надо искать и так, и этак, то это тоже решаемо, но еще сложнее. Отсюда пляшет цена каждого решения. Короче, можно либо меня нанять (это не дешево), либо подождать, пока у меня будет свободное время и я окончательно (?) доделаю бесплатный "Развесистый фильтр". Я его уже начал доделывать, причесал и заметно оптимизировал (писался-то он три года назад), но ядро осталось то же самое. В планах сделать так, чтобы: 1. список вариантов выбора составлялся не только из вариантов характеристик, но и из заданных в товарах строк. 2. (как следствие) поиск товаров происходил не только по заданным вариантам, но и по заданным строкам.


Здравствуйте, Дмитрий.
Хочу поинтересоваться, Вы случайно не доделали "развесистый фильтр" с возможностью выбора значений характеристик из заданных в товарах строк?
  • 0

#6 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 03 August 2015 - 06:49 PM

Хочу поинтересоваться, Вы случайно не доделали "развесистый фильтр" с возможностью выбора значений характеристик из заданных в товарах строк?

Нет. И уже не буду, т.к. в общем случае считаю идеологически неправильным, а лично мне оно не надо.
Так что только если под заказ за деньги.

PS. Куда правильнее ОДИН РАЗ автоматически преобразовать произвольные строки в варианты. Редко когда набор значений настолько случаен и разнообразен (у каждого товара свое значение), что держать его в виде набора вариантов не рационально, слишком много вариантов.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#7 aga1603

    Новичок

  • Download User
  • Pip
  • 8 сообщений
Репутация: 0
Начинающий
  • ГородМосква

Отправлено 03 August 2015 - 07:06 PM

Хочу поинтересоваться, Вы случайно не доделали "развесистый фильтр" с возможностью выбора значений характеристик из заданных в товарах строк?

Нет. И уже не буду, т.к. в общем случае считаю идеологически неправильным, а лично мне оно не надо.
Так что только если под заказ за деньги.

PS. Куда правильнее ОДИН РАЗ автоматически преобразовать произвольные строки в варианты. Редко когда набор значений настолько случаен и разнообразен (у каждого товара свое значение), что держать его в виде набора вариантов не рационально, слишком много вариантов.


один раз автоматически преобразовать при помощи модуля "Расширенное управление характеристиками товаров 1.1"?
Прикрепленный файл  extra_features_v1.0.jpg   107.63К   16 Количество загрузок:
  • 0

#8 badisoft

    Продвинутый пользователь

  • Assistent vsupport.club
  • PipPipPip
  • 5075 сообщений
Репутация: 786
Мастер

Отправлено 03 August 2015 - 07:16 PM

один раз автоматически преобразовать при помощи модуля "Расширенное управление характеристиками товаров 1.1"?

Логичнее не меня спрашивать, что делает (и что сделает) модуль, а автора модуля - micehide.
Я написал себе безинтерфейсный конвертер, который копируется в core/admin/, отрабатывает при входе в админку и сам себя удаляет.
Классическая ситуация, когда написать самому проще, быстрее, надежнее, и "именно то, что надо".
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)