Jump to content

Recommended Posts

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

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

Сам фильтр при этом, как ни странно, работает, но из-за ошибок очень тормозит и само наличие ошибок меня пугает.

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

Если кто вызовется помочь - скину листинг в личку. Сам не могу в нем разобраться.

 

Вариант со стандартным фильтром от CMS кажется мне вполне подходящим решением вместо этого фильтра, но с ним тоже есть один затык. Из 1с регулярно выгружается номенклатура в XML, который разбирается скриптом и записывается в базу. Там есть размеры и цвета, но они грузятся в атрибуты и опции. Опции, если не ошибаюсь, реализованы через буржуйскую Dependet Options.

Я предполагаю, что лучше для фильтров выгружать отдельный XML из 1С, содержащий только категории, подкатегории, производителей, товары, цвета и размеры. Так он будет иметь меньший объем, чем полный и будет легче и быстрее разбираться через SimpleXML.

Соответственно, скрипт, который будет разбирать выгрузку - запихнет все данные в таблицы:

prefix_filter

prefix_filter_description

prefix_group_filter

prefix_group_filter_description

prefix_product_filter

prefix_category_filter

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

 

Вопросов у меня несколько:

1. Есть ли желающие помочь разобраться с "именным" фильтром и довести его до ума?

2. Есть ли желающие помочь реализовать фильтры со стандартным модулем ocStore?

3. Справится ли SimpleXML с разбором файла в несколько тысяч товаров?

4. Я ничего не упустил в плане выгрузки параметров из XML в стандартный модуль фильтра ocStore?

5. Может ли кто помочь с написанием разбора XML для ocStore? Честно признаюсь - опыта нет. Изучать приходилось, но практиковаться - нет.

Share this post


Link to post
Share on other sites

Обнаружил в модели на тестовом домене filterPRO.

Возможно, на его основе и пытались сделать "именной фильтр".

 

Пока приступил к работе над разбором XML

разбирает вполне нормально, но надо еще как-то запихнуть в эти 6 таблиц полученные значения.

Может кто подсказать, как правильно создать запрос ко всем 6 таблицам сразу, или как-то их разбить по 2-3 и загонять последовательно?

Share this post


Link to post
Share on other sites

filterpro работает с дефолтными фильтрами

Share this post


Link to post
Share on other sites

filterpro работает с дефолтными фильтрами

У меня в дефолтных фильтрах пусто. То есть, возможно, filterPRO брали за основу, или просто отказались от его использования.

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

Share this post


Link to post
Share on other sites

Из личного опыта: xml-прайс на 100К товаров обрабатывался без проблем. 

В принципе всю часть касающуюся xml могу вам сделать

Share this post


Link to post
Share on other sites

Из личного опыта: xml-прайс на 100К товаров обрабатывался без проблем. 

В принципе всю часть касающуюся xml могу вам сделать

 

С разбором XML я уже справился. Причем вполне быстро разбирает полную выгрузку товаров со всеми атрибутами. А если мне 1с-программист сделает отдельную выгрузку для фильтров, без лишней лабуды, так вообще летать будет. Основная задача у меня теперь - взаимосвязанно загнать в 6 таблиц БД Опенкарта полученные данные. Проблема состоит в том, чтобы правильно составить объединенные запросы с проверкой на наличие данных и апдейтом. Таблицы, скорее всего, нужно будет объединять по 2-4. Проверять в каждой. Мне нужно, чтобы фильтры обновлялись также часто, как обновляется наличие товара.

Товар выгружается из 1С в XML и скрипт регулярно его обходит и вносит изменения в базу. Точно также нужно и фильтр обновлять, чтобы при отсутствии товара, например, с цветом "кацапетовский закат", не выводился и фильтр по этому цвету. Или, если товары размера XXXXL закончились - то и фильтра этого быть уже не должно.

Таблицы:

category_filter

product_filter

filter

filter_description

filter_group

filter_group_description

Share this post


Link to post
Share on other sites

Попробую описать задачу иначе, может появится сен-сей...

Я не прошу готовое решение, хотя и не отказался бы, мне нужен вектор. Ну и пояснение к нему...

Мне нужно подсказать, как подключиться к БД и обратиться к таблицам, не нарушая принцип MVC.

Я привык работать в процедурном режиме, но пора и MVC осваивать. Поэтому и хотелось бы создать скрипт загрузки, соблюдая стандарт OpenCart.

