Как не допустить переопределения полей описания продукта для определенного языка с помощью веб-сервиса? - PullRequest
1 голос
/ 29 мая 2019

Я пытаюсь синхронизировать некоторые продукты между двумя сайтами prestashop, используя веб-сервис. Например, описание продукта с веб-сайта назначения должно совпадать с описанием продукта с исходного веб-сайта после синхронизации.

Оба сайта (исходный и целевой) являются многоязычными. Исходный веб-сайт имеет английский и французский языки, конечный веб-сайт имеет английский (id = 4), французский (id = 5) и испанский (id = 6) языки.

Проблема в том, что существующее описание испанского языка с веб-сайта назначения перезаписывается пустым текстом после синхронизации. Та же проблема касается других полей: краткое описание, мета-описание, мета-заголовок. Интересен текст для link_rewrite поля сохранены для испанского языка.

Вот часть XML, отправленная веб-сервисом:

<?xml version="1.0" encoding="UTF-8"?>
<prestashop xmlns:xlink="http://www.w3.org/1999/xlink">
<product>
  <id>8224</id>
  <description>
    <language id="4">English text</language>
    <language id="5">Franch text</language>
  </description>
</product>
</prestashop>

Я хочу сохранить существующее описание на испанском языке, даже если я не отправляю текст для него в XML.

1 Ответ

0 голосов
/ 29 мая 2019

Лучшим решением будет извлечь существующий объект и обновить только тот язык, который вы хотите обновить.

Вот пример обновления названия продукта только на одном языке

<code><?php

include(__DIR__.'/config/config.inc.php');
include(__DIR__.'/init.php');
include(__DIR__.'/PSWebServiceLibrary.php');

/* Connect to the PrestaShop Web-service */
define('PS_SHOP_URL', 'http://localhost/prestashop');
define('PS_WS_AUTH_KEY', 'YOURKEYHERE');
$ws = new PrestaShopWebservice(PS_SHOP_URL, PS_WS_AUTH_KEY, false);

/* Retrieve the existing product (Product ID = 1) */
$xml = $ws->get(['url' => PS_SHOP_URL.'/api/products/1']);
echo 'Before: <pre>';
print_r($xml->product->name->language);
echo '
'; / * Обновлять только имя на французском * / $ xml-> product-> name-> language [1] = 'New Name'; unset ($ xml-> product-> производитель_имя, $ xml-> продукт-> количество, $ xml-> product-> position_in_category); / * Удаление полей, которые недоступны для записи * / $ result = $ ws-> edit (['resource' => 'products', 'id' => 1, 'putXml' => $ xml-> asXML ()]); / * Проверить новые значения * / $ xml = $ ws-> get (array ('url' => PS_SHOP_URL. '/ api / products / 1')); echo 'After:
';
print_r($xml->product->name->language);
echo '
';

Результат / выход

Before:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [id] => 1
        )

    [0] => Hummingbird printed t-shirt
    [1] => Hummingbird printed t-shirt
)

After:

SimpleXMLElement Object
(
    [@attributes] => Array
        (
            [id] => 1
        )

    [0] => Hummingbird printed t-shirt
    [1] => New Name
)

Файл PSWebServiceLibrary.php можно скачать здесь: https://github.com/PrestaShop/PrestaShop-webservice-lib/blob/master/PSWebServiceLibrary.php

Более подробный пример использования веб-сервиса PrestaShop вы можете найти здесь:

Надеюсь, это поможет!

...