ua
ua
ГоловнаБлог

Интеграция БД TecDoc с интернет-магазином автозапчастей

Написание статьи стало последствием работы в довольно интересном проекте, результатом которого должен быть интернет-магазин, с возможностью привязки номенклатуры к каталогу деталей «TecDoc».

Для связи сайт с каталогом «TecDoc», его базу данных пришлось выгрузить в MySQL. На этом останавливаться не будем, так как в просторах всемирной паутины эту информацию можно найти без проблем.

Данный интернет магазин занимается продажей запчастей для легковых автомобилей.

Основа интернет-магазина — CMS «HostCMS». Поскольку заказчик имел лицензию на эту CMS, то пришлось работать, так сказать, с тем, что есть. Хотя из коробки этот продукт тоже может порадовать своими возможностями.

Основная доработка интернет-магазина заключается в возможности привязки товаров к каталогу — базе данных «TecDoc», с тем учетом, что номенклатура может загружаться как с прайс-листа в формате *.xls, так и вручную — через панель управления сайтом.

Для пользователя имеются инструменты, позволяющие найти товар в магазине:

  • По наименованию и фирме,
  • По оригинальному номеру из «TecDoc»,
  • По внутреннему номеру в каталоге интернет-магазина,
  • По дереву категорий деталей,
  • И главное с помощью инструмента «Ваш автомобиль».
  • Теперь по подробнее о решении каждой из задач.

Импорт товаров.

Самая первая задача заключалась в загрузке новой номенклатуры из сформированного прайс-листа. Поскольку прайс-лист был в формате *.xls, а готового инструмента для работы с этим форматом в данной CMS нет — решено использовать «PHPExcel»

«PHPExcel» — довольно удобный инструмент, позволяющий не только считывать данные из файла, но и генерировать свои файлы.

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

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

1.Пустить на обработку весь файл. Хороший вариант, но если там количество записей десятки тысяч, то процесс импорта будет не контролируемым.,

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

2.1 После загрузки файла определяется количество заполненных строк.

2.2 Генерируется скрипт, отправляющий номера строк для обработки

2.2.1 Отображается процесс импорта в процентах

2.2.2 Отображается результат импорта в виде таблицы, растущей вниз, по ходу импорта.

2.3 Из полученной таблицы администратору виден результат и возможные действия над каждым товаром.

Для конкретики привожу пример товаров из прайс-листа.

Когда скрипт посылает номера строк, которые следует обработать, мы будем получать массив свойств для каждого товара. То есть каждая строка в прайс-листе соответствует отдельному товару, и для этого товара мы вытягиваем такие свойства, как цена, количество, аналоги каталога «TecDoc» и др. Если потребуется создать инструмент, в котором поля прайс-листа могут меняться, то следует в первой строке каждого столбца писать опознавательный атрибут (например ‘V.numb’, ‘Name.manufacturer’ и т.д.), а второй строкой будет заголовок для столбцов. В итоге импорт придется начинать с третьей строки. И перед импортом следует определить необходимые нам поля, исходя из опознавательных атрибутов.

Дальнейшие наши шаги заключаются в привязке внутреннего номера к каталожным товарам магазина и базы «TecDoc».

1. Поиск в каталоге по внутреннему номеру

2. Если товар найден- обновляем для него характеристики (такие как цены и количество)

3. Если товар не найден в магазине делаем поиск по «TecDoc»

3.1 Если для данного оригинального номера и соответствующих к нему аналогов найден 1 товар переходим к «добавлению нового товара»

3.2 Если найдено несколько товаров отображаем ссылку на «выбор одного из товаров»

3.3 Если товар не найден даем ссылку на «выбор любого товара»

3.4 Если товаров несколько или не найдено ни одного, тогда проводим модификации записей аналогов(удаление лишних символов или разбиение на массив, когда в одном поле несколько номеров, разделенных символом «/»).Если после проведения операций со значениями найдена одна позиция — выполняем «добавление нового товара»

4. «Добавление нового товара» — в каталоге создается новый товар, исходя из полей в прайс-листе, недостающие свойства товара получают значения по умолчанию. В таблице результатов появляется запись «Добавлен»

5. «Выбор одного из товаров» — диалоговое окно, является результатом выполнения скрипта. Скрипт активируется кликом напротив товара, для которого найдено несколько позиций в «TecDoc». Он принимает найденные номера позиций «TecDoc», и позволяет выбрать среди них нужную:

