#php #prestashop
#php #prestashop
Вопрос:
У меня возникает проблема, когда я пытаюсь добавить новый продукт в свою таблицу ps_products из prestashop, проблема в том, что мне нужно использовать свой собственный идентификатор, но prestashop всегда вставляет автоинкремент идентификатора, я используюPSWebServiceLibrary.php и это мой файл PHP:
<?php
ini_set('display_errors',1);
ini_set('display_startup_errors',1);
error_reporting(-1);
define('DEBUG', true);
define('_PS_DEBUG_SQL', true);
define('PS_SHOP_PATH', 'http://localhost/ShopBeta');
define('PS_WS_AUTH_KEY', 'F9NV15SH8FZ9T6I2X22TJP661RXFR91N');
require_once('../PSWebServiceLibrary.php');
try {
$webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);
$opt = array('resource' => 'products');
$xml = $webService->get(array('url' => PS_SHOP_PATH.'/api/products?schema=synopsis'));
$resources = $xml->children()->children();
/*
unset($resources->position_in_category);
unset($resources->manufacturer_name);
$resources->price = '1000';
$resources->active = '1';
$resources->quantity = '50';
$resources->link_rewrite = 'blabla';
$resources->name->language[0][0] = 'blabla';
$resources->description->language[0][0] = '<p>blabla</p>';
$resources->description_short->language[0][0] = 'blabla';
$resources->associations = '';
$opt = array('resource' => 'products');
$opt['postXml'] = $xml->asXML();
$xml = $webService->add($opt); */
$ps_product = <<<XML
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<product>
<id>50</id>
<in_stock>1</in_stock>
<id_manufacturer>9</id_manufacturer>
<id_supplier>9</id_supplier>
<id_category_default>19</id_category_default>
<new>1</new>
<cache_default_attribute></cache_default_attribute>
<id_default_image></id_default_image>
<id_default_combination></id_default_combination>
<id_tax_rules_group>1</id_tax_rules_group>
<position_in_category></position_in_category>
<type>simple</type>
<id_shop_default></id_shop_default>
<reference>Kenichi</reference>
<supplier_reference>RF_kenichi</supplier_reference>
<location></location>
<width>0.6</width>
<height>0.2</height>
<depth>0.4</depth>
<weight>0.068357</weight>
<quantity_discount>0</quantity_discount>
<ean13></ean13>
<upc>09876543212</upc><!--Codigo de barras de producto-->
<cache_is_pack></cache_is_pack>
<cache_has_attachments></cache_has_attachments>
<is_virtual>0</is_virtual>
<on_sale>0</on_sale><!--Si es 0 se quita la etiqueta de en oferta, si es uno se muestra la etiqueta-->
<online_only>1</online_only>
<ecotax></ecotax>
<minimal_quantity>1</minimal_quantity>
<price>450</price><!--Precio sin impuestos incluidos-->
<wholesale_price></wholesale_price>
<unity></unity>
<unit_price_ratio></unit_price_ratio>
<additional_shipping_cost></additional_shipping_cost>
<customizable>0</customizable>
<text_fields>0</text_fields>
<uploadable_files>0</uploadable_files>
<active>1</active><!--Si el producto esta activado para mostrarce en la tienda es 1-->
<redirect_type></redirect_type>
<id_product_redirected></id_product_redirected>
<available_for_order>1</available_for_order>
<available_date>2020-08-18</available_date>
<condition>new</condition><!--Este campos nos permite establecer si el producto es new, used, refurbished-->
<show_price>1</show_price>
<state>1</state><!--Esto nos permite mostrar el producto en el back office-->
<indexed>1</indexed>
<visibility>both</visibility>
<advanced_stock_management>1</advanced_stock_management>
<date_add>2020-08-18</date_add>
<date_upd>2020-08-18</date_upd>
<meta_description><language id='1'>Prueba directa</language><language id='2'>Prueba directa</language></meta_description>
<meta_keywords><language id='1'>Kenichi</language><language id='2'>Kenichi</language></meta_keywords>
<meta_title><language id='1'>Kenichi</language><language id='2'>Kenichi</language></meta_title>
<link_rewrite><language id='1'>kenichi-manga</language><language id='2'>kenichi-manga</language></link_rewrite>
<name><language id='1'>Kenichi</language><language id='2'>Kenichi</language></name>
<description><language id='1'>Prueba directa</language><language id='2'>Prueba directa</language></description>
<description_short><language id='1'>Prueba</language><language id='2'>Prueba</language></description_short>
<available_now><language id='1'>En stock</language><language id='2'>En stock</language></available_now>
<available_later><language id='1'>2020-08-18</language><language id='2'>2020-08-18</language></available_later>
<associations>
<categories>
<category>
<id>19</id>
</category>
</categories>
<images>
<image>
<id></id>
</image>
</images>
<combinations>
<combination>
<id>0</id>
</combination>
</combinations>
<product_option_values>
<product_option_value>
<id>0</id>
</product_option_value>
</product_option_values>
<product_features>
<product_feature>
<id></id>
<id_feature_value>0</id_feature_value>
</product_feature>
</product_features>
<tags>
<tag>
<id>kenichi,Manga,Anime</id>
</tag>
</tags>
<stock_availables>
<stock_available>
<id></id>
<id_product_attribute></id_product_attribute>
</stock_available>
<!--<stock_available>
<id_product required="true" format="isUnsignedId"/>
<id_product_attribute required="true" format="isUnsignedId"/>
<id_shop format="isUnsignedId"/>
<id_shop_group format="isUnsignedId"/>
<depends_on_stock required="true" format="isBool"/>
<out_of_stock required="true" format="isInt"/>
</stock_available>-->
</stock_availables>
<accessories>
<product>
<id></id>
</product>
</accessories>
<!--<product_bundle>
<product>
<id>1008</id>
<quantity></quantity>
</product>
</product_bundle>-->
</associations>
</product>
</prestashop>
XML;
$xml = new SimpleXMLElement($ps_product);
$opt = array( 'resource' => 'products');
$opt['postXml'] = $xml->asXML();
$xml = $webService->add( $opt );
}
catch (PrestaShopWebserviceException $ex) {
echo 'Other error: <br/>'.$ex->getMessage();
}
?>
Если я ввожу id = 50, я получаю эту ошибку:
<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<errors>
<error>
<code><![CDATA[91]]></code>
<message><![CDATA[id is forbidden when adding a new resource]]></message>
</error>
</errors>
</prestashop>
Я не знаю, как я могу принудительно использовать свой собственный идентификатор для добавления нового продукта
Ответ №1:
К сожалению, я не думаю, что по умолчанию возможно принудительно использовать идентификатор с помощью PS WebService, это возможно путем добавления Product
с ObjectModel
таким образом:
$product = new Product;
$product->force_id = true;
$product->id = 50;
...
Боюсь, что вам нужно реализовать эту логику, доступную в ObjectModel
веб-сервисе PS.
Комментарии:
1. Я тоже этого не делаю, но я решаю использовать поле «ссылка», чтобы сохранить свой артикул, и с помощью этого поля теперь я могу получить свой продукт и обновить свой ассортимент.