В настоящее время я разрабатываю модуль, работающий с редактированием продукта в бэкэнде.
Его цель - извлечь категории, к которым относится продукт, и заполнить атрибут (атрибут Brand) списком выбранных категорий.
Администратор должен выбрать хотя бы одну категорию.
Мой модуль работает как положено, за исключением того, что я не знаю, как остановить процесс сохранения, если администратор не выбрал какую-либо категорию при редактировании продукта.
Вот рабочий процесс
- Администратор выбирает категории на вкладке категорий на странице редактирования продукта
- Администратор нажимает кнопку «Сохранить»
- Мой модуль "наблюдает" и собирает все категории
-> Если есть выбранные категории
- Наблюдатель моего модуля делает все возможное, чтобы обновить атрибут Brand
-> Остальное
- Наблюдатель моего модуля добавляет ошибку в сеанс администратора.
- Наблюдатель моего модуля должен сказать Magento прекратить сохранение продукта. Но как мне это сделать?
Общий вопрос может быть таким: как передать аргумент "stop save" наблюдателю?
Вот пример моего файла 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;
}
}
}