5. «Выбор одного из товаров» — диалоговое окно, является результатом выполнения скрипта. Скрипт активируется кликом напротив товара, для которого найдено несколько позиций в «TecDoc». Он принимает найденные номера позиций «TecDoc», и позволяет выбрать среди них нужную:

6. «Выбор любого товара» — диалоговое окно, является результатом выполнения скрипта. Скрипт активируется кликом напротив товара, для которого не найдено ни одной позиций в «TecDoc» и позволяет выбрать среди всех производителей нужную деталь:

Внешний вид модуля:

Процесс импорта:

MySQL.

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

Задача 1. Поиск адреса изображения

SELECT

CONCAT(GRA_TAB_NR, ‘/’,GRA_GRD_ID, ‘.’,

IF(LOWER(DOC_EXTENSION)=’jp2′, ‘jpg’, LOWER(DOC_EXTENSION))) AS PATH

FROM

LINK_GRA_ART

INNER JOIN GRAPHICS ON GRA_ID = LGA_GRA_ID

INNER JOIN DOC_TYPES ON DOC_TYPE = GRA_DOC_TYPE

WHERE

LGA_ART_ID = @ARTICLE AND

(GRA_LNG_ID = 16 OR GRA_LNG_ID = 255) AND

GRA_DOC_TYPE <> 2

ORDER BY GRA_GRD_ID

Добавляем путь к каталогу изображений, делаем проверку существования, resize — если нужно, и можно смело выводить на сайт.

Задача 2. Поиск аналогов:

SELECT ARL_KIND,

IF (ART_LOOKUP.ARL_KIND = 2, SUPPLIERS.SUP_BRAND, BRANDS.BRA_BRAND) AS BRAND,

ARL_DISPLAY_NR

FROM

ART_LOOKUP

LEFT JOIN BRANDS ON BRA_ID = ARL_BRA_ID

INNER JOIN ARTICLES ON ARTICLES.ART_ID = ART_LOOKUP.ARL_ART_ID

INNER JOIN SUPPLIERS ON SUPPLIERS.SUP_ID = ARTICLES.ART_SUP_ID

WHERE

ARL_ART_ID = @ART_ID AND

ARL_KIND IN (2, 3, 4)

ORDER BY

ARL_KIND,

BRA_BRAND,

ARL_DISPLAY_NR

LIMIT

100

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

Задача 3. Вывод информации о товаре

SELECT

ART_ARTICLE_NR,

SUP_BRAND,

DES_TEXTS.TEX_TEXT AS ART_COMPLETE_DES_TEXT,

DES_TEXTS2.TEX_TEXT AS ART_DES_TEXT,

DES_TEXTS3.TEX_TEXT AS ART_STATUS_TEXT

FROM

ARTICLES

INNER JOIN DESIGNATIONS ON DESIGNATIONS.DES_ID = ART_COMPLETE_DES_ID

AND DESIGNATIONS.DES_LNG_ID = @LNG_ID

INNER JOIN DES_TEXTS ON DES_TEXTS.TEX_ID = DESIGNATIONS.DES_TEX_ID

LEFT JOIN DESIGNATIONS AS DESIGNATIONS2 ON DESIGNATIONS2.DES_ID = ART_DES_ID

AND DESIGNATIONS2.DES_LNG_ID = @LNG_ID

LEFT JOIN DES_TEXTS AS DES_TEXTS2 ON DES_TEXTS2.TEX_ID = DESIGNATIONS2.DES_TEX_ID

INNER JOIN SUPPLIERS ON SUP_ID = ART_SUP_ID

INNER JOIN ART_COUNTRY_SPECIFICS ON ACS_ART_ID = ART_ID

INNER JOIN DESIGNATIONS AS DESIGNATIONS3 ON DESIGNATIONS3.DES_ID = ACS_KV_STATUS_DES_ID

AND DESIGNATIONS3.DES_LNG_ID = @LNG_ID

INNER JOIN DES_TEXTS AS DES_TEXTS3 ON DES_TEXTS3.TEX_ID = DESIGNATIONS3.DES_TEX_ID

WHERE

ART_ID = @ART_ID;

Не стоит забывать о @LNG_ID — и ставить туда значение, например равное 16, для русского языка.

Поиск товаров.

Каталог

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

Фильтрация

