Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

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? Честно признаюсь - опыта нет. Изучать приходилось, но практиковаться - нет.

Надіслати
Поділитися на інших сайтах


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

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

 

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

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

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

Надіслати
Поділитися на інших сайтах


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

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

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

Надіслати
Поділитися на інших сайтах


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

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

 

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

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

Таблицы:

category_filter

product_filter

filter

filter_description

filter_group

filter_group_description

Надіслати
Поділитися на інших сайтах


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

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

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

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

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

Надіслати
Поділитися на інших сайтах


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

Таблицы:

category_filter

product_filter

filter

filter_description

filter_group

filter_group_description

то вам нужно просто поставить filterpro
Надіслати
Поділитися на інших сайтах

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

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

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

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

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

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

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

Змінено користувачем Helloween
Надіслати
Поділитися на інших сайтах


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

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

Надіслати
Поділитися на інших сайтах

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

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

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

Змінено користувачем Helloween
Надіслати
Поділитися на інших сайтах


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

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

 

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

Надіслати
Поділитися на інших сайтах


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, а не стандартные фильтры движка. скорее всего пиратский, перепиленный

Надіслати
Поділитися на інших сайтах

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

$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);

Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.