我目前正在开发一个与后端产品编辑一起使用的模块。其目的是检索产品所属的类别并使用所选类别列表填充属性(品牌属性)。
管理员必须选择至少一个类别。
我的模块按预期工作,只是如果管理员在编辑产品时没有选择任何类别,我不知道如何停止保存过程。
这是工作流程
- 管理员在产品编辑页面的类别选项卡中选择类别
- 管理员点击“保存”
- 我的模块“观察”并收集所有类别
--> 如果有选择的类别
- 我的模块的观察者做它的东西来更新品牌属性
--> 其他
- 我的模块的观察者向管理会话添加了一个错误
- 我的模块的观察者应该告诉 Magento 停止保存产品。但我该怎么做呢?
一般的问题可能是:如何将“停止保存”参数传递给观察者?
这是我的 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>
观察者.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;
}
}
}