Максимальные возможности в PHP скриптах для SimplePars

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

В PHP скриптах полностью поддерживается обращения ко всем функциям модуля SimplePars.
Так же ко всем встроенным методам которые доступны из раздела model в opencart

Пример
Если вам необходимо выполнять собственные SQL запросы, то для этого не нужно в скрипте держать данные подключения к базе.
Достаточно вызывать встроенный метод opencart
$this->db->query("Здесь ваш запрос");
Если вы будете использовать выборку из базы данных, то помните, что opencart возвращает объект содержавший три основных блока.

  1. Количество строк выбранных.
  2. Одна рандомная строка.
  3. Все строки попавшие в выборку.

Допустим отправляем запрос

Ответ

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 для возврата данных ненужно вводить, модуль сам понимает все. Следите что бы скрипты всегда корректно завершали работу и не содержали ошибок, в том числе и синтаксических и будет вам счастье.