1

XMLRPC を使用して、製品情報をサード パーティ システムに渡す XML 構造を構築しています。製品のカスタム オプションの連想配列を作成する必要がありますが、それぞれの場合の値がオブジェクトであるため、どの構文を使用すればよいかわかりません。

信じられないかもしれませんが、デバッグして遊ぶことはできませんライブサイトでこれを行う必要があったため、配列が問題ないように自分自身に電子メールを送っていました。私はそれをサイトに適用しました.XMLRPCは、私が構築したオブジェクトをシリアル化できないというエラーをスローし、すぐに元に戻します.

このようにハードコーディングすると、正常に動作します。

    $item_array = array(
       "product_id" => new xmlrpcval($item->getSku()),
       "name" => new xmlrpcval($item->getName()),
       "price" => new xmlrpcval($item->getBaseCalculationPrice(), 'double'),
       "vat_inclusive" => new xmlrpcval(0,'int'),
       "quantity" => new xmlrpcval($item->getQty(),'int'),
       "option_text" => new xmlrpcval(
           array(
              "option_1" => new xmlrpcval("Colour: Military Black"),
              "option_2" => new xmlrpcval("Sizes: L")
           ),
           "struct")                          
        );

生成する必要があるのは次のセクションです。具体的には、オプションがいくつあるかわからないため、foreach ループ内の配列です。

       "option_text" => new xmlrpcval(
           array(
              "option_1" => new xmlrpcval("Colour: Military Black"),
              "option_2" => new xmlrpcval("Sizes: L")
           ),
           "struct")  

以下のようにするとうまくいきますが、値はオブジェクトではなく文字列であり、XMLRPC ではシリアライズできません。

      $optioncount = 1;
      $attList = array();

      foreach ( $attributes as $attribute => $value ) {

          $attpair = implode(": ", $value);

          $attList['option_'. $optioncount] = 'new xmlrpcval("'.$attpair.'")';

          $optioncount++;

      }

もし私var_dump($attList)が得たら;

array(2) {
  ["option_1"]=>
  string(39) "new xmlrpcval("Colour: Military Black")"
  ["option_2"]=>
  string(25) "new xmlrpcval("Sizes: L")"
}

他の方法は$attList完全に混乱するようです-これは非常に基本的なものであることはわかっていますが、私の人生ではこれを機能させることはできません. ご指摘ありがとうございます。

var_dump($attList)が使用すると、new xmlrpcval($attpair);私は得ます。

array(2) {
  ["option_1"]=>
  object(xmlrpcval)#469 (3) {
    ["me"]=>
    array(1) {
      ["string"]=>
      string(22) "Colour: Military Black"
    }
    ["mytype"]=>
    int(1)
    ["_php_class"]=>
    NULL
  }
  ["option_2"]=>
  object(xmlrpcval)#433 (3) {
    ["me"]=>
    array(1) {
      ["string"]=>
      string(8) "Sizes: L"
    }
    ["mytype"]=>
    int(1)
    ["_php_class"]=>
    NULL
 }

}

4

1 に答える 1

2

配列の構築は次のようになります。

  $optioncount = 1;
  $attList = array();

  foreach ( $attributes as $attribute => $value ) {

      $attpair = implode(": ", $value);

      $attList['option_'. $optioncount] = new xmlrpcval($attpair);

      $optioncount++;

  }

その後:

"option_text" => new xmlrpcval(
       $attList,
       "struct")  
于 2013-01-10T01:04:15.183 に答える