Dòng hiển thị trong e-mail giao dịch nếu phương thức thanh toán là


8

Tôi chỉ muốn hiển thị một dòng khi khách hàng chọn phương thức thanh toán lệnh thanh toán tiền. Khi một khách hàng chọn lệnh chuyển tiền làm phương thức thanh toán, tôi muốn hiển thị một <li>dòng bổ sung cho e-mail giao dịch.

Nếu khách hàng chọn một phương thức thanh toán khác, phần bổ sung <li>sẽ bị ẩn.

Tôi đã thử mã này, nhưng nó không hoạt động:

{{depend order.getPayment().getMethod() == "checkmo"}}
    <li>payment check</li>
{{/depend}}

Làm thế nào tôi có thể đạt được điều đó?

Câu trả lời:


7

Trong trường hợp này, bạn có thể xử lý việc này bằng cách xử lý.

Sử dụng Trình xử lý:

Tạo trình xử lý và xác định nó tại tệp bố trí:

create a handlervà sử dụng trình xử lý này đã hiển thị một tệp phtml. Bật local.xmltại app/design/frontend/YOUR_PAackage/YOUR_template/layoutxử lý xác định.

Mã tập tin bố trí như:

    <?xml version="1.0"?>
    <layout version="0.1.0">
<!-- add new handler -->
        <amit_customer_addhan>
            <block type="core/template" name="addNewLi" template="sales/showcheckmo.phtml" />
        </amit_customer_addhan>
    </layout>

Gọi trình xử lý này tại mẫu email

Sau đó on email html call this handler(locale/YourLANG/template/email/)

{{layout handle="amit_customer_addhan" order=$order}}

mã tập tin phtml:

Sau đó, phtml fileđặt mã như đểshow extra li

  <?php if($this->getOrder()->getPayment()->getMethodInstance()->getCode()=='checkmo'):?>
      <li>payment check</li>
     <?php endif;?>

Chỉnh sửa: vị trí của phtml filelà: app/design/frontend/YOUR_PAackage/YOUR_template/template/sales/

HOẶC: Không có cuộc gọi của người xử lý:

gọi một tệp khối mà không có trình xử lý bố trí và tham số ans cho

 {{block type='core/template' area='frontend' template='sales/showcheckmo.phtml' order=$order}}

Trong trường hợp này, cần thiết phải thiết lập để mangento areanhư frontenddưới dạng file phtml gọi từ đây


Xin chào Amit, tôi có thể tìm thấy tệp showcheckmo.phtml ở đâu hoặc tôi cần tạo nó ở đâu?
JGeer

đã cập nhật, vui lòng kiểm tra
Amit Bera

Đã thử nó, nhưng điều đó không làm việc. Dòng này không được hiển thị bên trong e-mail.
JGeer

Cố gắng đưa một số nội dung tĩnh trên phtml. Và CKD văn bản có đến hay không
Amit Bera

Không cũng với nội dung tĩnh nó không hoạt động. Tôi đang làm gì sai?
JGeer

0
order.getPayment().getMethodInstance().getCode() == 'banktransfer'

Đã thử điều đó, nhưng điều đó cũng không hiệu quả :(
JGeer

0

Tôi sẽ cố gắng trả lời câu hỏi ban đầu của bạn - làm thế nào để sử dụng chỉ thị với điều kiện. Để gỡ lỗi tôi sử dụng xDebug. Và theo tôi thì rất khó để gỡ lỗi email. Trong trường hợp đó tôi chỉ cho bạn một ví dụ có cùng cấu trúc trong một phần khác của magento.

Về bán hàng / đặt hàng / xem có cấu trúc tương tự. Cấu trúc đầu ra địa chỉ được xác định Mage/Core/etc/config.xmltrong default/customer/address_templates/text.

Nhiệm vụ của chúng tôi sẽ là thêm bất kỳ điều kiện nào để hiển thị hoặc không hiển thị 'tên công ty'. Các chỉ thị như var , phụ thuộc , nếu phân tích cú pháp trong bộ lọcVarien_Filter_Template phương thức ($ value) . Trong phương thức này có phép lặp của tất cả các cấu trúc $ (if / Dep / var) và mỗi $ xây dựng được sử dụng trong lệnh gọi này:

$replacedValue = call_user_func($callback, $construction);

Đối với mỗi if / Depe / var có phương thức riêng. Chúng ta hãy nhìn vàopublic function ifDirective($construction)

public function ifDirective($construction)
{
    if (count($this->_templateVars) == 0) {
        return $construction[0];
    }

    if($this->_getVariable($construction[1], '') == '') {
        if (isset($construction[3]) && isset($construction[4])) {
            return $construction[4];
        }
        return '';
    } else {
        return $construction[2];
    }
}

Bây giờ hãy xem phương thức được bảo vệ _getVariable. Tôi muốn thu hút sự chú ý của bạn trên một hàng:

} elseif (isset($stackVars[$i-1]['variable']) && $stackVars[$i-1]['variable'] instanceof Varien_Object) {

và nhìn vào bình luận dưới đây:

// If object calling methods or getting properties

Vì vậy, để tạo điều kiện $ stackVars của chúng ta phải là một đối tượng và là một nhánh của Varien_Object (hầu hết các mô hình mở rộng từ Mage_Core_Model_Abauge, kéo dài từ Varien_Object). Hãy leo lên một vài bước ở trên. Chúng ta cần thêm vào stackVars và object.

Trong ví dụ của tôi trong lớp Mage_Customer_Block_Address_Renderer_Default magento gọi bộ lọc phương thức ($ value), mà tôi đã đề cập ở trên.


Ở đây tôi cung cấp một giải pháp. Cảnh báo! Giải pháp này không sạch lắm. Đó là mục đích để thể hiện hành vi magento. Hãy làm tất cả viết lại chính mình.

public function render(Mage_Customer_Model_Address_Abstract $address, $format=null)
{

    //parsing $data array

    $formater->setVariables($data);

    $format = !is_null($format) ? $format : $this->getFormat($address);

    return $formater->filter($format);
}

Trong phương thức này, chúng ta sẽ thêm một đối tượng thứ tự vào mảng dữ liệu $. Theo nhiệm vụ của tôi cho phép thêm đối tượng thứ tự vào mảng này. Thực hiện trước '$ formater-> setVariabled ($ data);'

$data['order_object'] = $address->getOrder();

Sau đó, magento sẽ phân tích đối tượng này và gọi bất kỳ phương thức nào. Ví dụ: chúng ta thêm phương thức mới getPaymentOutput (). Đặt chức năng đơn giản vào lớp Đặt hàng:

public function isPrinted()
{
    if ($this->getPayment()->getMethod() == 'checkmo') {
        return true;
    } else {
        return false;
    }
}

và chỉ sau đó chúng tôi thực hiện thay đổi trong chỉ thị xml với điều này:

{{if order_object.isPrinted()}}{{var smth}}<br />{{/if}}
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.