В качестве фильтрации можно создать дерево категорий, и позволить посетителю перемещаться в нем. Например:

  • -Легковые автомобили
  • —Кузов
  • —Детали кузова/крыло/буфер
  • —Остекление / зеркала
  • —Крышки/капоты/двери/сдвижная крыша/складная крыша
  • —Дополнительная фара/ комплектующие
  • —Система освещения / сигнализация
  • —Двигатель
  • —Прокладки
  • —Система смазки
  • —Головка цилиндра
  • —Система подачи воздуха
  • —Система выпуска
  • —Детали монтажа
  • —Впрыск карбамида
  • —Глушитель в сборе
  • —Катализатор
  • —Лямбда-зонд

И теперь при выборе фильтра отображать, только те детали, каталога, которые связаны с данной категорией, то есть добавляем фильтрацию по категории, благодаря привязке к позиции из «TecDoc». Обновление списка товаров в каталоге при выборе фильтра можно сделать как динамическим с использованием Ajax, так и с обновлением страницы. Ниже приведен запрос выводящий дерево подкатегорий для категории легковые автомобили (10001):

SELECT

STR_ID, STR_ID_PARENT,

TEX_TEXT AS STR_DES_TEXT,

IF(EXISTS(

SELECT * FROM SEARCH_TREE AS SEARCH_TREE2

WHERE

SEARCH_TREE2.STR_ID_PARENT <=> SEARCH_TREE.STR_ID LIMIT 1

), 1, 0) AS DESCENDANTS

FROM

SEARCH_TREE

INNER JOIN DESIGNATIONS ON DES_ID = STR_DES_ID

INNER JOIN DES_TEXTS ON TEX_ID = DES_TEX_ID

WHERE

STR_ID_PARENT <=> 10001

AND DES_LNG_ID = 16;

Поскольку запрос будет выполняться буквально на каждой странице каталога, его результат желательно добавить в кеш. Да и в общем следует изучить узкие места, дающие большую нагрузку и задержку. Очень кстати может прийтись модуль «Кеширование» в этой CMS. Хотя если осмотреться, то, наверное, любой фреймворк позволит закешировать самые нагруженные места на сайте.

Поиск по внутреннему номеру

Этот раздел не вызовет вопросов, поскольку здесь мы проверяем артикул товара, и если он существует, отобразим страницу этой позиции. Можно дополнить этот раздел авто-заполнением при вводе номера артикула для пользователя.

Поиск по оригинальному номеру

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

Но…

Скорость выполнения подобного запроса довольно низкая. Даже используя всевозможные оптимизации для сервера MySQL, результат огорчает.

Уже не один раз в проектах использовался «Sphinx» (поисковая система), и всегда эта технология позволяла только улучшить проект. И в этот раз при использовании «Sphinx» мы были удивлены:

  • Простотой интеграции и настройки.
  • Скоростью индексации.
  • И, наконец, скоростью поиска.

Скорректировали конфигурационный файл для нужд проекта, произвели повторную индексацию, и скорость поиска действительно возросла, по сравнению с отсутствием «Sphinx».

Поиск по ключевым словам

Поскольку проблема в скорости была с оригинальным номером, то решено было, что основной поиск так же следует делать с использованием технологии «Sphinx». К тому же эта технология позволяет использовать:

  • дополнительные атрибуты при поиске,
  • распределенный поиск,
  • поддержка русского языка,
  • создание нескольких индексов.

Кстати, в начале проекта упоминался инструмент «Ваш автомобиль». Данный инструмент позволяет из всего каталога «TecDoc» выбрать единственную модификацию автомобиля и просматривать все товары, так или иначе связанные только с этим автомобилем. Инструмент представляет из себя набор полей, обновляющихся динамически в зависимости от выбора предыдущего поля. Например, после выбора года производства автомобиля, выбираются доступные марки автомобилей, затем выбираем модель и тип двигателя. Результат его работы показан ниже:

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

Подведем итог

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

  • ООП без него, тут будет сложно…
  • Основа, так сказать костяк сайта «MySQL»«PHP» , «HTML»«JS»«CSS».
  • Понимание принципа работы CMS «HostCMS»
  • Умение работать с «API» других разработчиков
  • Поиск «Sphinx»
  • Умение исследовать загруженные места сайта и производить оптимизацию кода
  • Желательно «jQuery» или «Prototype»
  • Ну и естественно, правда спорно, умение работать с какой-нибудь «Интегрированной средой разработки».

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

P.S. В качестве дополнений привожу пару скриптов из проекта, которые хоть являются неокончательными, ну понять суть по ним можно.

Скрипт, отвечающий за разбиение процесса на запросы, отвечает за добавление из списка, а так же информирующий о процессе импорта:

