Помогите с одной переменной, чтобы обновить товар в карточке через WebService

Автор Katja89, 21 июля 2014, 17:09:33

« назад - далее »

Katja89

Уже какой день бьюсь с функцией обновления карточки через REST API, это был ад, но уже почти всё вроде заработало, кроме одной малюсенькой переменной - никак не получается при обновлении параметров внести количество товара.

Я понимаю, что там дело в  пару символов кода, но я зашла в тупик.    :-\

Спецы помогите пожалуйста!

Вот моя, по крупицам собранная из интернета, функция:

<?php
session_start
();
define('DEBUG', true);
define('PS_SHOP_PATH', 'http://mypresta-shop.ru/');
define('PS_WS_AUTH_KEY', 'GAN3F82KAA71GZRHJF9QYED7UBTFUVF6');
require_once(
'/home/t/katja89/shop/public_html/PSWebServiceLibrary.php');
$webService = new PrestaShopWebservice(PS_SHOP_PATH, PS_WS_AUTH_KEY, DEBUG);


function
aCart($T_id, $id_customer, $id_address, $T_action){ //aCart(17, 3, 5, 'edit');

global $webService;

if (
$T_action == 'edit') { // обновление карточки, товар добавляется, но не обновляется количество товара

$opt = array('resource' => 'carts');
$opt['id'] = $T_id; // 17
$xml = $webService->get($opt);
$resources = $xml->children()->children()->children();

unset(
$xml->children()->children()->associations->cart_rows->cart_row);

foreach ($_SESSION["products"] as $cart_itm) {

// забираю пару $cart_itm["code"] и $cart_itm["qty"] но не получается изменить 'quantity' у товаров, которые я добавляю из сессии :(

$xml->children()->children()->associations->cart_rows->addChild('cart_row')->addChild('id_product', $cart_itm["code"]);

//$xml->children()->children()->associations->cart_rows->addChild('cart_row')->addChild('quantity', $cart_itm["qty"]);
//$xml->children()->children()->associations->cart_rows->cart_row->quantity = $cart_itm["qty"];

     
}

$opt = array('resource' => 'carts');
$opt['putXml'] = $xml->asXML();
$opt['id'] = $T_id; // 17
$xml = $webService->edit($opt);

} else if  (
$T_action == 'add') { // добавление новой карточки - работает

$Tovar = "";

foreach ($_SESSION["products"] as $cart_itm)
       {
$Tovar .= "<cart_row>";
$Tovar .= "<id_product>".$cart_itm["code"]."</id_product>";
$Tovar .= "<id_product_attribute>0</id_product_attribute>";
$Tovar .= "<quantity>".$cart_itm["qty"]."</quantity>";
$Tovar .= "</cart_row>";
       }

$Tovar .= "";

//$id_address = "5";
//$id_customer = "3";

$psXML = <<<XML
<prestashop>
<cart>
 <id/>
 <id_address_delivery>
{$id_address}</id_address_delivery>
 <id_address_invoice>
{$id_address}</id_address_invoice>
 <id_currency>1</id_currency>
 <id_customer>
{$id_customer}</id_customer>
 <id_guest>0</id_guest>
 <id_lang>1</id_lang>
 <id_carrier>0</id_carrier>
 <recyclable>0</recyclable>
 <gift>0</gift>
 <gift_message/>
 <associations>
  <cart_rows>
   
{$Tovar}
  </cart_rows>
 </associations>
</cart>
</prestashop>
XML;


$xml = new SimpleXMLElement($psXML);
$opt = array( 'resource' => 'carts' );
$opt['postXml'] = $xml->asXML();
$xml = $webService->add( $opt );
}
}

-SiGi-

Количество товаров менять разрешено?

Каковы параметры управления запасами в Настройки > Товары > Запасы товаров:
- Включить управление запасами
- Включить расширенное управление запасами

В карточке товара в админке во вкладке Количество:
- Я хочу использовать расширенную систему управления запасами для этого товара.
- Доступные количества для текущего товара и его комбинаций, базируются на наличии в магазинах/складах.
- Я хочу указать доступное количество вручную


Katja89

Спасибо Вам, что отозвались.
Цитата: -SiGi- от 21 июля 2014, 18:53:53
Количество товаров менять разрешено?

Я еще так далеко не заходила, такими настройками я займусь чуть позже, когда хоть что-нибудь заработает.

В данный момент моя цель  - создать из стороннего скрипта заказ в престе. Всё это необходимо сделать через REST API  Я уже в финале этой одиссеи и уже умею, создавать пользователя, адрес для него и карту, осталось создать ордер и это не трудно,  но иногда, перед этим необходимо редактировать эту самую карту, и как видите, я застряла на этапе редактирования карты.

Цитата: tigran от 21 июля 2014, 19:12:03
$resources->quantity = XXXX;

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


foreach ($_SESSION["products"] as $cart_itm)
{
$xml->children()->children()->associations->cart_rows->addChild('cart_row')->addChild('id_product', $cart_itm["code"]);
}


с помощью foreach я прохожу массив сессии и вынимаю от туда, нужные мне: id_product - $cart_itm["code"]  и quantity - $cart_itm["qty"]

с помощью вот этого


$xml->children()->children()->associations->cart_rows->addChild('cart_row')->addChild('id_product', $cart_itm["code"]);


создаётся блок или блоки с подобным содержанием:

<cart_row>
<id_product xlink:href="http://mypresta-shop.ru/api/products/8">
<![CDATA[ 8 ]]>
</id_product>
<id_product_attribute xlink:href="http://mypresta-shop.ru/api/combinations/0">
<![CDATA[ 0 ]]>
</id_product_attribute>
<id_address_delivery xlink:href="http://mypresta-shop.ru/api/addresses/0">
<![CDATA[ 0 ]]>
</id_address_delivery>
<quantity>
<![CDATA[ 0 ]]>
</quantity>
</cart_row>


Как видите quantity равно нулю, так как я не умею его вставлять на шаге foreach
если бы я умела обновлять через $webService->edit($opt)  всё это дело тем же способом, что и создавала через SimpleXMLElement, то было бы всё намного проще))
Помогите мне пожалуйста разобраться с этим.


Katja89

Цитата: Katja89 от 21 июля 2014, 20:32:58
если бы я умела обновлять через $webService->edit($opt)  всё это дело тем же способом, что и создавала через SimpleXMLElement, то было бы всё намного проще))
научилась через SimpleXMLElement  :-*
но будет интересно увидеть более элегантный способ решить вышеописанную проблему  8)