Принудительный идентификатор при добавлении нового продукта в prestashop

#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. Я тоже этого не делаю, но я решаю использовать поле «ссылка», чтобы сохранить свой артикул, и с помощью этого поля теперь я могу получить свой продукт и обновить свой ассортимент.