Главная
Блог разработчиков phpBB
 
+ 17 предустановленных модов
+ SEO-оптимизация форума
+ авторизация через соц. сети
+ защита от спама

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

Anna | 31.05.2014 | нет комментариев

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


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

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

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

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

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

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

Сейчас по подробнее о решении всякой из задач.

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

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

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

В форме менеджер выбирает файл, тот, что должен удачно загрузиться на сервер.
Выходит файл загружен на сервер. Сейчас мы имеем два варианта:
1.Пустить на обработку каждый файл. Отличный вариант, но если там число записей десятки тысяч, то процесс импорта будет не контролируемым.
2.2-й вариант, его мы и применяли.
2.1 Позже загрузки файла определяется число заполненных строк.
2.2 Генерируется скрипт, отправляющий номера строк для обработки
2.2.1 Отображается процесс импорта в процентах
2.2.2 Отображается итог импорта в виде таблицы, растущей вниз, по ходу импорта.
2.3 Из полученной таблицы менеджеру виден итог и допустимые действия над всяким товаром.
Для конкретики привожу пример товаров из прайс-листа.

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

Последующие наши шаги заключаются в привязке внутреннего номера к каталожным товарам магазина и базы «TecDoc».
1. Поиск в каталоге по внутреннему номеру
2. Если товар обнаружен- обновляем для него колляции (такие как цены и число)
3. Если товар не обнаружен в магазине делаем поиск по «TecDoc»
3.1 Если для данного подлинного номера и соответствующих к нему аналогов обнаружен 1 товар переходим к «добавлению нового товара»
3.2 Если обнаружено несколько товаров отображаем ссылку на «выбор одного из товаров»
3.3 Если товар не обнаружен даем ссылку на «выбор всякого товара»
3.4 Если товаров несколько либо не обнаружено ни одного, тогда проводим модификации записей аналогов(удаление лишних символов либо разбиение на массив, когда в одном поле несколько номеров, поделенных символом «/»).Если позже проведения операций со значениями обнаружена одна позиция — исполняем «добавление нового товара»
4. «Добавление нового товара» — в каталоге создается новейший товар, исходя из полей в прайс-листе, недостающие свойства товара получают значения по умолчанию. В таблице итогов возникает запись «Добавлен»
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="<input type="button" name="add" 
	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="<span style='color:green;'>Добавлен</span>";
document.getElementById("id_opt_" inum).innerHTML="<a style="cursor:pointer; 
text-decoration:underline; color:#0090ff;" onclick="createWindow('1','" data "',
'" inum "','" knum1 "','" knum2 "','" name "','" knum3 "','" knum4 "','" knum5 "',
'" wh1 "','" wh2 "','" pz "','" pr "','" num_fnd "','" lim "')">Изменить</a>";
}
}
document.getElementById('open_block').style.display='none';
}
</ script>

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

< ?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 '<div  style="display: none;"><b>'; 
		var_dump($query); echo '</b>';
		echo '<pre>'; var_dump($row1); echo '</pre></div>';

		$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;
	}
	?>

 

Источник: programmingmaster.ru

Оставить комментарий
Форум phpBB, русская поддержка форума phpBB
Рейтинг@Mail.ru 2008 - 2017 © BB3x.ru - русская поддержка форума phpBB