Сам скрипт я хочу повесить на крон, чтобы выполнялся регулярно в автоматическом режиме, но при этом, хочется еще вывести кнопку "Обновить фильтры" в админку, чтобы можно было выполнить срочное обновление в ручном режиме.

Share this post


Link to post
Share on other sites

если ваш скрипт импорта нормально заполняет

Таблицы:

category_filter

product_filter

filter

filter_description

filter_group

filter_group_description

то вам нужно просто поставить filterpro

Share this post


Link to post
Share on other sites

Да я не против его поставить. Более того, он уже покупался ранее. Но какой-то умник его снес и написал какой-то странный фильтр, выдающий 20 Гб ошибок в сутки.

Сейчас я именно прошу помощи в написании скрипта, заполняющего таблицы.

Я достаточно подробно описал, что мне нужно - не нарушая стандарта заполнить таблицы, причем скрипт должен еще делать проверку и обновлять, если что-то изменилось, а не дублировать фильтры.

То есть, скрипт должен проверить, есть ли в таблице, например, product_filter фильтры, которые для этого товара выгружены в XML. если есть - не трогать, если нет - добавить, если есть те, которых нет в XML - удалить.

Тоже самое - к категории, к которой отнесен товар с этими фильтрами.

Ну и остальные 4 таблицы фильтров, я думаю, без стирания - просто должны проверяться и дополняться, если таких фильтров еще нет.

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

Edited by Helloween

Share this post


Link to post
Share on other sites

лучше всего конечно использовать стандартные методы addFilter модели движка.

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

Share this post


Link to post
Share on other sites

Спасибо, постараюсь напомнить.

В принципе, файлы filterpro тут есть. Не уверен, что все, но модель точно есть.

Я не совсем понимаю. Она тянет фильтры из БД, так? А мне нужно в БД загнать эти фильтры и потом обновлять их. Сейчас в БД все таблицы фильтров пустые.

Edited by Helloween

Share this post


Link to post
Share on other sites

на всякий случай - выложу часть лога ошибок.

2015-08-24 15:53:41 - PHP Notice:  Undefined index: min_price in /test.my-site.ru/system/library/my-site_filter.php on line 156
2015-08-24 15:53:41 - PHP Notice:  Undefined index: max_price in /test.my-site.ru/system/library/my-site_filter.php on line 157
2015-08-24 15:53:41 - PHP Notice:  Undefined index: attr in /test.my-site.ru/system/library/my-site_filter.php on line 227
2015-08-24 15:53:41 - PHP Warning:  Invalid argument supplied for foreach() in /test.my-site.ru/system/library/my-site_filter.php on line 227
2015-08-24 15:53:41 - PHP Notice:  Undefined index: availability in /test.my-site.ru/system/library/my-site_filter.php on line 233
2015-08-24 15:53:41 - PHP Warning:  Missing argument 3 for ModelToolImage::myresize(), called in /test.my-site.ru/catalog/controller/product/category.php on line 210 and defined in /test.my-site.ru/catalog/model/tool/image.php on line 80
2015-08-24 15:53:41 - PHP Notice:  Undefined index: href in /test.my-site.ru/catalog/controller/product/category.php on line 239
2015-08-24 15:53:41 - PHP Notice:  Undefined index: href in /test.my-site.ru/catalog/controller/product/category.php on line 241
2015-08-24 15:53:41 - PHP Notice:  Undefined index: availability in /test.my-site.ru/system/library/my-site_filter.php on line 56
2015-08-24 15:53:41 - PHP Notice:  Undefined index: query in /test.my-site.ru/system/library/my-site_filter.php on line 69

 

Может кто подскажет как поправить существующий фильтр.

Как я понимаю принцип его работы:

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

По сути, аналог поиска по сайту, но с поиском по подстроке.

При этом, бренд выводится перед остальными параметрами и через слеш (/brand-tarusa),

Параметры размера в адресной строке выводятся через точку с запятой, по которым и разбивается строка (/size/70A;80B),

А последний параметр (фильтр) выводится по старинке, через get запрос (?attr%5B12%5D=%25D0%259A%25D0%25BB%25D0%25B0%25D1%2581%25D1%2581%25D0%25B8%25D0%25BA%25D0%25B0)

 

полная строка выглядит так:

/бренд/size/hfpvths через точку с запятой?attr%5B12%5D=коллекция

