Автор Тема: Помогите с одной переменной, чтобы обновить товар в карточке через WebService  (Прочитано 747 раз)

21 Июля 2014, 17:09:33
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Уже какой день бьюсь с функцией обновления карточки через 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_PATHPS_WS_AUTH_KEYDEBUG);


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 );
}
}
21 Июля 2014, 18:53:53
Ответ #1
  • Фрилансер
  • *
  • Сообщений: 245
  • Репутация: +3/-0
    • Просмотр профиля
Количество товаров менять разрешено?

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

В карточке товара в админке во вкладке Количество:
- Я хочу использовать расширенную систему управления запасами для этого товара.
- Доступные количества для текущего товара и его комбинаций, базируются на наличии в магазинах/складах.
- Я хочу указать доступное количество вручную
21 Июля 2014, 19:12:03
Ответ #2
  • Ветеран
  • *****
  • Сообщений: 1010
  • Репутация: +2/-0
  • Сообщество PrestaShop
    • Просмотр профиля
21 Июля 2014, 20:32:58
Ответ #3
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
Спасибо Вам, что отозвались.
Количество товаров менять разрешено?

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

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

$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, то было бы всё намного проще))
Помогите мне пожалуйста разобраться с этим.

 
21 Июля 2014, 21:53:00
Ответ #4
  • Новичок
  • *
  • Сообщений: 3
  • Репутация: +0/-0
  • Сообщество PrestaShop
    • Просмотр профиля
если бы я умела обновлять через $webService->edit($opt)  всё это дело тем же способом, что и создавала через SimpleXMLElement, то было бы всё намного проще))
научилась через SimpleXMLElement  :-*
но будет интересно увидеть более элегантный способ решить вышеописанную проблему  8)