2011-07-29 29 views
14

app\locale\en_US\template\email\sales\order_new.html là tệp được đề cập.Chỉnh sửa khối thanh toán e-mail bán hàng Magento

Làm cách nào để chỉnh sửa {{var payment_html}} mà không ảnh hưởng đến các phần khác của trang web?

Nó có vẻ như phần đến từ: app\design\frontend\base\default\template\payment\info\default.phtml

Tôi sửa về điều này? Nhưng tệp đó được sử dụng ở những nơi khác trên trang web. Điều đó có đúng không?

Tôi muốn tạo một tệp riêng biệt, giả sử default_email.phtml, kiểu riêng biệt và thay vào đó có order_new.phtml bao gồm tệp mới.

Tôi giả sử rằng tôi cần bao gồm tệp default_email.phtml của mình trong layout\***.xml. Tôi sẽ làm điều này ở đâu?

Trả lời

0

Trong /app/code/core/Mage/Sales/Model/Order.php có một phương thức có tên là "sendNewOrderEmail". Đây là những gì bạn cần phải ảnh hưởng. Bạn sẽ tìm thấy mã simmilar như sau:

$mailTemplate->setDesignConfig(array('area'=>'frontend', 'store'=>$this->getStoreId())) 
       ->sendTransactional(
        $template, 
        Mage::getStoreConfig(self::XML_PATH_EMAIL_IDENTITY, $this->getStoreId()), 
        $recipient['email'], 
        $recipient['name'], 
        array(
         'order'   => $this, 
         'billing'  => $this->getBillingAddress(), 
         'payment_html' => $paymentBlock->toHtml(), //Just change this line 
        ) 
       ); 

Bạn có thể thấy đây là nơi dữ liệu "payment_html" được đặt. Chỉ cần trao đổi nó ra với những gì bạn muốn nó được.

6

Điều đầu tiên tôi làm là tìm kiếm trong mã nguồn của Magento. Giả sử {{var payment_html}} được xử lý ở đâu đó mà tôi đã tìm kiếm trên payment_html. Một số kết quả phù hợp với tìm kiếm;

Mage_Sales_Model_Order 
Mage_Sales_Model_Order_Creditmemo 
Mage_Sales_Model_Order_Invoice 
Mage_Sales_Model_Order_Shipment 

Vì vậy, thông tin cho khối thanh toán đó phải ở trong đó. Tôi đã Mage_Sales_Model_Order và đã kiểm tra biến số $paymentBlockHtml. Điều này được chỉ ra để tiếp tục logic để điền vào khối thanh toán bằng thông tin thanh toán. Nó tạo ra một khối và có vẻ như điều này là không dễ dàng để mở rộng/thay đổi/sửa đổi trên cái nhìn đầu tiên. Có, chúng tôi có thể áp dụng mẫu cho loại khối cụ thể (thanh toán) vì có một khối được tạo nhưng chúng tôi không thể dễ dàng kiểm tra xem chúng tôi muốn tải khối nào. Ngoài ra, mẫu được bỏ qua trong cấu trúc của Mage_Payment_Block_Info

Hãy kiểm tra theo cách khác.

Hãy làm điều gì đó tuyệt vời, tại sao chúng tôi không thêm một khối vào email chứa thông tin chính xác nhưng quan trọng hơn khi có thể chuyển sang đúng trường hợp. Vì trình phân tích cú pháp mẫu được sử dụng để phân tích cú pháp các biến và xử lý bố cục, chúng tôi có thể thêm các mục sau vào thay vì khối {{var payment_html}} và truy xuất thông tin đó trong chính khối đó.

{{block type='core/template' template='email/templatename.phtml'}} 

Đoạn mã trên đang phân tích email/templatename.phtml vào email, có nghĩa là bạn có thể làm bất cứ điều gì trong mẫu đó để hiển thị dữ liệu chính xác. Trước khi chúng tôi có thể truy xuất dữ liệu thanh toán trong mẫu này, chúng tôi phải thêm đối số thứ tự với dữ liệu đơn đặt hàng. Điều đó khá đơn giản;

{{block type='core/template' order=$order template='email/templatename.phtml'}} 

Trong mẫu chúng ta có thể làm $this->getOrder()->getPayment() để lấy thông tin thanh toán, hoặc $this->getOrder->getPayment()->toHtml() hoặc xử lý dữ liệu theo cách khác.

Tiền thưởng; Một giải pháp khác là làm việc với các bố cục bố trí và đặt đúng mẫu và nhập vào tệp layout.xml, bên dưới ví dụ cho các mục đơn đặt hàng trong cùng một email. Nó hoạt động giống như khối, nhưng chỉ với một số cài đặt trong bố cục xml.

{{layout handle="sales_email_order_items" order=$order}} 
0

Tôi gặp vấn đề tương tự. Những gì tôi đã làm để chỉ thay đổi email đã thêm thông tin sau vào lớp thông tin thanh toán.

protected function _construct() { 
    parent::_construct(); 
    $this->setTemplate('payment/info/{new template}.phtml'); 
} 

Sau đó, tạo mẫu và email sẽ chèn mẫu này vào phần thanh toán nếu phương thức thanh toán này được sử dụng.

Hy vọng điều đó hữu ích!

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