В данной статье я попробую раскрыть максимальные возможности в написании своей логики на PHP.
Данная статья не предназначена для тех кто далек от программирования, это как раз для тех кто сам себе режиссер и может переписать парсер под свои нужды, но решил сэкономить свое время и воспользоваться встроенными скриптами.
В PHP скриптах полностью поддерживается обращения ко всем функциям модуля SimplePars.
Так же ко всем встроенным методам которые доступны из раздела model в opencart
Пример
Если вам необходимо выполнять собственные SQL запросы, то для этого не нужно в скрипте держать данные подключения к базе.
Достаточно вызывать встроенный метод opencart
$this->db->query("Здесь ваш запрос");
Если вы будете использовать выборку из базы данных, то помните, что opencart возвращает объект содержавший три основных блока.
- Количество строк выбранных.
- Одна рандомная строка.
- Все строки попавшие в выборку.
Допустим отправляем запрос
Ответ
stdClass Object
(
[num_rows] => 29
[row] => Array
(
[product_id] => 15182
[model] => lol
[sku] => 003527
)
[rows] => Array
(
[0] => Array
(
[product_id] => 15182
[model] => lol
[sku] => 003527
)
[1] => Array
(
[product_id] => 15181
[model] => lol
[sku] => 003689
)
[2] => Array
(
[product_id] => 15160
[model] => 15160
[sku] => RFPLBXEU06G
)
................
При обновлении и вставке новых данных возврата значений не будет. Это единственное на чем я остановлю внимание.
В остальном, если вы читаете эту статью, то вы должны понимать как устроен opencart.
Какие данные модуль передает скрипту и какие заберет
Это самая важная часть этого функционала!!! Ради нее все и писалось.
В разные моменты выполнения скрипта модуль получает разные наборы данных!!!
Эти данные вы можете использовать для написания своей логики модуля, так и для модификации их и отправки обратно модулю.
То есть, если вам не хватает возможностей поиск замены для обработки границы, вы можете в собственном скрипте при помощи всей мощи PHP обработать данные в границе парсинга, и вернуть результат парсеру. Он же в свою очередь применит полученные данные там где вы хотите. !!!!
В зависимости от того где применяется скрипт, меняется набор данных который передается модулю.
Все данные приходят в многомерном массиве под названием $script_data
Обратите внимание, что после выполнения работы модуль так же обратится к этому массиву и заберет обратно себе данные для работы.
Это значит, если вы хотите изменить что то в данных вам достаточно достать их из этого массива, изменить, и вернуть на место. То есть, это хук который прокидывает все данные от модуля SimplePars в ваш скрипт, и после него забирает обратно для своей работы.
При выполнении скрипта в любое время вам доступны
$script_data['dn_id'] - (int) Числовое значение обозначающее id проекта, из который вы работаете.
$script_data['setting'] - Многомерный массив содержащий все настройки SimplePars, а точнее содержимое базы данных oc_pars_setting
Пример
Array
(
[dn_id] => 1
[pre_view_param] => 1
[pre_view_syntax] => 1
[dn_name] => svetavto.com.ua
[link_list] =>
[link_error] =>
[page_cou_link] => 100
[pars_stop] => 1
[pars_pause] => 0
[type_grab] => 1
[thread] => 1
[filter_round_param] =>
[filter_round_depth] =>
[filter_round_slash] => 0
[filter_round_domain] => 1
[filter_round_rules] =>
[filter_link_param] =>
[filter_link_depth] =>
[filter_link_slash] => 0
[filter_link_domain] => 1
[filter_link_rules] =>
[action] => 3
[sid] => sku
[grans_permit] => 0
[scripts_permit] => 1
[u_manufac] => 0
[u_des] => 0
[u_cat] => 0
[u_img] => 0
[u_attr] => 0
[u_opt] => 0
[u_made_meta] => 0
[u_up_url] => 0
[r_store] => Array
(
[0] => 0
[1] => 1
[2] => 2
)
[r_lang] => Array
(
[0] => 1
)
[r_model] => 2
[r_sku] => 0
[r_name] => 1
[r_made_url] => 2
[r_made_meta] => 1
[r_price] => 1
[r_price_spec] => 1
[r_price_spec_groups] => all
[r_price_spec_date_start] => 2019-10-08
[r_price_spec_date_end] => 2019-11-14
[r_cost] => 0
[r_quant] => 1
[r_product_status] => 1
[r_status_zero] => 7
[r_manufac] => 1
[r_manufac_made_url] => 2
[r_manufac_made_meta] => 1
[r_des] => 1
[r_des_dir] => 0
[r_cat] => 1
[r_cat_perent] => 2
[r_cat_made_url] => 2
[r_cat_made_meta] => 1
[r_img] => 1
[r_img_dir] => 1
[r_attr_group] => 3
[r_attr] => 1
[r_opt] => 0
[r_upc] => 0
[r_ean] => 0
[r_jan] => 0
[r_isbn] => 0
[r_mpn] => 0
[r_location] => 0
[r_minimum] => 0
[r_subtract] => 0
[r_length] => 0
[r_width] => 0
[r_height] => 0
[r_length_class_id] => 0
[r_weight] => 0
[r_weight_class_id] => 0
[r_sort_order] => 0
[r_status] => 0
[r_layout_pr] => 0
[r_tags] => 0
[r_hpm] => 1
[logs_reverse] => 0
[logs_mb] => 10000
[vers_op] => ocstore2
)
$script_data['browser'] - Многомерный массив содержащий все настройки запросов которые использует при парсинге.
Пример
Array
(
[id] => 910
[dn_id] => 1
[proxy_use] => 0
[timeout] => 10
[connect_timeout] => 10
[protocol_version] => 2
[header_get] => 1
[followlocation] => 0
[cookie_use] => 1
[cookie_up] => 1
[cookie_session] => 1
[user_agent_use] => 1
[user_agent_change] => 1
[user_agent_list] => User-Agent: Mozilla/5.0 (Linux; Android 9; SM-G965F Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.157 Mobile Safari/537.36
[header_use] => 1
[header_change] => 1
[header_list] => Array
(
[0] => Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
[1] => Accept-Language: ru-RU,ru;q=0.8,en-US;q=0.5,en;q=0.3
[2] => Accept-Encoding: gzip, deflate
[3] => Referer: http://act.simplepars.top/
[cookies] => Cookie: PHPSESSID=k85mh8k2f2qe08ju3o8qu910k0; language=ru; currency=UAH; yams_lang=en; BITRIX_SM_GUEST_ID=25978438; BITRIX_SM_LAST_VISIT=24.06.2021+15%3A27%3A39; USER_COUNTRY=UA; USER_REGION_NAME=%25D0%259A%25D0%25B8%25D0%25B5%25D0%25B2; USER_ZIP=deleted;
[user_agent] => User-Agent: Mozilla/5.0 (Linux; Android 9; SM-G965F Build/PPR1.180610.011; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/74.0.3729.157 Mobile Safari/537.36
)
[cache_page] => 0
[ch_connect_timeout] => 10
[ch_timeout] => 10
[ch_url] => https://svetavto.com.ua/xenon/ksenonovaya-lampa-clearlight-d2r-6000k-blue-vision-ultra.html
[ch_pattern] => 005370
[auth_use] => 0
[auth_url] => https://svetavto.com.ua/login/
[auth_data] => Array
(
[email] => support@simplepars.top
[password] => 111111
)
[auth_type] => 1
[auth_url_check] => https://svetavto.com.ua/led/panel_priborov/t5-w1-2w-3smd-3528-sinij-12v-c-p-15220.html
[auth_str] => Rassol2
[webp_conv] => 0
[cookies] => Cookie: PHPSESSID=k85mh8k2f2qe08ju3o8qu910k0; language=ru; currency=UAH; yams_lang=en; BITRIX_SM_GUEST_ID=25978438; BITRIX_SM_LAST_VISIT=24.06.2021+15%3A27%3A39; USER_COUNTRY=UA; USER_REGION_NAME=%25D0%259A%25D0%25B8%25D0%25B5%25D0%25B2; USER_ZIP=deleted;
)
При выполнении скрипта перед парсингом ссылки.
Дополнительно доступное значение при выполнении скрипта перед парсингом ссылки.
$script_data['urls'] - (arrey) Одномерный массив который содержит ссылки на парсинг. В стандарте там будет от одного до пяти значений в зависимости от количества потоков. С ключами от 0 до 4.
Перед Парсинг в ИМ. и (После Парсинга в ИМ тот же набор данных)
В данном случае модуль передаст выполнение вашему скрипту после того как выполнит поиск замену, но перед тем как модуль начнет записывать данные в товар по логике страницы Парсинг в ИМ.
Здесь доступно максимальное количество данных.
$script_data['url'] - (str) Содержится ссылка на сайт донор, данные с которой сейчас обрабатываются.
$script_data['permit'] - Многомерный массив который содержит два блока.
add - Если товар допущен на добавления.
up - Если товар допущен к обновлению.
Товар может либо обновляться либо добавляться, за это отвечает значение permit в интересующем вас блоке.
Значение pr_id содержит id товара, при обновлении или если скрипт выполняется после создания нового товара.
В остальном случаи там значение 0.
Пример
Array
(
[add] => Array
(
[permit] => 0
[pr_id] => 0
)
[up] => Array
(
[permit] => 1
[pr_id] => 15200
)
)
$script_data['form'] - Многомерный массив содержаший все обработанные данные поиск заменой и готовые к передаче Парсингу в ИМ
Пример
Array
(
[id] => 976
[dn_id] => 1
[model] => lol
[sku] => 003858
[name] => H11-H8 (PGJ19-2) 21smd (3535) белый_12V_C-P.(21220) (шт.)
[price] => 11550
[price_spec] =>
[cost] =>
[quant] =>
[quant_d] => 111
[des] =>
[des_d] =>
[des_dir] => description
[manufac] => Philips
[manufac_d] => 0
[cat] => Array
(
[0] => LED (Светодиоды)
[1] => Светодиоды в противотуманные фары
)
[cat_d] => 0
[img] => Array
(
[0] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21220/133632863_w640_h640_img_015_result-800x800-w-30-0-0.jpg
[1] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21220/133632870_w640_h640_img_016_result-800x800-w-30-0-0.jpg
[2] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21220/133632875_w640_h640_img_017_result-800x800-w-30-0-0.jpg
[3] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21220/133632884_w640_h640_img_020_result-800x800-w-30-0-0.jpg
)
[img_d] =>
[img_dir] => product
[img_name] =>
[attr] => Array
(
[1] => Array
(
[0] => Код товара:
[1] => 003858
)
[2] => Array
(
[0] => Производитель:
[1] => LED SOLUTION
)
[3] => Array
(
[0] => Цоколь
[1] => H11-H8
)
[4] => Array
(
[0] => Напряжение
[1] => 12V
)
[5] => Array
(
[0] => Тип св. элемента
[1] => SMD 3535
)
[6] => Array
(
[0] => Количество св. элементов
[1] => 21
)
[7] => Array
(
[0] => Обманка (Canbus)
[1] => Нет
)
[8] => Array
(
[0] => Драйвер (cтабилизатор напр.)
[1] => Нет
)
[9] => Array
(
[0] => Цвет
[1] => Белый
)
[10] => Array
(
[0] =>
[1] =>
)
)
[opt_name] => {|}0
[opt_value] =>
[opt_price] =>
[opt_quant] =>
[opt_quant_d] =>
[opt_imgs] =>
[opt_data] => {required_1}{price_prefix_+}{imgs_type_0}
[grans_permit_list] => Array
(
)
[upc] =>
[ean] =>
[jan] =>
[isbn] =>
[mpn] =>
[location] =>
[minimum] => 1
[subtract] => 1
[length] => 0.00
[width] => 0.00
[height] => 0.00
[length_class_id] => 1
[weight] => 0.00
[weight_class_id] => 1
[status] => 1
[layout_pr] => 0
[layout_cat] => 0
[tags] =>
[sort_order] => 0
[seo_url] => H11-H8 (PGJ19-2) 21smd (3535) белый_12V_C-P.(21220) (шт.)
[seo_h1] => H11-H8 (PGJ19-2) 21smd (3535) белый_12V_C-P.(21220) (шт.)
[seo_title] => Кипить в интернет магазине H11-H8 (PGJ19-2) 21smd (3535) белый_12V_C-P.(21220) (шт.)
[seo_desc] => Купить самый дорогой товар H11-H8 (PGJ19-2) 21smd (3535) белый_12V_C-P.(21220) (шт.) В нашем интернет магазине Лололо Гарант!
[seo_keyw] => 003858, 11550, LED (Светодиоды)Светодиоды в противотуманные фары
[cat_seo_url] => LED (Светодиоды)Светодиоды в противотуманные фары
[cat_seo_h1] => LED (Светодиоды)Светодиоды в противотуманные фары
[cat_seo_title] => LED (Светодиоды)Светодиоды в противотуманные фары
[cat_seo_desc] => описание категории LED (Светодиоды)Светодиоды в противотуманные фары
[cat_seo_keyw] => Теги категории LED (Светодиоды)Светодиоды в противотуманные фары
[manuf_seo_url] => Производитель
[manuf_seo_h1] => 12
[manuf_seo_title] => 13
[manuf_seo_desc] => 14
[manuf_seo_keyw] => 15
[hpm_sku] =>
[opts] => Array
(
)
[script_gran] => Array
(
[7781] => 003858
[7782] => H11-H8 (PGJ19-2) 21smd (3535) белый_12V_C-P.(21220) (шт.)
[7783] => 11550
[7784] =>
[7785] => H11-H8 (PGJ19-2) 21smd (3535) белый_12V_C-P.(21220) (шт.)
[7787] => Код товара:{csvnc}003858{csvnc}Производитель:{csvnc}LED SOLUTION{csvnc}Цоколь{csvnc}H11-H8{csvnc}Напряжение {csvnc}12V{csvnc}Тип св. элемента{csvnc}SMD 3535{csvnc}Количество св. элементов{csvnc}21{csvnc}Обманка (Canbus){csvnc}Нет{csvnc}Драйвер (cтабилизатор напр.){csvnc}Нет{csvnc}Цвет{csvnc}Белый{csvnc}
[7790] => itemscope itemtype="http://schema.org/BreadcrumbList">
Главная
LED (Светодиоды)
Светодиоды в противотуманные фары
H11-H8 (PGJ19-2) 21smd (3535) белый_12V_C-P.(21220) (шт.)
[7786] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21220/133632863_w640_h640_img_015_result-800x800-w-30-0-0.jpg
[7788] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21220/133632870_w640_h640_img_016_result-800x800-w-30-0-0.jpg{csvnc}https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21220/133632875_w640_h640_img_017_result-800x800-w-30-0-0.jpg{csvnc}https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21220/133632884_w640_h640_img_020_result-800x800-w-30-0-0.jpg
[7791] => LED (Светодиоды){csvnc}Светодиоды в противотуманные фары
)
)
Этот массив содержит подготовленные данные для передачи управления загрузки в ИМ.
Внимание!!! Обратите внимание на вложенный массив $script_data['form'][script_gran]
Этот массив содержит ВСЕ границы париснга что у вас созданы с их значениями!!!
Допустим, ключ 7782 из этого массива - это и есть знакомая вам граница из основного фунционала модуля {gran_7782}
Перед Парсинг в CSV и (После Парсинг в CSV данные идентичны).
В данном случае модуль передаст выполнение вашему скрипту после того как выполнит поиск замену, но перед тем как модуль начнет записывать данные в CSV
Здесь доступны такие дополнительные значения как.
$script_data['url'] - (str) Содержится ссылка на сайт донор, данные с которой сейчас обрабатываются.
$script_data['csv'] - Многомерный массив содержаший все обработанные данные поиск заменой, и готовые к записи в CSV
Пример
Array
(
[title] => Array
(
[0] => Ссылка
[1] => Артикул
[2] => Навзание
[3] => Цена
[4] => Главное фото
[5] => Доп фото
[6] => Категории
)
[value] => Array
(
[0] => Array
(
[0] => https://svetavto.com.ua/led/protivitymanki/h11-h8-pgj19-2-7-5w-cob-belyj-12v-c-p-21219.html
[1] => 003845
[2] => H11-H8 (PGJ19-2) 7,5W COB белый_12V_C-P.(21219) (шт.)
[3] => 10749
[4] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21219/133632788_w640_h640_img_093_result-800x800-w-30-0-0.jpg
[5] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21219/133632791_w640_h640_img_094_result-800x800-w-30-0-0.jpg
[6] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21219/133632797_w640_h640_img_095_result-800x800-w-30-0-0.jpg
[7] => LED (Светодиоды)
[8] => Светодиоды в противотуманные фары
)
)
)
В блоке title передается порядок названия колонок.
В блоке value - это многомерный массив где первый уровень это строки csv, а второй уже столбцы.
$script_data['script_gran'] - Массив содержаший все границы парсинга настроенные в проекте. Все границы после обработки поиск замены.
Обратите внимание что ключи в этом масcиве равны номерам границы парсинга.
К примеру {gran_7782} = $script_data['script_gran'][7782]
Пример
Array
(
[7781] => 003129
[7782] => H3 (PK22s) 13smd (5050) белая_12V_C-P.(21020) (шт.)
[7783] => 1232
[7784] => Светодиодная (LED) лампочка с цоколем H3. Применение - противотуманная фара.
Характеристики: 13 светодиодов SMD5050, световой поток - 182Lm, 12V. Цвет: белый.
Преимущество светодиода: высокая яркость, низкое энергопотребление, длительный срок службы.
[7785] => H3 (PK22s) 13smd (5050) белая_12V_C-P.(21020) (шт.)
[7860] => https://svetavto.com.ua/led/protivitymanki/h3-pk22s-13smd-5050-belaya-12v-c-p-21020.html
[7786] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21020/133632642_w640_h640_img_011_result-800x800-w-30-0-0.jpg
[7788] => https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21020/133632640_w640_h640_img_001_result-800x800-w-30-0-0.jpg{csvnc}https://svetavto.com.ua/image/cache/data/led/0_led_diod_solu/21020/133632641_w640_h640_img_003_result-800x800-w-30-0-0.jpg
[7791] => LED (Светодиоды){csvnc}Светодиоды в противотуманные фары
)
Вывод.
Все эти данные вы можете использовать в своих скритах, можете модифицировать их, а также возврашать обратно модулю.
return для возврата данных ненужно вводить, модуль сам понимает все.
Следите что бы скрипты всегда корректно завершали работу и не содержали ошибок, в том числе и синтаксических и будет вам счастье.