バックグラウンド
すぐに使用できるAPIだけでは不可能です。バンドルの選択、オプションを確立する方法が記載されていないため、ドキュメントはこれについてかなり明確に思われます
それとは別に、パッケージにapi.xmlファイルMage_Bundle
がないことは、サポートがないことを示しています。1.0の後にリリースされたDownloadableなどの別の製品タイプとは対照的です。サポートの欠如は意図的なもののようです。
では、なぜ彼らはここで故意にサポートを省略したのでしょうか?コアチームは、おそらくその目的を達成することができます。私の推測では、このようなAPIの設計に関する利用可能なオプションの数と複雑さは、コスト/利益の計算ではうまくいきませんでした。
それで、どうですか?
Oleksiiがすでに指摘したように、これを可能にするにはMagento APIを拡張する必要があります。
バンドルの選択/オプションを作成する最小限のスタンドアロンスクリプトは、次のようになります。
<?php
require('app/Mage.php');
Mage::app();
$items[] = array(
'title' => 'test title',
'option_id' => '',
'delete' => '',
'type' => 'radio',
'required' => 1,
'position' => 0
);
$selections = array();
$selectionRawData[] = array(
'selection_id' => '',
'option_id' => '',
'product_id' => '159',
'delete' => '',
'selection_price_value' => '10',
'selection_price_type' => 0,
'selection_qty' => 1,
'selection_can_change_qty' => 0,
'position' => 0
);
$selections[] = $selectionRawData;
$product = Mage::getModel('catalog/product')->setStoreId(0);
$product->load(182);
if (!$product) {
//bail
throw new Exception('Product loaded does not exist');
}
Mage::register('product', $product);
Mage::register('current_product', $product);
$product->setCanSaveConfigurableAttributes(false);
$product->setCanSaveCustomOptions(true);
$product->setBundleOptionsData($items);
$product->setBundleSelectionsData($selections);
$product->setCanSaveCustomOptions(true);
$product->setCanSaveBundleSelections(true);
$product->save();
したがって、せいぜい必要なことは、必要なオプションにAPIインターフェースを提供することだけです。Magento API抽象モデルを拡張するモデルと、$items
および$selectionRawData
をパラメーターとして受け取るメソッドを使用して、新しいモジュールを作成します。
<?php
class YourCompany_YourModule_Model_Api extends Mage_Api_Model_Resource_Abstract
{
public function createSelectionLink($items, $selectionRawData, $productId, $storeid)
{
$selections = array();
//check if product id in selection data is valid
$optionProduct = Mage::getModel('catalog/product')->load($selectionRawData['product_id']);
if(!$optionProduct->getId()){
throw new Exception('Selection product provided does not reference a valid product');
}
$selections[] = $selectionRawData;
$product = Mage::getModel('catalog/product')->setStoreId($storeid);
$product->load($productId);
if (!$product->getId()) {
//bail
throw new Exception('Product loaded does not exist');
}
Mage::register('product', $product);
Mage::register('current_product', $product);
$product->setCanSaveConfigurableAttributes(false);
$product->setCanSaveCustomOptions(true);
$product->setBundleOptionsData($items);
$product->setBundleSelectionsData($selections);
$product->setCanSaveCustomOptions(true);
$product->setCanSaveBundleSelections(true);
$product->save();
}
}
$items
と$selectionRawData
は配列であることを覚えておいてください(例は上記のスタンドアロンスクリプトコードブロックにリストされています)。
次に、モジュールのディレクトリにapi.xmlファイルを作成etc
し、次の内容を含めます。
<?xml version="1.0"?>
<config>
<api>
<resources>
<bundle_link translate="title" module="yourcompany_bundleapi">
<title>Bundle creation extension</title>
<model>bundleapi/api</model>
<methods>
<createSelectionLink translate="title" module="yourcompany_bundleapi">
<title>Create a selection link</title>
</createSelectionLink>
</methods>
</bundle_link>
</resources>
</api>
</config>
それでおしまい。
そして、使用する新しいAPIを呼び出すには:
$proxy->call($sessionId, 'bundle_link.createSelectionLink', array($items, $selectionRawData, $productId, $storeid));
注意事項/前提条件
- シェルバンドル製品をすでに作成している必要があります
- 選択にリンクする単純な製品をすでに持っている必要があります
- API配列パラメーターの形式を理解する必要があります。そうしないと、
save
呼び出しによってチョークが発生し、例外がスローされます
- これはのみ使用する
radio
ボタンの種類を-などがありますdropdown
、checkbox
例えば。
$items
配列は、固定価格のバンドルアイテムを作成します。これは無視されるか、動的価格バンドルでは窒息する可能性があります。
- 上記のコードは例にすぎず、簡潔にするために省略されています。これを構築している場合は、製品を作成するインターフェイスを作成しようとするときに開発者を狂わせないように、より完全に機能/回復力があるようにコーディングする必要があります。
参照:
http://kavinduthundeniya.blogspot.de/2012/11/magento-extention-api-for-bundle.html
/programming/3108775/programmatically-add-bundle-products-in-magento-using-the-sku-id-of-simple-it