Сайт сделал, но вот понадобилось мне еще и каталог в него заливать автоматом, сторонним приложением, и что бы это приложение инициировало выгрузку данных в БД Битрикса.
Сказано, сделано.
Если кому понадобится, я описываю добавление инфоблока-каталога в БД битрикса (кстати, на форуме битрикса, мне ответ дать не смогли (сказали пользовать API самого битрикса, и что все остальные методы полный сак, ибо после обновления моя схема может упасть, ну да это другая история).
Поехали.
Задача, добавить каталог на сайт. Каталог товаров в битриксе, это по сути инфоблок.
Создаем инфоблок руками (это одноразовая процедура, нечего запорачиватся, хотя это не сложно). Далее, говорим битриксу, что этот инфоблок будет каталогом товаров (это делается в настройках, и описано в справке).
Дальше мне надо было добавить группы товаров и производителей. В качестве груп товаров, я использовал стандартные разделы битрикса (т.е. поделил инфоблок на разделы) а вот для записи производителей я использовал пользовательские свойства.
Первое, что надо было сделать, добавить разделы и проивзодителей.
Sql запрос для добавления разделов выглядит так:
- Код: Выделить всё
#добавление новой групы товаров
insert into b_iblock_section
(`MODIFIED_BY`, `DATE_CREATE`, `CREATED_BY`, `IBLOCK_ID`, `ACTIVE`, `GLOBAL_ACTIVE`, `NAME`, `LEFT_MARGIN`, `RIGHT_MARGIN`, `DEPTH_LEVEL`, `DESCRIPTION`, `SEARCHABLE_CONTENT`, `XML_ID`)
values
('1', '@DATE_CREATE', '1', '@IBLOCK_ID', 'Y', 'Y', '@NAME', '@LEFT_MARGIN', '@RIGHT_MARGIN', '1', '', '@SEARCHABLE_CONTENT', '@XML_ID');
Дальше добавление производителей
- Код: Выделить всё
#Добавление ногового брэнда
insert into b_iblock_property_enum
(`PROPERTY_ID`, `VALUE`, `XML_ID`)
values
('69', '@VALUE', '@XML_ID');
PROPERTY_ID - это ссылка на свойство
VALUE - Собственно название группы
XML_ID - я использовал в своих целях (вставлял туда свой идентификатор)
Дальше самое интресеное, добавление элементов инфоблока. Вроде все казалось простым, добавляем данные в нужные таблицы, и все, но не тут-то было!!! Данные в некоторых таблицах нужно дублировать (я пока не понял, зачем это надо).
Добавляем две пустых строки в таблицу b_iblock_element
- Код: Выделить всё
#--Добавление 2 новых элементов
INSERT INTO `b_iblock_element` (
`ID` ,
`TIMESTAMP_X` ,
`MODIFIED_BY` ,
`DATE_CREATE` ,
`CREATED_BY` ,
`IBLOCK_ID` ,
`IBLOCK_SECTION_ID` ,
`ACTIVE` ,
`ACTIVE_FROM` ,
`ACTIVE_TO` ,
`SORT` ,
`NAME` ,
`PREVIEW_PICTURE` ,
`PREVIEW_TEXT` ,
`PREVIEW_TEXT_TYPE` ,
`DETAIL_PICTURE` ,
`DETAIL_TEXT` ,
`DETAIL_TEXT_TYPE` ,
`SEARCHABLE_CONTENT` ,
`WF_STATUS_ID` ,
`WF_PARENT_ELEMENT_ID` ,
`WF_NEW` ,
`WF_LOCKED_BY` ,
`WF_DATE_LOCK` ,
`WF_COMMENTS` ,
`IN_SECTIONS` ,
`XML_ID` ,
`CODE` ,
`TAGS` ,
`TMP_ID` ,
`WF_LAST_HISTORY_ID` ,
`SHOW_COUNTER` ,
`SHOW_COUNTER_START`
)
VALUES (
NULL , NULL , NULL , NULL , NULL , '0', NULL , 'Y', NULL , NULL , '500', '', NULL , NULL , 'text', NULL , NULL , 'text', NULL , '1', NULL , NULL , NULL , NULL , NULL , 'N' , NULL , NULL , NULL, '@intCode' , NULL , NULL , NULL
);
INSERT INTO `b_iblock_element` (
`ID` ,
`TIMESTAMP_X` ,
`MODIFIED_BY` ,
`DATE_CREATE` ,
`CREATED_BY` ,
`IBLOCK_ID` ,
`IBLOCK_SECTION_ID` ,
`ACTIVE` ,
`ACTIVE_FROM` ,
`ACTIVE_TO` ,
`SORT` ,
`NAME` ,
`PREVIEW_PICTURE` ,
`PREVIEW_TEXT` ,
`PREVIEW_TEXT_TYPE` ,
`DETAIL_PICTURE` ,
`DETAIL_TEXT` ,
`DETAIL_TEXT_TYPE` ,
`SEARCHABLE_CONTENT` ,
`WF_STATUS_ID` ,
`WF_PARENT_ELEMENT_ID` ,
`WF_NEW` ,
`WF_LOCKED_BY` ,
`WF_DATE_LOCK` ,
`WF_COMMENTS` ,
`IN_SECTIONS` ,
`XML_ID` ,
`CODE` ,
`TAGS` ,
`TMP_ID` ,
`WF_LAST_HISTORY_ID` ,
`SHOW_COUNTER` ,
`SHOW_COUNTER_START`
)
VALUES (
NULL , NULL , NULL , NULL , NULL , '0', NULL , 'Y', NULL , NULL , '500', '', NULL , NULL , 'text', NULL , NULL , 'text', NULL , '1', NULL , NULL , NULL , NULL , NULL , 'N', NULL , NULL , NULL, '@2intCode' , NULL , NULL , NULL
);
@intCode и @2intCode - это мои идентификаторы, по ним в дальнейшем я смогу найти только-что добавленые артикулы.
После этого, эти строки надо обновить, записать в них нужные данные.
- Код: Выделить всё
#--Обновление созданых элементов
UPDATE `qbox_test`.`b_iblock_element`
SET
`TIMESTAMP_X` = NOW(),
`MODIFIED_BY` = '1',
`DATE_CREATE` = NOW(),
`CREATED_BY` = '1',
`IBLOCK_ID` = '21',
`IBLOCK_SECTION_ID` = '@IBLOCK_SECTION_ID',
`NAME` = '@NAME',
`DETAIL_TEXT` = '@DETAIL_TEXT',
`DETAIL_TEXT_TYPE` = 'html',
`SEARCHABLE_CONTENT` = '@SEARCHABLE_CONTENT',
`IN_SECTIONS` = 'Y',
`XML_ID` = '@ID'
WHERE `b_iblock_element`.`TMP_ID` = '@intCode';
UPDATE `qbox_test`.`b_iblock_element`
SET
`TIMESTAMP_X` = NOW(),
`MODIFIED_BY` = '1',
`DATE_CREATE` = NOW(),
`CREATED_BY` = '1',
`IBLOCK_ID` = '21',
`IBLOCK_SECTION_ID` = '@IBLOCK_SECTION_ID',
`NAME` = '@NAME',
`DETAIL_TEXT` = '@DETAIL_TEXT',
`DETAIL_TEXT_TYPE` = 'html',
`SEARCHABLE_CONTENT` = '@SEARCHABLE_CONTENT',
`IN_SECTIONS` = 'Y',
`XML_ID` = '@2ID',
`WF_PARENT_ELEMENT_ID` = '@ID'
WHERE `b_iblock_element`.`TMP_ID` = '@2intCode';
Дальше прописываение нужных свойств
- Код: Выделить всё
#Properties
#insert into b_iblock_element_property
# (`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`, `VALUE_ENUM`, `VALUE_NUM`)
#values
# (IBLOCK_PROPERTY_ID, '@IBLOCK_ELEMENT_ID', VALUE, VALUE_ENUM, VALUE_NUM);
#Старая цена
insert into b_iblock_element_property
(`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`, `VALUE_NUM`)
values
('74', '@IBLOCK_ELEMENT_ID', '@OLD_PRICE', '@OLD_PRICE');
#Слудющая цена
insert into b_iblock_element_property
(`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`, `VALUE_NUM`)
values
('150', '@IBLOCK_ELEMENT_ID', '@NEXT_PRICE', '@NEXT_PRICE');
#Слудющая переоценка
insert into b_iblock_element_property
(`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`)
values
('149', '@IBLOCK_ELEMENT_ID', '@NEXT_REVALUATION');
#Артикул
insert into b_iblock_element_property
(`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`, `VALUE_NUM`)
values
('70', '@IBLOCK_ELEMENT_ID', '@ARTICLE', '@ARTICLE');
#Гарантия
insert into b_iblock_element_property
(`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`, `VALUE_NUM`)
values
('68', '@IBLOCK_ELEMENT_ID', '@WARANTY', '@WARANTY');
#Производитель
insert into b_iblock_element_property
(`IBLOCK_PROPERTY_ID`, `IBLOCK_ELEMENT_ID`, `VALUE`, `VALUE_ENUM`)
values
('69', '@IBLOCK_ELEMENT_ID', '@BRAND', '@BRAND');
Теперь надо посвязвать элементы с групами
- Код: Выделить всё
insert into b_iblock_section_element
(IBLOCK_SECTION_ID, IBLOCK_ELEMENT_ID)
values
('@IBLOCK_SECTION_ID', '@IBLOCK_ELEMENT_ID');
Добавление каталога и цен
- Код: Выделить всё
insert into b_catalog_product
(ID, QUANTITY, RECUR_SCHEME_LENGTH, RECUR_SCHEME_TYPE )
values
('@ID', '@QUANTITY', '0', 'D')
ON DUPLICATE KEY UPDATE QUANTITY = '@QUANTITY'
- Код: Выделить всё
insert into b_catalog_price
(PRODUCT_ID, CATALOG_GROUP_ID, PRICE, CURRENCY, TIMESTAMP_X)
values
('@PRODUCT_ID', '1', '@PRICE', 'UAH', NOW());
insert into b_catalog_price
(PRODUCT_ID, CATALOG_GROUP_ID, PRICE, CURRENCY, TIMESTAMP_X)
values
('2@PRODUCT_ID', '1', '@PRICE', 'UAH', NOW());
Ну картинки, было бы неплохо. Сначала выгружаем их на FTP а потом прописываем записи в таблицы
- Код: Выделить всё
INSERT INTO `b_file` (
`ID` ,
`TIMESTAMP_X` ,
`MODULE_ID` ,
`HEIGHT` ,
`WIDTH` ,
`FILE_SIZE` ,
`CONTENT_TYPE` ,
`SUBDIR` ,
`FILE_NAME` ,
`ORIGINAL_NAME` ,
`DESCRIPTION`
)
VALUES (
NULL , NOW( ) , 'iblock', '120', '160', '1000', 'image/jpeg', 'catalog_images', '@img', '@img', 'P'
), (
NULL , NOW( ) , 'iblock', '300', '300', '1000', 'image/jpeg', 'catalog_images', '@img', '@img', 'D'
);
Я добавляю две картинки, одна для предварительного просмотра, другая для детального.
ну и собственно привзяка картинок к элементам инфоблока
- Код: Выделить всё
update b_iblock_element set PREVIEW_PICTURE = '@prev_pict', DETAIL_PICTURE = '@det_pict' where ID = '@ID';
update b_iblock_element set PREVIEW_PICTURE = '@prev_pict', DETAIL_PICTURE = '@det_pict' where ID = '@2ID';
Вроде, все, это draft вариант кода, оптимизаций займусь, завтра, но выкладывать не буду, сами додумаете
вот такими вот плясками с бубном, была одержана еще одна проблема над битриксом.