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


Делаем развесистый фильтр товаров (обкатка, написание, дополнения)


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

#141 badisoft

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

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

Отправлено 20 June 2012 - 09:58 PM

2)fetch/wget со своего сервака по крону (грубо говоря запускаеш скрипт от себя) 3)cronjobs.ru и подобные сервисы

Т.е. штатного решения в чистом PHP нет напрочь?

У этой же характеристики можно еще значения сделать "Акция", "Распродажа" и т.д.

Думаю, что акции "Акция", "Распродажа" и подобные, предполагающие максимальную заметность врядли стоит скромно прятать в фильтр.
Не для того оно, как мне кажется.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#142 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 21 June 2012 - 09:46 AM

Т.е. штатного решения в чистом PHP нет напрочь?

нет, так как в php нет своего крона
  • 0
Изображение Изображение Изображение

#143 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 21 June 2012 - 09:48 AM

нет, так как в php нет своего крона

Так по-моему на каждом хостинге свой крон.
  • 0

#144 eugene_wb

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

  • Модераторы
  • 827 сообщений
Репутация: 167
Мастер

Отправлено 21 June 2012 - 09:58 AM

Так по-моему на каждом хостинге свой крон.

да, но мы чейчас имеем ввиду только

штатного решения в чистом PHP


  • 0
Изображение Изображение Изображение

#145 badisoft

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

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

Отправлено 21 June 2012 - 10:22 AM

Так по-моему на каждом хостинге свой крон.

Это понятно. А вот можно ли ему дать новое задание чисто из PHP? Как я понимаю - нет.

Хотя.... О! Утро вечера точно мудренее :).
"Парсер товаров" работает же по крону, надо там посмотреть, как он это делает.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#146 yura

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

  • Assistent vsupport.club
  • PipPipPip
  • 82 сообщений
Репутация: 0
Начинающий

Отправлено 21 June 2012 - 11:57 AM

Думаю, что акции "Акция", "Распродажа" и подобные, предполагающие максимальную заметность врядли стоит скромно прятать в фильтр.
Не для того оно, как мне кажется.

Мне кажется, что поместить в фильтр - это дать возможность покупателю отобрать товары с данной характеристикой, а не спрятать ))
А для привлечения винмания к акции можно, используя эту характеристику, добавлять на фото товара соответствущие надписи - как в спецпредложениях.
  • 0

#147 badisoft

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

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

Отправлено 21 June 2012 - 07:16 PM

В общем, после обдумывания мне еще более уверенно кажется, что надо сделать характеристику с названием а-ля "Спецвыбор", у которой будут опции (чекбоксы) "Новинка", "Распродажа", "Суперцена" и прочие, как либо выделяющие конкретный товар из общего списка. А включение-выключение этих опций у каждого товара делать отдельным модулем ежесуточно по крону и/или модулем в админке. Таким образом удастся и на елку влезть, и не уколоться. Т.е. и конечная задача будет решена, и фильтр ни на йоту не увеличит расход ресурса.

PS. Ну а пока ни админ-модуля, ни модуля для крона нет - ручками, ручками, в свойствах товара :).

"Парсер товаров" работает же по крону, надо там посмотреть, как он это делает.

Облом :).
Надо его вписывать в конфиг крона.
*/2 * * * * /usr/bin/php parser_cron.php > core/temp/cron.log
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#148 yura

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

  • Assistent vsupport.club
  • PipPipPip
  • 82 сообщений
Репутация: 0
Начинающий

Отправлено 23 June 2012 - 01:52 PM

Последнюю версию фильтра пока не ставил, а в процессе работы с предыдущей обнаружил небольшой баг.
Посмотрите - выбираю одного производителя и два размера. В отфильтрованные попадают товары у которых другой производитель и есть эти два размера одновременно. Для примера привожу ссылку (первых двух товаров в выборке не должно быть, так как Производитель у них другой)
http://belgoods.ru/i...h_in_category=1
  • 0

#149 badisoft

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

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

Отправлено 23 June 2012 - 02:07 PM

А если выбирать не два размера, а один, то все нормально? Если да, то этот баг я знаю. Толи изначально что-то недосмотрел (что врядли, т.к. работало), толи привнес при добавлении выбора типа поля - чекбоксы или строка. Если у товара есть БОЛЬШЕ ОДНОЙ опции в рамках одной характеристики (например, несколько разных размеров) и в фильтре у этой характеристики выбрать не одну опцию, а больше, то фильтр сработает неправильно. Находится этот баг в функции _testExtraParametrsTemplate и у меня все не доходят руки его исправить.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#150 yura

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

  • Assistent vsupport.club
  • PipPipPip
  • 82 сообщений
