2010-06-30 27 views
14

Tôi đang cố viết một người quan sát sẽ xuất dữ liệu đơn hàng khi đặt hàng. Tôi chưa viết bất kỳ mô-đun nào trước đây. Dựa vào việc triển khai của tôi về bài viết này: http://www.magentocommerce.com/wiki/5_-_modules_and_development/0_-_module_development_in_magento/customizing_magento_using_event-observer_methodmagento sales_order_place_after observer

cho đến giờ tôi chỉ đang cố kích hoạt một số mã giả để ghi vào một tệp. Tôi không nhận được bất cứ điều gì hiển thị trong nhật ký của tôi và tệp không bị sửa đổi. Người dùng apache có quyền cho thư mục. Tôi đã vô hiệu hóa cấu hình bộ nhớ đệm trong cài đặt Magento. Tôi hơi bối rối về một số quy ước đặt tên; Tôi chỉ cố gắng làm theo ví dụ. Có ai biết tôi đang đi đâu không?

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

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

trong magento/app/code/local/Thức ăn/Bán hàng/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> 

trong Magento/ứng dụng/mã/địa phương/nguồn cấp dữ liệu/bán hàng/mô hình/đặt hàng/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 on Debian Lenny with Apache2 nếu nó là vấn đề cho bất kỳ r eason.

Trả lời

0

Holy crap. Tôi đã ngu ngốc. Tôi đã thử nghiệm nó với một kịch bản dòng lệnh, giống như tôi làm với rất nhiều thứ, nhưng tập tin cụ thể đó chỉ có thể được ghi bởi trình thông dịch dòng lệnh, không phải là trình thông dịch Apache. Tôi nên rời khỏi văn phòng sớm hơn tối qua.

Tốt cho bản ghi, đây là cách bạn kích hoạt hành động trên vị trí đặt hàng. Tôi sẽ để nó cho hậu thế.

3

Sự cố có vẻ là với tuyên bố người quan sát của bạn. Hãy thử cái này:

<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> 
+0

cảm ơn đề xuất. Không nhận thấy bất kỳ thay đổi nào: - \ – jorelli

+0

Đảm bảo rằng bạn đã xóa bộ nhớ cache cấu hình của mình trước khi bạn tìm kiếm thay đổi. XML không được đọc trên mọi tải trang. –

+0

vâng, tôi đã tắt hoàn toàn bộ nhớ cache cấu hình trong thời gian này. Điều đáng nói đến là mặc dù^_^ Để ghi lại, bạn hoàn toàn đúng về bí danh lớp cụ thể. 'feedales/order_observer' hoạt động. sử dụng tên lớp chữ của 'Feed_Sales_Model_Order_Observer' cũng hoạt động. nhưng 'sales/order_observer' không hoạt động. – jorelli

14

Đọc my articles, họ sẽ giúp bạn hiểu những gì đang diễn ra từ quan điểm quy ước đặt tên và giúp bạn có căn cứ trong một số quy ước/giả định của Magento.

Nhìn vào các mẫu ở trên, bạn có một vài điều không hoàn toàn đúng.

Thứ nhất, tập tin của bạn trong thư mục vv được đặt tên sai

magento/app/etc/modules/Feed.xml 

Tập tin này cần phải được đặt tên Packagename_Modulename, vì vậy bạn có thể muốn

magento/app/etc/modules/Feed_Sales.xml 

Nhìn vào hệ thống - > Cấu hình - > nâng cao để xem liệu mô-đun của bạn có hiển thị không. Nếu có, bạn sẽ đặt tên tệp này chính xác. Nếu không có điều này, mô-đun bạn tạo không được tải vào hệ thống và mã của bạn không bao giờ có cơ hội để chạy.

Tiếp theo, bạn chỉ định lớp không chính xác. Bạn nói

sales/order_observer 

nhưng phần đầu tiên của URI (bán hàng) không chính xác.Bạn định nghĩa phần mô hình của bạn như

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

có nghĩa là bạn muốn

feedsales/order_observer 

Thanh toán các Class/URI tab of Commerce Bug và thử nhập một số URI (như sales/order) để có được một ý tưởng tốt hơn về những gì đang xảy ra ở đây.

Mẹo nhanh khác, khi bạn đang cố gắng thiết lập trình xử lý của mình, hãy thực hiện nó cho sự kiện kích hoạt trên mọi lần tải trang. Sau đó, một khi bạn có phương thức của bạn được gọi, bạn có thể chuyển nó sang sự kiện cụ thể mà bạn muốn và không phải trải qua toàn bộ quá trình mua hàng.

Cuối cùng, và tôi nhận ra bạn đang sao chép các ví dụ, hãy cân nhắc đưa mô-đun của bạn vào một thư mục có tên khác ngoài Sales. Tôi thấy việc bắt chước tên của các thư mục lõi Magento chỉ thêm một lớp lộn xộn, đó không phải là thứ bạn cần khi bạn học hệ thống.

Các vấn đề liên quan