Оригинал из строки браузера:

/brand-tarusa/size/70A;80B?attr%5B12%5D=%25D0%259A%25D0%25BB%25D0%25B0%25D1%2581%25D1%2581%25D0%25B8%25D0%25BA%25D0%25B0

 

Кстати, когда отключаешь последний фильтр по коллекции, адресная строка растет... Это тоже необходимо побороть.

Share this post


Link to post
Share on other sites
2015-08-24 15:53:41 - PHP Notice:  Undefined index: min_price in /test.my-site.ru/system/library/my-site_filter.php on line 156
2015-08-24 15:53:41 - PHP Notice:  Undefined index: max_price in /test.my-site.ru/system/library/my-site_filter.php on line 157
2015-08-24 15:53:41 - PHP Notice:  Undefined index: attr in /test.my-site.ru/system/library/my-site_filter.php on line 227

 эти ошибки пишет filterpro, а не стандартные фильтры движка. скорее всего пиратский, перепиленный

Share this post


Link to post
Share on other sites

скрипт синхронизации производитей с дефолтными фильтрами

$manufacturer_title тут = 'Производитель';

$lang_id=0;

			$filters = array();
			foreach($manufacturers as $manufacturer) {
				$filter = array(
					"filter_id" => "",
					'sort_order' => $manufacturer['sort_order'],
					'filter_description' => array($lang_id => array("name" => $manufacturer['name']))
				);
				$filters[] = $filter;
			}

			$filter_data = array(
				'sort_order' => 0,
				'filter_group_description' => array($lang_id => array('name' => $manufacturer_title)),
				'filter' => $filters,
			);

			$manufacturer_group_id = $this->model_catalog_filter->addFilter($filter_data);

Share this post


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
You are posting as a guest. If you have an account, please sign in.
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.

