私は現在、バックエンドで製品編集を行うモジュールを開発しています。その目的は、製品が属するカテゴリを取得し、選択したカテゴリのリストを属性 (ブランド属性) に入力することです。
管理者は少なくとも 1 つのカテゴリを選択する必要があります。
製品の編集中に管理者がカテゴリを選択していない場合に保存プロセスを停止する方法がわからないことを除いて、私のモジュールは期待どおりに動作します。
ワークフローはこちら
- 管理者は、商品編集ページのカテゴリ タブでカテゴリを選択します
- 管理者は「保存」をクリックします
- 私のモジュールは「観察」し、すべてのカテゴリを収集します
--> カテゴリが選択されている場合
- 私のモジュールのオブザーバーは、ブランド属性を更新するためにその作業を行います
--> そうでなければ
- モジュールのオブザーバーが管理者セッションにエラーを追加します
- モジュールのオブザーバーは、Magento に製品の保存を停止するように指示する必要があります。しかし、どうすればいいですか?
一般的な質問は、「保存を停止する」引数をオブザーバーに渡す方法ですか?
上記で説明したワークフローを処理する config.xml ファイルとメソッドのサンプルを次に示します。
ご協力ありがとうございました。Magentoing をお楽しみください。
config.xml
<catalog_product_prepare_save>
<observers>
<brands_product_save_observer>
<type>singleton</type>
<class>brands/observer</class>
<method>saveProductBrand</method>
</brands_product_save_observer>
</observers>
</catalog_product_prepare_save>
Observer.php
public function saveProductBrand($observer) {
$product = $observer->getProduct();
$categoryIds = $product->getCategoryIds();
if (isset($categoryIds)) {
foreach ($categoryIds as $categoryId) {
$isBrandCategory = Mage::getModel('brands/navigation')->isBrandCategory($categoryId);
if ($isBrandCategory)
$brandCategories[] = $categoryId;
}
if (isset($brandCategories)) {
$brandId = Mage::getModel('brands/navigation')->getBrand($brandCategories[0]);
if ($brandId) {
$attribute = Mage::getModel('eav/config')->getAttribute('catalog_product', 140);
foreach ($attribute->getSource()->getAllOptions(true, true) as $option) {
$attributeArray[$option['label']] = $option['value'];
}
$categoryName = Mage::getModel('catalog/category')->load($brandId)->getName();
$product->setData('brand', $attributeArray[$categoryName]);
}
} else {
Mage::getSingleton('adminhtml/session')->addError(Mage::helper('catalog')->__('Please add this product to a brand in the "Categories" tab.'));
HERE SOME CODE TO TELL MAGENTO TO STOP SAVING THE PRODUCT
return;
}
}
}