< script>

// knum1,knum2,knum3,knum4,knum5 — Номера аналогов

// inum — Внутренний номер

// pz,pr — Цены

// lim — Лимит

// wh1, wh2 — Количество на складе

// count — Количество

// art_id — ИД артикула

//name — Название из прайса

//num_fnd — Номера из tecDoc

var from = 3;

var to = 3;

var percent = 0;

var chk = 0;

var cond = »;

function get_list(fromf,tof) {

$.post(

«/admin/import_excel_new/get_list.php»,

{

from: fromf,

to: tof

},outputt

);

function outputt(data) {

if(chk == 0)

{

from += 1;

to += 1;

percent = ( from / cond ) * 100;

}

else

{

from = cond;

percent = ( from / cond ) * 100;

}

if ((to — cond) > 0)

{

to = cond;

chk = 1;

get_list(from,to);

to = 0;

}else

if((to — cond) == 0)

{

chk = 1;

get_list(from,to);

to = 0;

}

document.getElementById(«perc»).innerHTML=percent.toFixed(2)+»%»;

$(«#progressbar»).children(«.ui-progressbar-value»).css(«width», percent+»%»);

document.getElementById(«tab_cont»).innerHTML+=data;

if(chk == 1)

{

$(«#progressbar»).css(«display», «none»);

$(«#progresspercent»).css(«display», «none»);

}

if ( chk == 0)

{

get_list(from,to);

//setTimeout(get_list, 100, from, to);

}

}

}

alert(«Не производите никаких действий, пока индикатор загрузки не дойдет до конца!»);

get_list(from,to);

function createWindow(count,art_id,inum,knum1,knum2,name,knum3,knum4,knum5,wh1,

wh2,pz,pr,num_fnd,lim) {

$.post(

«/admin/import_excel_new/get_tab.php»,

{

id: art_id,

num_fnd: num_fnd

},outputt2

);

function outputt2(data) {

document.getElementById(«inum»).innerHTML=inum;

document.getElementById(«cntnt»).innerHTML=data;

document.getElementById(«btn»).innerHTML=»

id=\»add_id\»

style=\»float:right; margin-top:5px;\»

value=\»Добавить\» onclick=\»insert_item(\'»+count+»\’,

\'»+inum+»\’,\'»+knum1+»\’,\'»+knum2+»\’,\'»+name+»\’,

\'»+knum3+»\’,\'»+knum4+»\’,\'»+knum5+»\’,\'»+wh1+»\’,

\'»+wh2+»\’,\'»+pz+»\’,\'»+pr+»\’,\'»+num_fnd+»\’,

\'»+lim+»\’)\» />»;

}

document.getElementById(«open_block»).style.display=»block»;

}

function loadNum() {

bnum = document.getElementById(«brand_id»).value;

$.post(

«/admin/import_excel_new/get_number.php»,

{

num: bnum

},outputt11

);

function outputt11(data) {

document.getElementById(«list_num»).innerHTML=data;

}

}

function insert_item(count,inum,knum1,knum2,name,knum3,knum4,knum5,wh1,wh2,pz,

pr,num_fnd,lim) {

if (document.getElementById(«opt_id_1»).checked === true)

art_id=document.getElementById(«art_list_id»).value;

else

if (document.getElementById(«opt_id_2»).checked === true)

art_id=document.getElementById(«txtnum_id»).value;

if(document.getElementById(«txtnum_id»).value!=»»)

{

$.post(

«/admin/import_excel_new/insert_item.php»,

{

count: count,

id: art_id,

inum: inum,

knum1: knum1,

knum2: knum2,

name: name,

knum3: knum3,

knum4: knum4,

knum5: knum5,

wh1: wh1,

wh2: wh2,

pz: pz,

pr: pr,

num_fnd: num_fnd,

lim: lim

},outputt3

);

function outputt3(data) {

document.getElementById(«id_»+inum).innerHTML=»Добавлен»;

document.getElementById(«id_opt_»+inum).innerHTML=»

text-decoration:underline; color:#0090ff;\» onclick=\»createWindow(\’1\’,\'»+data+»\’,

\'»+inum+»\’,\'»+knum1+»\’,\'»+knum2+»\’,\'»+name+»\’,\'»+knum3+»\’,\'»+knum4+»\’,\'»+knum5+»\’,

\'»+wh1+»\’,\'»+wh2+»\’,\'»+pz+»\’,\'»+pr+»\’,\'»+num_fnd+»\’,\'»+lim+»\’)\»>Изменить»;

}

}

document.getElementById(\’open_block\’).style.display=\’none\’;

}

Функция добавления товара исходя из номера детали и названия производителя

< ?php

// $DataBase — Инстанс адаптера БД

// $knum1,$knum2,$knum3,$knum4,$knum5 — Номера аналогов

// $inum — Внутренний номер

// $pz,$pr — Цены

// $user — Идентификатор пользователя

// $date — Дата

// $lim — Лимит

// $wh1, $wh2 — Количество на складе

// $nameProizvoditel, $numberProizvod — Название производителя, и номер детали

function addToCatalogForNoTecdoc($DataBase,$knum1,$knum2,$knum3,$knum4,

$knum5,$inum,$pr,$user,$date,$pz,$lim,$wh1,$wh2,$nameProizvoditel,$numberProizvod){

$symbols = array(«`»,» «, «~», «!», «@», «#», «$», «%»,

«^», «&», «*», «(«, «)», «-«, «_», «=», «+», «/», «\\»,

«|», «?», «:», «;», «\»», «‘», «№», «,», «.»);

$numberProizvodVithSymbols = str_replace($symbols, », $numberProizvod);

$nameProizvoditelUpper=strtoupper($nameProizvoditel);

$query = »

SELECT DISTINCT

IF (ART_LOOKUP.ARL_KIND IN (3, 4), BRANDS.BRA_BRAND, SUPPLIERS.SUP_BRAND) AS brand,

ART_LOOKUP.ARL_SEARCH_NUMBER AS NUMBER,

`ARL_ART_ID` AS item_id,

`ARL_SEARCH_NUMBER` AS num_fnd,

`DES_TEXTS`.`TEX_TEXT` AS item_txt

FROM

ART_LOOKUP

LEFT JOIN BRANDS ON BRANDS.BRA_ID = ART_LOOKUP.ARL_BRA_ID

INNER JOIN ARTICLES ON ARTICLES.ART_ID = ART_LOOKUP.ARL_ART_ID

INNER JOIN SUPPLIERS ON SUPPLIERS.SUP_ID = ARTICLES.ART_SUP_ID

INNER JOIN DESIGNATIONS ON DESIGNATIONS.DES_ID = ARTICLES.ART_COMPLETE_DES_ID

INNER JOIN DES_TEXTS ON DES_TEXTS.TEX_ID = DESIGNATIONS.DES_TEX_ID

WHERE

ART_LOOKUP.ARL_SEARCH_NUMBER = ‘».$numberProizvodVithSymbols.»‘ AND

ART_LOOKUP.ARL_KIND IN (1, 2, 3, 4) AND

DESIGNATIONS.DES_LNG_ID = 16

AND (BRANDS.BRA_BRAND='».$nameProizvoditelUpper.»‘ OR

SUPPLIERS.SUP_BRAND='».$nameProizvoditelUpper.»‘)

GROUP BY

brand,

NUMBER

;»;

$result1 = $DataBase->query($query);

$row1 = mysql_fetch_array($result1);

echo ‘

‘;

var_dump($query); echo ‘‘;

echo ‘

'; var_dump($row1); echo '

‘;

$art_id=$row1[«item_id»];

$txt = $row1[‘item_txt’];

$brand = $row1[‘brand’];

$rez=array();

if($row1){

$rez[‘status’]=true;

}else{

$rez[‘status’]=false;

}

if($rez[‘status’]){

//товар

$DataBase->Insert(‘shop_items_catalog_table’, array(

‘shop_currency_id’ => ‘4’,

‘shop_shops_id’ => ‘3’,

‘shop_items_catalog_name’ => $brand.’: ‘.$txt,

‘shop_items_catalog_marking’ => $art_id,

‘shop_vendorcode’ => $knum1,

‘shop_extension’ => $inum,

‘shop_items_catalog_price’ => $pr,

‘users_id’ => $user,

‘shop_items_catalog_date_time’ => $date,

‘shop_items_catalog_putoff_date’ => $date,

‘shop_items_catalog_weight’=>0

));

$last_id = mysql_insert_id();

//номера

function addToMarking($DataBase,$marking_id, $vendor_id){

if(trim($vendor_id)!=»» && $vendor_id!=» «){

$DataBase->Insert(‘marking’, array(‘marking_id’

=> $marking_id, ‘vendor_id’ => $vendor_id));

}

}

addToMarking($DataBase,$art_id, $numberProizvod);

addToMarking($DataBase,$art_id, $knum1);

addToMarking($DataBase,$art_id, $knum2);

addToMarking($DataBase,$art_id, $knum3);

addToMarking($DataBase,$art_id, $knum4);

addToMarking($DataBase,$art_id, $knum5);

//склады

function addToShop_warehouse_items_table($DataBase,$shop_warehouse_id,

$shop_items_catalog_item_id, $shop_warehouse_items_count, $users_id){

if(trim($vendor_id)!=»» && $vendor_id!=» «){

$DataBase->Insert(‘shop_warehouse_items_table’,

array(

‘shop_warehouse_id’ => $shop_warehouse_id,

‘shop_items_catalog_item_id’ => $shop_items_catalog_item_id,

‘shop_warehouse_items_count’ => $shop_warehouse_items_count,

‘users_id’ => $users_id

));

}

}

$whResult=0;

if(trim($wh1)!=»»){

$whResult=$wh1;

}else{

$whResult=0;

}

addToShop_warehouse_items_table($DataBase,4,

$last_id, $whResult, $user);

if(trim($wh2)!=»»){

$whResult=$wh2;

}else{

$whResult=0;

}

addToShop_warehouse_items_table($DataBase,3,

$last_id, $whResult, $user);

addToShop_warehouse_items_table($DataBase,5,

$last_id, 0, $user);

function addToShop_prices_to_item_table ($DataBase,$last_id, $prices, $p){

$DataBase->Insert(‘shop_prices_to_item_table’,

array(‘shop_items_catalog_item_id’ => $last_id,

‘shop_list_of_prices_id’ => $prices, ‘shop_prices_to_item_value’ => $p));

}

//цены

addToShop_prices_to_item_table ($DataBase,$last_id, 4, $pz);

addToShop_prices_to_item_table ($DataBase,$last_id, 5, $pr);

//лимит

$DataBase->Insert(‘shop_properties_items_table’,

array(‘shop_items_catalog_item_id’ => $last_id,

‘shop_list_of_properties_id’ => 155,

‘shop_properties_items_value’ => $lim));

$param = array();

$param[‘item_id’] = $last_id;

$param[‘path’] = ‘item_’ . $last_id;

$DataBase->Update(‘shop_items_catalog_table’,

array(‘shop_items_catalog_item_id’ => $param[‘item_id’],

‘shop_items_catalog_path’ => $param[‘path’] ),

»

`shop_currency_id` = ‘4’ and

`shop_shops_id` = ‘3’ and

`shop_items_catalog_name` = ‘».$brand . ‘: ‘ . $txt.»‘ and

`shop_items_catalog_marking` = «.$art_id .» and

`shop_vendorcode` = ‘».$knum1.»‘ and

`shop_extension` = ‘».$inum.»‘ and

`shop_items_catalog_price` = «.$pr.»

»

);

//изобр

$img=getImgForARTid($DataBase,$art_id);

if($img)

{

$DataBase->Insert(‘shop_properties_items_table’,

array(‘shop_items_catalog_item_id’ => $last_id,

‘shop_list_of_properties_id’ => 164,

‘shop_properties_items_value’ => $img));

}

$img=»;

}

$rez[‘str_item’]=$art_id;

$rez[‘str_num_find’]=$row1[«num_fnd»];

return $rez;

}

?>

P.S. Чтобы получать наши новые статьи раньше других или просто не пропустить новые публикации — подписывайтесь на нас в FacebookVKTwitterLiveJournal и LinkedIn

Автор
Микита Семенов
CEO, SECL Group
Генеральний директор digital-агентства «SECL Group», організатор нетворкінг турів для ІТ фахівців «IT Tourist», автор блогу «Digitov» і засновник юридичної компанії «Taxov». З 2002 року в ІТ. Автор численних досліджень і статей, доповідач профільних конференцій, незалежний консультант для десятків компаній.

Схожі публікації

Більше про нас?
Компанія
Більше кейсів?
Роботи
Є проект?
Контакти
Канада

240 Richmond Street W
Toronto ON M5V 1V6
+1 (647) 946-92-12

США

3524 Silverside Road
35B, Wilmington,
Delaware 19810-4929
+1 (929) 237-12-11

Україна

79039, м. Львів,
вул. Дмитра Бортнянського, 23
+380 (44) 389-90-39

Copyright © 2005 – 
2024
, ГК «SECL Group»