Пользовательский индексатор, ВВЕДИТЕ МАССОВОЕ ДЕЙСТВИЕ и ВВЕДИТЕ УДАЛИТЬ
Я создаю пользовательский индексатор и быстрый поиск на основе таблицы mysql с полнотекстовыми индексами и испытываю некоторые трудности в понимании Mage_Index_Model_Event::TYPE_DELETE
в сочетании с TYPE_MASS_ACTION
.
Индексатор построен очень похоже на Mage_Catalog_Model_Product_Indexer_Flat
.
Одно событие удаления работает просто отлично, идентификатор был передан вместе с объектом данных, и я могу получить его с помощью getId()
, чтобы продолжить удаление. Но когда я перехожу к списку серверной части Catalog -> Manage Products
и отмечаю несколько продуктов (с помощью флажка) для удаление и выберите действие удалить, только один идентификатор продукта из выбранного набора будет удален, остальные останутся в моем индексе (через Mage_Index_Model_Event::TYPE_DELETE
). Я предполагал, что удаление нескольких продуктов будет иметь значение TYPE_MASS_ACTION
, как и для изменения статуса продуктов, но, похоже, это не так.
Какой тип события запускается при удалении нескольких продуктов? Хотя я ожидал бы, что они будут удалены с идентификаторами продуктов $product = $event->getDataObject();
и $product->getProductIds()
. Или есть другой способ решить эту проблему?
Если копался в Catalog/Model/Product/Indexer/Flat.php, модели и ресурсы и не могут выяснить, как это делается.
Я сижу над этим уже несколько часов, я мог бы проследить за этим. Может быть, кто-нибудь мог бы пролить свет на этот вопрос.
Любая помощь и подсказки приветствуются!
1 answers
Чтобы дать ответ на мой собственный вопрос:
Я попытался имитировать предложение Мариуса с помощью on delete cascade
, используя триггер on delete
. Но этот триггер не активирован из-за оставшейся ошибки в MySQL, которая есть... "В настоящее время каскадные действия с внешним ключом не активируют триггеры".
Поэтому, чтобы преодолеть это, я просто синхронизирую свою таблицу полнотекстового индекса с SQL-запросом, получая все идентификаторы продуктов, которые не найдены в индексе продуктов Magento, и удаляю их. На самом деле, что Mage_Index_Model_Event::TYPE_DELETE
рассылается это решение работает довольно хорошо.