Sign in to follow this  

  • Similar Content

    • By SooR
      OCFilter - это быстрый и функциональный фильтр товаров в каталоге.
      Основной упор делается на скорость отбора товаров и удобство использования фильтра как покупателями, так и владельцами магазинов.
      Поэтому юзабилити и алгоритмы поиска развиваются постоянно, независимо от уже достигнутых или поставленных целей.
       
      Демо-версия

      Каталог
      Админ-панель

      Вход:
      Логин: demo
      Пароль: demo
       
      Совместимость

      Модуль совместим с OpenCart 2.* и 3.* (включая различные сборки на базе этих версий).
      OpenCart 1.5.x больше не поддерживается (04.03.2019).
      Техподдержка уже установленных модулей на 1.5 будет действовать до 31.07.2019.
       
      Совместимость с шаблонами
       
      Гарантированная совместимость доступна для следующих шаблонов:
       
      UniShop
      Демо фильтра: http://unishop-template.tw1.ru/desktops/
      Шаблон: https://opencartforum.com/files/file/3063-universalnyy-adaptivnyy-shablon-unishop/
       
      TechStore
      Шаблон: https://opencartforum.com/files/file/4550-techstore-adaptivnyy-universalnyy-shablon/
       
      Frame Theme
      Демо фильтра: https://frame.xds.by/demo/ocr_3.0.x/index.php?route=product/category&path=20
      Шаблон: https://opencartforum.com/files/file/5609-frame-theme-bystryy-adaptivnyy-shablon-dlya-opencart-3x/

      Основные возможности модуля

      Фильтрация по:
      цене с логарифмической шкалой; производителям; наличию на складе (как по количеству, так и по stock_status_id); атрибутам*; опциям товара*; стандартным фильтрам OpenCart*.
      *требует скопировать их в настройках модуля
      - Поддержка мультиязычности;
      - Поддержка SEO URL для фильтров и его значений;
      - Работа с большим количеством товаров (100к +) и фильтров;
      - Создание посадочных страниц для определенного набора фильтров со своими meta-данными и текстом;
      - Не конфликтует с шаблонами и другими модулями;
      - Не заменяет файлы Вашего магазина, устанавливается через установщик дополнений OCmod с минимальными вставками кода;
      - Поддержка мобильных версий;
      - Возможность скрывать неактивные (с нулевым количеством товаров) значения фильтра;
      - Возможность использовать слайдеры для любых фильтров;
      - Возможность ограничивать вывод фильтров и значений, скрывая лишние под collapse кнопку;
      - Код модуля не зашифрован и не требует декодеров.

      Формирование SEO URL приводит ссылку фильтров в следующий вид:
      http[s]://domain.com/category-[n]/manufacturer-[n]/price/[number]-[number]/sklad/[in|out|stock_status_id]/filter-[n]/value-[n]/filter-[n]/[number]-[number][/|] Реальная ссылка демо-версии:
      http://demo2.ocfilter.com/noutbuki-planshety-po/noutbuki-planshety-kompjutery/noutbuki/dell/obem-i-tip-hdd/1-tb/opticheskij-nakopitel/dvd-rw/ Постоянным покупателям модуля скидка на последующие лицензии:
      - со второй покупки: 30%
      - с пятой покупки: 50%
       
      Внимание! 
      Модуль работает только в категориях товара! В акциях, производителях и на странице поиска он не работает.
       
      Внимание!
      Для правильной работы фильтра OCFilter вам необходимо отключить модификаторы всех других сторонних модулей фильтра (если такие модули устанавливались)!
      То есть отключить модификаторы из админки и в директории /system/[название_файла].xml
      Название файла достаточно переименовать, добавив в конце "_"
      /system/[название_файла].xml_ После этого обязательно очистите и обновите модификаторы в панели управления сайтом.
       
      _______________________________________________________________________
      Контакты

      Время работы поддержки: пн-пт с 10:00 до 19:00, суббота, воскресенье - выходной
      _______________________________________________________________________
      Частые вопросы
       
      https://opencartforum.com/files/file/3394-ocfilter-modul-filtra-tovarov/?tab=tutorials
       
    • By SooR
      1 280.00 руб
      Скачать/Купить дополнение


      OCFilter - Модуль фильтра товаров
      OCFilter - это быстрый и функциональный фильтр товаров в каталоге.
      Основной упор делается на скорость отбора товаров и удобство использования фильтра как покупателями, так и владельцами магазинов.
      Поэтому юзабилити и алгоритмы поиска развиваются постоянно, независимо от уже достигнутых или поставленных целей.
       
      Демо-версия

      Каталог
      Админ-панель

      Вход:
      Логин: demo
      Пароль: demo
       
      Совместимость

      Модуль совместим с OpenCart 2.* и 3.* (включая различные сборки на базе этих версий).
      OpenCart 1.5.x больше не поддерживается (04.03.2019).
      Техподдержка уже установленных модулей на 1.5 будет действовать до 31.07.2019.
       
      Совместимость с шаблонами
       
      Гарантированная совместимость доступна для следующих шаблонов:
       
      UniShop
      Демо фильтра: http://unishop-template.tw1.ru/desktops/
      Шаблон: https://opencartforum.com/files/file/3063-universalnyy-adaptivnyy-shablon-unishop/
       
      TechStore
      Шаблон: https://opencartforum.com/files/file/4550-techstore-adaptivnyy-universalnyy-shablon/
       
      Frame Theme
      Демо фильтра: https://frame.xds.by/demo/ocr_3.0.x/index.php?route=product/category&path=20
      Шаблон: https://opencartforum.com/files/file/5609-frame-theme-bystryy-adaptivnyy-shablon-dlya-opencart-3x/

      Основные возможности модуля

      Фильтрация по:
      цене с логарифмической шкалой; производителям; наличию на складе (как по количеству, так и по stock_status_id); атрибутам*; опциям товара*; стандартным фильтрам OpenCart*.
      *требует скопировать их в настройках модуля
      - Поддержка мультиязычности;
      - Поддержка SEO URL для фильтров и его значений;
      - Работа с большим количеством товаров (100к +) и фильтров;
      - Создание посадочных страниц для определенного набора фильтров со своими meta-данными и текстом;
      - Не конфликтует с шаблонами и другими модулями;
      - Не заменяет файлы Вашего магазина, устанавливается через установщик дополнений OCmod с минимальными вставками кода;
      - Поддержка мобильных версий;
      - Возможность скрывать неактивные (с нулевым количеством товаров) значения фильтра;
      - Возможность использовать слайдеры для любых фильтров;
      - Возможность ограничивать вывод фильтров и значений, скрывая лишние под collapse кнопку;
      - Код модуля не зашифрован и не требует декодеров.

      Формирование SEO URL приводит ссылку фильтров в следующий вид:
      http[s]://domain.com/category-[n]/manufacturer-[n]/price/[number]-[number]/sklad/[in|out|stock_status_id]/filter-[n]/value-[n]/filter-[n]/[number]-[number][/|] Реальная ссылка демо-версии:
      http://demo2.ocfilter.com/noutbuki-planshety-po/noutbuki-planshety-kompjutery/noutbuki/dell/obem-i-tip-hdd/1-tb/opticheskij-nakopitel/dvd-rw/ Постоянным покупателям модуля скидка на последующие лицензии:
      - со второй покупки: 30%
      - с пятой покупки: 50%
       
      Внимание! 
      Модуль работает только в категориях товара! В акциях, производителях и на странице поиска он не работает.
       
      Внимание!
      Для правильной работы фильтра OCFilter вам необходимо отключить модификаторы всех других сторонних модулей фильтра (если такие модули устанавливались)!
      То есть отключить модификаторы из админки и в директории /system/[название_файла].xml
      Название файла достаточно переименовать, добавив в конце "_"
      /system/[название_файла].xml_ После этого обязательно очистите и обновите модификаторы в панели управления сайтом.
       
      _______________________________________________________________________
      Контакты

      Время работы поддержки: пн-пт с 10:00 до 19:00, суббота, воскресенье - выходной
      _______________________________________________________________________
      Частые вопросы
       
      https://opencartforum.com/files/file/3394-ocfilter-modul-filtra-tovarov/?tab=tutorials
       
      Добавил SooR Добавлено 27.09.2016 Категория Фильтры Системные требования Обязательное наличие подключенного Bootstrap (js и css).jQuery версии 1.9.1 и выше. Сайт разработчика https://ocfilter.com Старая цена Метод активации Автоматическая активация Ioncube Loader Нет OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 3.0
      2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика Нет  
    • By Rustam2301
      Здравствуйте! Подскажите, пожалуйста, как вывести фильтр в адаптивной версии. Убираю hidden-xs
      фильтр появляется в мобильной версии, но главная страница отображается белым фоном?!
    • By sv2109
      350.00 руб
      Скачать/Купить дополнение


      Attribute Category - Атрибуты категории
      Больше 10 тысяч загрузок модулей от sv2109!
      Это вторая версия модуля, который имеет уже больше 200 покупок!
      Что делает этот модуль?
      Модуль значительно облегчает добавление атрибутов при добавлении товара
      Когда вы добавляете новый товар то во вкладке атрибутов вам придется вручную добавлять каждый атрибут. А если товаров несколько тысяч и у каждого по 15-20 атрибутов?.. Что делает модуль? Он позволяет привязать атрибуты к категории товаров. Например можно указать что для товара "Ноутбук" подходят атрибуты "процессор", "ОЗУ", "HDD" итд Теперь когда вы добавляете новый товар-ноутбук во вкладке атрибуты автоматически добавятся присвоенные для ноутбука атрибуты: "процессор", "ОЗУ", "HDD". У вас также остается возможность добавить атрибуты и вручную.
      Модуль значительно сэкономить время и количество ошибок при добавлении атрибутов.
      Демонстрация работы
      вместе с модулем Attribute Select - Атрибуты списком
      Совместимость:
      OpenCart, ocStore 2.0.x, 2.1.x, 2.2, 2.3, 3.x
      Версию для Opencart, ocStore 1.5.x можно скачать тут
       
      Модуль использует IonCube, обычно на 99% хостингов он установлен но на всякий случай можете проверить.
      Одна лицензия модуля позволяет установить этот модуль на 1 домене.
       
      Демо:
      Категория
      Товар
       
      Для связи с автором модуля пишите на sv2109@gmail.com или в ЛС
      © Стасюк Владимир (sv2109.com), 2016
      Добавил sv2109 Добавлено 21.01.2016 Категория Атрибуты Системные требования Сайт разработчика sv2109.com Старая цена Метод активации По запросу в ЛС Ioncube Loader Требуется OpenCart 3.0
      2.3
      2.2
      2.1
      2.0 ocStore 2.3
      2.2
      2.1 OpenCart.Pro, ocShop Opencart.pro 2.3
      Opencart.pro 2.1
      OcShop 2.0.3.х Обращение к серверу разработчика  
  • Recently Browsing   0 members

    No registered users viewing this page.

×

Important Information

On our site, cookies are used and personal data is processed to improve the user interface. To find out what and what personal data we are processing, please go to the link. If you click "I agree," it means that you understand and accept all the conditions specified in this Privacy Notice.