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


[дополнение] автоматически создаем набор характеристик для штатного фильтра


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

#1 badisoft

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

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

Отправлено 27 August 2016 - 11:53 AM

Дополнение позволяет не задавать набор характеристик для фильтра в каждой категории, что утомительно.
Набор характеристик и вариантов (в случае выбора вариантов) создается автоматически исходя из характеристик и вариантов, имеющихся у товаров текущей и дочерних категорий.

В админке дополнения (модуль "Фильтр") можно задать вид характеристики:
- не показывать
- произвольная строка
- варианты

Прикрепленный файл  filter.jpg   70.78К   42 Количество загрузок:

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


1. копируем файлы

recursivecat_functions.php -> /core/functions/
addon.php -> core/includes/admin
modules_filter.php -> core/includes/admin/sub/
modules_filter.tpl.html -> core/tpl/admin/

Файл addon.php нужен ОДИН РАЗ для создания в таблицах новых полей.
После первого же захода в админку его можно удалить, если он не удалился сам.

2. в файле default.tpl.html перед строкой


<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></div>


вставляем


{* BEGIN автоопределение характеристик для фильтра *}
<div class="marg"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=filter">Фильтр</a></div>
{* END автоопределение характеристик для фильтра *}



3. в файле core/tpl/admin/menu.tpl.html перед строкой


<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=yandex">{$smarty.const.ADMIN_STRING_YANDEX}</a></td></tr></table>


вставляем


{* BEGIN автоопределение характеристик для фильтра *}
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="{$smarty.const.ADMIN_FILE}?dpt=modules&amp;sub=filter">Фильтр</a></td></tr></table>
{* END автоопределение характеристик для фильтра *}



4. в файле core/includes/admin/modules.php перед строкой


array("id"=>"yandex", "name"=>"Яндекс.Маркет" )


вставляем


# BEGIN автоопределение характеристик для фильтра
array("id"=>"filter", "name"=>"Фильтр"),
# END автоопределение характеристик для фильтра



5. в файле admin.php в двух местах перед строкой


<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="<?php echo ADMIN_FILE; ?>?dpt=modules&amp;sub=yandex"><?php


вставляем


<!-- BEGIN автоопределение характеристик для фильтра -->
<table class="adn topj"><tr><td><img src="data/admin/drs.gif" alt=""></td><td width="100%"><a href="<?php echo ADMIN_FILE; ?>?dpt=modules&amp;sub=filter">
<?php echo "Фильтр"; ?>
</a></td></tr></table>
<!-- END автоопределение характеристик для фильтра -->



------------------

После всего этого в админке в разделе "Модули" появится новый модуль "Фильтр".
Уровень доступа к этому модулю "Общие настройки" (это для тех, у кого кроме админов с полным доступом и клиентов есть еще пользователи с разными уровнями доступа в админке).


6. В файле option_functions.php

6.1. в функции optGetOptionscat в самое начало вставляем


# BEGIN автоопределение характеристик для фильтра
if (CONF_FILTER_ENABLE)
{
$data = db_query("SELECT name, optionID, filter FROM ".PRODUCT_OPTIONS_TABLE." ORDER BY sort_order, name");
$all_options = array();
$all_options2 = array();
while($row = db_fetch_assoc($data))
{
$all_options[] = $row;
$all_options2[$row['optionID']] = $row;
}
$cats = implode(',',recursiveCat($categoryID));
$data = db_query("SELECT productID FROM ".CATEGORIY_PRODUCT_TABLE." WHERE categoryID IN ($cats)");
while ($row = db_fetch_assoc($data)) $prd[] = $row['productID'];
$addonCat = $prd?"(categoryID IN ($cats) OR productID IN (".implode(",",$prd)."))":"categoryID IN ($cats)";
$data = db_query("SELECT DISTINCT optionID, option_type FROM ".PRODUCT_OPTIONS_VALUES_TABLE."
JOIN ".PRODUCTS_TABLE." USING(productID)
WHERE $addonCat AND (LENGTH(option_value)>0 OR option_type=1)");
$oID = array();
while($row = db_fetch_assoc($data))
{
if(!$all_options2[$row['optionID']]['filter']) continue;
if ($row['option_type'] == 1)
{
list($count) = db_fetch_row(db_query("SELECT COUNT(variantID) FROM ".PRODUCTS_OPTIONS_SET_TABLE."
JOIN ".PRODUCTS_TABLE." USING(productID)
WHERE $addonCat AND optionID=".$row['optionID']));
if (!$count) continue;
}
$oID[$row['optionID']] = $row;
}
$options = array();
foreach ($all_options as $option) if (isset($oID[$option['optionID']])) $options[] = $option;
return $options;
}
# END автоопределение характеристик для фильтра



7. В файле search_function.php

7.1. в функции schGetVariantsForSearch в самое начало вставляем


# BEGIN автоопределение характеристик для фильтра
if (CONF_FILTER_ENABLE)
{
$cats = implode(',',recursiveCat($categoryID));
$data = db_query("SELECT productID FROM ".CATEGORIY_PRODUCT_TABLE." WHERE categoryID IN ($cats)");
while ($row = db_fetch_assoc($data)) $prd[] = $row['productID'];
$addonCat = $prd?"(categoryID IN ($cats) OR productID IN (".implode(",",$prd)."))":"categoryID IN ($cats)";
$data = db_query("SELECT DISTINCT variantID FROM ".PRODUCTS_OPTIONS_SET_TABLE."
JOIN ".PRODUCTS_TABLE." USING(productID)
WHERE $addonCat AND optionID=$optionID");
$vID = array();
while($row = db_fetch_assoc($data)) $vID[$row['variantID']] = $row;
$data = db_query("SELECT option_value, variantID FROM ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." ORDER BY sort_order");
$variants = array();
while($row = db_fetch_assoc($data)) if (isset($vID[$row['variantID']])) $variants[] = $row;
return $variants;
}
# END автоопределение характеристик для фильтра


7.2. в функции schOptionsAreSetToSearch в самое начало вставляем


# BEGIN автоопределение характеристик для фильтра
if (CONF_FILTER_ENABLE)
{
$data = db_query("SELECT optionID, filter FROM ".PRODUCT_OPTIONS_TABLE);
$type = array();
while($row = db_fetch_assoc($data)) $type[$row['optionID']] = $row['filter'];
$set_arb = array();
foreach ($options as $option) $set_arb[$option['optionID']] = $type[$option['optionID']]==2?'0':'1';
return $set_arb;
}
# END автоопределение характеристик для фильтра

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


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

#2 antaNT

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

  • Download User
  • PipPipPip
  • 33 сообщений
Репутация: 1
Начинающий

Отправлено 06 September 2016 - 11:51 AM

А может подскажете, для вашего AJAX фильтра - как это задействовать применить
  • 0

#3 badisoft

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

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

Отправлено 06 September 2016 - 01:26 PM

А может подскажете, для вашего AJAX фильтра - как это задействовать применить

Что "задействовать применить"?
Мой AJAX-фильтр и так автоматически строит набор характеристик.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#4 antaNT

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

  • Download User
  • PipPipPip
  • 33 сообщений
Репутация: 1
Начинающий

Отправлено 06 September 2016 - 01:29 PM

понравился именно вид/представление
список/отключение

  • 0