Пользовательский индексатор, ВВЕДИТЕ МАССОВОЕ ДЕЙСТВИЕ и ВВЕДИТЕ УДАЛИТЬ


Я создаю пользовательский индексатор и быстрый поиск на основе таблицы 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, модели и ресурсы и не могут выяснить, как это делается.

Я сижу над этим уже несколько часов, я мог бы проследить за этим. Может быть, кто-нибудь мог бы пролить свет на этот вопрос.

Любая помощь и подсказки приветствуются!

Author: Andreas W. Wylach, 2014-11-07

1 answers

Чтобы дать ответ на мой собственный вопрос:

Я попытался имитировать предложение Мариуса с помощью on delete cascade, используя триггер on delete. Но этот триггер не активирован из-за оставшейся ошибки в MySQL, которая есть... "В настоящее время каскадные действия с внешним ключом не активируют триггеры".

Поэтому, чтобы преодолеть это, я просто синхронизирую свою таблицу полнотекстового индекса с SQL-запросом, получая все идентификаторы продуктов, которые не найдены в индексе продуктов Magento, и удаляю их. На самом деле, что Mage_Index_Model_Event::TYPE_DELETE рассылается это решение работает довольно хорошо.

 2
Author: Andreas W. Wylach, 2014-11-13 11:03:28