6poD9Ira Posted February 1, 2011 Share Posted February 1, 2011 Всем доброго времени суток. Необходимо обновлять цены напрямую с прайса который присылает поставщик, для этого надо чтобы товар искался не по группам и 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 More sharing options...
Dimitri Yelquin Posted March 13, 2011 Share Posted March 13, 2011 Вот, я срашивал о том же в разделе Обсуждение скрипта, а тему закрыли... как СПАМ!Я её выложил на английском форуме -- там мне написали в личку: "Да, это всего несколько строчек кода. Но это очень нужная функция в магазине! Поэтому -- 50 $". Можно я этот код в своей теме выложу? Я тоже хочу, чтобы она помогла ещё кому-то. ...И спасибо автору! Link to comment Share on other sites More sharing options...
duker Posted October 28, 2011 Share Posted October 28, 2011 Добрый день, попробовал это проделать в новой версии 1.4.5.1 и не получилось. сайт просто не запускается когда меняешь файл: classes/product.php Помогите если кто разобрался. мне нужно обновлять цены количество, если эти позиции уже есть на сайте, а если нету то что бы статус становился под заказ или просто нету. Link to comment Share on other sites More sharing options...
6poD9Ira Posted October 28, 2011 Author Share Posted October 28, 2011 Немного дополнил и подредактировал. У меня стоит версия 1.4.5.1 все работает. Link to comment Share on other sites More sharing options...
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now