Jump to content

[SOLVED]Как вместо ID товара использовать артикул поставщика?


Recommended Posts

Всем доброго времени суток.

Необходимо обновлять цены напрямую с прайса который присылает поставщик, для этого надо чтобы товар искался не по группам и id а по reference(артикул).

Может кто сталкивался с данным вопросом? Магазин работает на 1.3.6.0.

Заранее благодарен за ответы.

РЕШЕНИЕ для 1.3.6.0 взято с prestadev

 

ДЛЯ ВЕРСИИ 1.3.6.0

 

это:

public static function GETInDatabasID($supplier_reference)

{
 $row = Db::getInstance()->getRow(
 'SELECT supplier_reference,id_product
 FROM '._DB_PREFIX_.'product
 WHERE supplier_reference = "'.$supplier_reference.'"');
	return $row['id_product'];
}  

воткнул в конец classes/product.php

 

Вместо supplier_reference использовал просто refernce.

 

Вот это строку:

$ttttt=Product::GETInDatabasID($info['supplier_reference']);

if ( $ttttt>0)
{
 $info=array('id'=>$ttttt)+$info;;
}

Втыкаем в (admin)/tabs/adminimport.php после:

public function productImport()

{
.......
	{
		if (Tools::getValue('convert'))
			$this->utf8_encode_array($line);
		$info = self::getMaskedRow($line);

 

ДЛЯ ВЕРСИИ 1.4.5.1

 

В (admin)/tabs/adminimport.php вносим следующие изменения:

 

строчка: (у меня 48 строка)

public static $required_fields = array('name');

меняем на:

public static $required_fields = array();

это что-бы скрипт не требовал наименование товара.

 

после строчек: (у меня получается после 590 строки)

 

public function productImport()
{
global $cookie;
$this->receiveTab();
$handle = $this->openCsvFile();
$defaultLanguageId = (int)(Configuration::get('PS_LANG_DEFAULT'));
self::setLocale();
for ($current_line = 0; $line = fgetcsv($handle, MAX_LINE_SIZE, Tools::getValue('separator')); $current_line++)
{
if (Tools::getValue('convert'))
$line = $this->utf8_encode_array($line);
$info = self::getMaskedRow($line);
..........

 

вставляем:

 

/* HACK product refernce -> ID*/
$ttttt=Product::GETInDatabasID($info['reference']);

if ( $ttttt>0)
{
$info=array('id'=>$ttttt)+$info;
}else{
echo("Bad request");
}

print_r($info);
/*HACK*/

 

В classes/product.php изменяем:

 

следующие строки либо удалем либо комментим: (примерно с 2319 до 2327, смотрите что-бы не осталось лишних скобок)

 

/*
* Select all features for a given language
*
* @param $id_lang Language id
* @return array Array with feature's data
*/
static public function getFrontFeaturesStatic($id_lang, $id_product)
{
return Db::getInstance()->ExecuteS('
SELECT name, value, pf.id_feature
FROM '._DB_PREFIX_.'feature_product pf
LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.intval($id_lang).')
LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.intval($id_lang).')
WHERE pf.id_product = '.intval($id_product));
}

На место строк выше или под закоментированные строки:

 

/* HACK */
static public function getFrontFeaturesStatic($id_lang, $id_product)
{
	$result=Db::getInstance()->ExecuteS('
	SELECT name, value, pf.id_feature
	FROM '._DB_PREFIX_.'feature_product pf
	LEFT JOIN '._DB_PREFIX_.'feature_lang fl ON (fl.id_feature = pf.id_feature AND fl.id_lang = '.intval($id_lang).')
	LEFT JOIN '._DB_PREFIX_.'feature_value_lang fvl ON (fvl.id_feature_value = pf.id_feature_value AND fvl.id_lang = '.intval($id_lang).')
	WHERE pf.id_product = '.intval($id_product).' order by name');

   $resultsArray = array();
	foreach ($result AS $row)
	{
		$row['name'] = product::hideFeaturePosition($row['name']);
		$resultsArray[] = $row;
	}
	return $resultsArray;
}


static public function hideFeaturePosition($name)
{
	return preg_replace('/^[0-9]+\./', '', $name);
}


/* HACK */

 

в конец файла до закрывающих строк:

 

}

?>

добавляем:

 

/* HACK product refernce -> ID*/
public static function GETInDatabasID($supplier_reference)
{
  $row = Db::getInstance()->getRow(
  'SELECT reference,id_product
  FROM '._DB_PREFIX_.'product
  WHERE reference = "'.$supplier_reference.'"');

	return $row['id_product'];
}
/* HACK */

 

Может кому-то этим смогу помочь.

Link to comment
Share on other sites

  • 1 month later...

Вот, я срашивал о том же в разделе Обсуждение скрипта, а тему закрыли... как СПАМ!

Я её выложил на английском форуме -- там мне написали в личку: "Да, это всего несколько строчек кода. Но это очень нужная функция в магазине! Поэтому -- 50 $". Можно я этот код в своей теме выложу? Я тоже хочу, чтобы она помогла ещё кому-то. ...И спасибо автору!

Link to comment
Share on other sites

  • 7 months later...

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

classes/product.php

 

Помогите если кто разобрался.

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

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...