Репутация: 0
Начинающий

Отправлено 23 June 2012 - 02:09 PM

Если один размер выбираю, то всё нормально работает.
  • 0

#151 badisoft

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

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

Отправлено 23 June 2012 - 02:11 PM

PS. Да, это оно. У Вас в результат попадают товары, которые НЕ Лакби, но имеют ОБА размера и Лакби, которые имеют ОДИН из заданных размеров. И НЕ ПОПАДАЮТ Лакби, которые имеют ОБА размера. Надеюсь, скоро исправлю.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#152 badisoft

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

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

Отправлено 24 June 2012 - 01:11 PM

Надеюсь, разобрался с логикой. Исправленная функция _testExtraParametrsTemplate:

function _testExtraParametrsTemplate( $productID, &$template ){

$variants = array();
$string = array();
foreach( $template as $key => $item )
if((string)$key <> "categoryID" && isset($item["optionID"]))
{
$variants[(int)$item["optionID"]][] = $item['value'];
if (isset($item['filter_string']))
$string[(int)$item["optionID"]] = $item['filter_string'];
}

if (!$count = count($variants)) return true;

$filter = array();
foreach( $variants as $key => $item )
{
if (isset($string[$key]) && $string[$key] == '1')
$filter[] = "pos.optionID=".$key." AND povv.option_value LIKE '%".$item[0]."%'";
else
$filter[] = "pos.optionID=".$key." AND pos.variantID IN (".implode(",",$item).")";
}
$row=db_fetch_row(db_query("SELECT count(DISTINCT pos.optionID) AS count FROM ".PRODUCTS_OPTIONS_SET_TABLE." AS pos
LEFT JOIN ".PRODUCTS_OPTIONS_VALUES_VARIANTS_TABLE." AS povv USING (variantID)
WHERE productID=".$productID. " AND (".implode(" OR ",$filter).")"));
if($row['count'] == $count) return true;
return false;
}


Относительно последней версии функции изменен count(*) на count(DISTINCT pos.optionID) в SQL-запросе.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#153 Den

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

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 24 June 2012 - 02:19 PM

badisoft, огромный респект тебе за твою работу!
Был очень поражен простотой установки ЧПУ-модуля, особенно сравнивая с его реализациями от других разработчиков, у которых для установки приходилось перелопачивать кучу файлов и нескончаемо бороться с багами - а здесь практически в 2 клика и все работает.
Сейчас вот пытаюсь на тестовом сайте прикрутить "развесистый фильтр", однако то ли что-то недоглядел то ли накосячил где-то - все сделал по инструкции, кроме пунктов об изменении product-brief и product_detailed (при добавлении условия что в одном что в другом файле - характеристики в описаниях товаров не отображаются). Но самое главное, в фильтре не появилось ни одной характеристики, кроме слайдера с ценами.
В админке с статистике ошибок появляется следующее:
---
ERROR: 1054:Unknown column 'template' in 'field list'
Sql: SELECT template
								FROM eugh_categories
								WHERE categoryID=5
								LIMIT 1
Link: /category_5.html
Date: 24.06.12 - 15:49:52
Dump:
array(1) {
  ["categoryID"]=>
  int(5)
}
array(0) {
}
---

Подскажите, куда рыть?
  • 0

#154 badisoft

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

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

Отправлено 24 June 2012 - 05:43 PM

Происходит исполнение SQL-запроса "SELECT template FROM eugh_categories WHERE categoryID=5 LIMIT 1",
после чего SQL-сервер сообщает об ошибке "ERROR: 1054:Unknown column 'template' in 'field list' "
т.е. о том, что в списке полей таблицы eugh_categories нет поля template.


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

В файле category.php закомментируйте или удалите этот запрос, но это лишь уберет эту ошибку доступа к несуществующему полю, не более того.

PS. можно сделать и по другому, для чистоты. Возьмите старый не правленый category.php и
в функциях _getUrlToNavigate и _getUrlToSort
добавьте (там довольно очевидно куда - в блок аналогичных строк)
[/php]
if ( isset($_GET["old_search_price_from"]) )
$url .= "&old_search_price_from=".$_GET["old_search_price_from"];
if ( isset($_GET["old_search_price_to"]) )
$url .= "&old_search_price_to=".$_GET["old_search_price_to"];
[php]
Это все отличие category.php от штатного. Да и оно относится к сохранению значений диапазона цен, на сам фильтр не влияет.

PPS. Где-то я накосячил в инструкции к последней версии. БУду разбираться.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#155 badisoft

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

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

Отправлено 24 June 2012 - 07:04 PM

Update: я переписал инструкцию.
В основном я удалил часть "готовых" файлов и внес описание требуемых изменений в инструкцию, но нашел и пару ляпов в ней.

PS. Поставил по этой инструкции фильтр на свой рабочий сайт, где стояла очень старая версия без всех этих фишек. Все нормально поставилось и работает.
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#156 badisoft

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

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

Отправлено 25 June 2012 - 01:25 AM

Сделал "Фильтр номер три", с выпадающими списками а-ля "штатный фильтр". Простейший, чисто для примера. Смотреть там же - http://cpu.badisoft.ru/BookReaders/
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#157 fractala

    Пользователь

  • Download User
  • PipPip
  • 14 сообщений
Репутация: 0
Начинающий

Отправлено 25 June 2012 - 05:23 PM

badisoft-огромно спасибо за проделанную работу!
а вот только хотел спросить про фильтр с выпадающими

а где скачать фильтр №3? на сайте не нашел
  • 0

#158 badisoft

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

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

Отправлено 25 June 2012 - 07:00 PM

а где скачать фильтр №3? на сайте не нашел

Хм... А остальные фильтры (номер один и номер два) Вы где скачивали?

PS. "Фильтр номер три" - это не отдельный маленький модуль, это блок (!), подключаемый в админке как "подключить блок из файла". Он не работает сам по себе, а является довеском к основному фильтру, названному "Развесистый фильтр".

PPS. Собственно, если Вам нужен только (!) фильтр с выпадающими, то - сюрпрайз! - посмотрите на штатный фильтр, он именно такой.

Был очень поражен простотой установки ЧПУ-модуля, особенно сравнивая с его реализациями от других разработчиков, у которых для установки приходилось перелопачивать кучу файлов и нескончаемо бороться с багами - а здесь практически в 2 клика и все работает.

Оффтопик, конечно, но утверждение неверно. "Перелопачивать кучу файлов" правильнее, раз уж разработчик не удосужился сделать нормальный ЧПУ-вариант ссылок в своем продукте. Изменяется логика выдачи ссылок, но практически не требуется дополнительного ресурса для получения ЧПУ из неЧПУ. У меня использована совершенно другая идея - не в коде исправлять, а, образно говоря, брать уже готовый результат с неЧПУ ссылками и подменять их на ЧПУ. При клике подменять обратно. Это по коду значительно проще, но требует дополнительного ресурса и накладывает некоторое количество ограничений "тут можно подменить, тут не получится, а тут получится, но кривовато...". Каждый выбирает для себя. Мне понравилась идея (использованная в LiteSEOtools, я его купил и препарировал) и я написал свой модуль, использую его на всех своих сайтах, но до сих пор считаю, что "надстройка вместо исправления" - это простой, но неверный путь.

fetch/wget со своего сервака по крону (грубо говоря запускаеш скрипт от себя)

Пришла идея, что можно проще.
xxx.php запихать в core/includes.
В xxx.php сделать проверку флага любого вида и если "ой, мы сегодня еще не выполнялись", то обновить состояние связей товар<->характеристика "Новинки". Ну и/или остального примерно так же - по своему флагу "надо обновить состояние".
Получаем, что если никто неделю на сайт не заходил, то ничего и не делается, но при ПЕРВОМ ЖЕ зашедшем генерится новое состояние Акций, Новинок, Суперпредложений и прочего выделения товаров из общей массы.

Смутно, конечно, но, думаю, идея понятна :).
  • 0
http://cpu.badisoft.ru (тестовый сайт), http://badisoft.ru (модули)

#159 Den

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

  • Assistent vsupport.club
  • PipPipPip
  • 117 сообщений
Репутация: 0
Начинающий

Отправлено 28 June 2012 - 11:56 AM

Update: я переписал инструкцию. В основном я удалил часть "готовых" файлов и внес описание требуемых изменений в инструкцию, но нашел и пару ляпов в ней. PS. Поставил по этой инструкции фильтр на свой рабочий сайт, где стояла очень старая версия без всех этих фишек. Все нормально поставилось и работает.


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

P.S. Ни в статистике ошибок магазина ни в логах ошибок на сервере ничего нет.
  • 0

#160 R.Sergey

    Администратор

  • Администраторы
  • 2810 сообщений
Репутация: 332
Мастер

Отправлено 28 June 2012 - 03:33 PM

Правильно ли я понял, что в админке в характеристиках "Возможные значения" заполнять не надо

Возможные значения заполнять надо.... кроме того нужно добавить характеристики к товару. Фильтр берет характеристики из товаров а не из воздуха
  • 0