magento sales_order_place_after observer

Я пытаюсь написать наблюдателя, который будет экспортировать данные заказа при размещении заказа. Я еще не писал никаких модулей. Основываясь на моей реализации в этой статье: http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_method

пока я просто пытаюсь вызвать какой-то фиктивный код для записи в файл. Я не получаю ничего в моем журнале, и файл не изменяется. У пользователя apache есть разрешение для каталога. Я отключил кеширование конфигурации в настройках Magento. Я немного запутался в некоторых соглашениях об именах; Я просто попытался следовать примеру. Кто-нибудь знает, где я ошибаюсь?

в magento / app / etc / modules / Feed.xml:

<?xml version="1.0"?> <config> <modules> <Feed_Sales> <codePool>local</codePool> <active>true</active> </Feed_Sales> </modules> </config> 

в magento / app / code / local / Feed / Sales / etc / config.xml:

 <?xml version="1.0"?> <config> <global> <models> <feedsales> <class>Feed_Sales_Model</class> </feedsales> </models> <events> <sales_order_place_after> <observers> <feed_sales_order_observer> <type>singleton</type> <class>sales/order_observer</class><!-- I've also tried Feed_Sales_Model_Order_Observer here --> <method>export_new_order</method> </feed_sales_order_observer> </observers> </sales_order_place_after> </events> </global> </config> 

в magento / app / code / local / Feed / Sales / Model / Order / Observer.php:

 <?php class Feed_Sales_Model_Order_Observer { public function __contruct() { } /** * Exports new orders to an xml file * @param Varien_Event_Observer $observer * @return Feed_Sales_Model_Order_Observer */ public function export_new_order($observer) { Mage::log("reached export_new_order"); try { $dumpFile = fopen('/home/jorelli/new_orders/testdump', 'w+'); fwrite($dumpFile, 'this is a test!'); } catch (Exception $e) { Mage::log("order export failed.\n"); } return $this; } } ?> 

Magento 1.4 на Debian Lenny с Apache2, если это имеет значение по любой причине.

Прочитайте мои статьи , они помогут вам понять, что происходит с точки зрения соглашения об именах, и заставьте вас основываться на некоторых соглашениях / предположениях Magento.

Глядя на образцы выше, у вас есть несколько вещей не совсем правильно.

Во-первых, ваш файл в папке etc указан неправильно

 magento/app/etc/modules/Feed.xml 

Этот файл должен быть назван Packagename_Modulename , поэтому вы, вероятно, захотите

 magento/app/etc/modules/Feed_Sales.xml 

Посмотрите System -> Configuration -> Advanced, чтобы узнать, появился ли ваш модуль. Если это так, вы правильно назвали этот файл. Без этого модуль, который вы создали, не загружается в систему, и ваш код никогда не будет работать.

Затем вы задаете класс неправильно. Ты говоришь

 sales/order_observer 

но эта первая часть URI (продажи) неверна. Вы определили раздел своих моделей как

  <models> <feedsales> <!-- this is your model part --> <class>Feed_Sales_Model</class> </feedsales> </models> 

что означает, что вы хотите

 feedsales/order_observer 

Ознакомьтесь с вкладкой Class / URI Commerce Bug и попробуйте ввести некоторые URI (например, sales/order ), чтобы лучше понять, что здесь происходит.

Еще один быстрый совет, когда вы пытаетесь настроить ваш обработчик, сделайте это для события, которое срабатывает при каждой загрузке страницы. Затем, как только вы вызываете свой метод, вы можете переключить его на конкретное событие, которое вы хотите, и не должны проходить весь процесс покупки.

Наконец, и я понимаю, что вы копировали примеры, подумайте о том, чтобы разместить ваш модуль в папке с именем нечто иное, чем Sales . Я нахожу подражание именам основных папок Magento, добавляя дополнительный путаница, что вам не нужно, пока вы изучаете систему.

Проблема, похоже, связана с вашей декларацией наблюдателя. Попробуйте:

  <events> <sales_order_place_after> <observers> <feed_sales_order_observer> <type>singleton</type> <class>feedsales/order_observer</class> <method>export_new_order</method> </feed_sales_order_observer> </observers> </sales_order_place_after> </events> 

Святое дерьмо. Я был глуп. Я протестировал его с помощью сценария командной строки, как и у многих вещей, но этот конкретный файл был написан только для интерпретатора командной строки, а не для интерпретатора Apache. Вчера я должен был покинуть офис.

Хорошо для записи, так вы инициируете действие по размещению заказов. Я оставлю это для потомства.