Lồng nhau nếu Báo cáo trong Mẫu Email


7

Tôi đang cố gắng sử dụng các câu lệnh if lồng nhau trong mẫu email của mình, như sau:

{{if subscriber.promo_group}}
    <p>You are one of the first {{var subscriber.promo_group}} subscribers.</p>
{{/if}}

{{if subscriber.coupon_code}}
    <p>Use code {{htmlescape var=$subscriber.coupon_code}} for {{htmlescape var=$subscriber.discount_amount}} off.</p>
    {{if subscriber.partner_coupon_code}}
        <p>Or, code {{var subscriber.partner_coupon_code}} for {{htmlescape var=$subscriber.partner_discount_amount}} off at checkout.</p>
    {{/if}}
{{else}}
    {{if subscriber.partner_coupon_code}}
        <p>Use code {{htmlescape var=$subscriber.partner_coupon_code}} for {{htmlescape var=$subscriber.partner_discount_amount}} off at checkout.</p>
    {{/if}}
{{/if}}

Khi tôi nhận được email của mình, tôi nhận được nó như thế này:

You are one of the first 20 subscribers.

Use code XXXXX-QTEALK15 for $35 off.

Or, code XXXXX10OFF for 10% off at checkout.

{{else}}
Use code XXXXX10OFF for 10% off at checkout.

{{/if}}

Có thể sử dụng các câu lệnh lồng nhau trong các mẫu email Magento không?


Nếu bạn tìm thấy một giải pháp, xin vui lòng chia sẻ nó với chúng tôi.
Fabian Blechschmidt

tôi đã không tìm thấy một giải pháp; đã phải chỉnh lại email để giải quyết vấn đề :(
Laura

Câu trả lời:


7

Nếu bạn nhìn vào đầu Varien_Filter_Templatelớp, bạn sẽ tìm thấy hai hằng số sau.

const CONSTRUCTION_DEPEND_PATTERN = '/{{depend\s*(.*?)}}(.*?){{\\/depend\s*}}/si';
const CONSTRUCTION_IF_PATTERN = '/{{if\s*(.*?)}}(.*?)({{else}}(.*?))?{{\\/if\s*}}/si';

Trong biểu thức thông thường của CONSTRUCTION_IF_PATTERNbạn sẽ nhận thấy rằng nó có dạng

{{if condition}} VĂN BẢN ĐI TẠI ĐÂY {{khác}} CÁC VĂN BẢN KHÁC TẠI ĐÂY {{/ if}}

Vì vậy, không may là các ifcâu lệnh lồng nhau là không thể vì kết quả khớp đầu tiên {{/if}}sẽ bị bắt trong biểu thức chính quy.

Mặc dù, lớp cung cấp một cái gì đó khác với các {{if}}tuyên bố, {{depend}}tuyên bố. Nó gần giống như {{if}}ngoại trừ nó không có {{else}}chức năng.

May mắn thay trong trường hợp của bạn, các điều kiện lồng nhau không phức tạp và có thể được thực hiện bằng cách sử dụng {{depend}}. Vì vậy, bạn có thể có những điều sau đây:

{{if subscriber.promo_group}}
    <p>You are one of the first {{var subscriber.promo_group}} subscribers.</p>
{{/if}}

{{if subscriber.coupon_code}}
    <p>Use code {{htmlescape var=$subscriber.coupon_code}} for {{htmlescape var=$subscriber.discount_amount}} off.</p>
    {{depend subscriber.partner_coupon_code}}
        <p>Or, code {{var subscriber.partner_coupon_code}} for {{htmlescape var=$subscriber.partner_discount_amount}} off at checkout.</p>
    {{/depend}}
{{else}}
    {{depend subscriber.partner_coupon_code}}
        <p>Use code {{htmlescape var=$subscriber.partner_coupon_code}} for {{htmlescape var=$subscriber.partner_discount_amount}} off at checkout.</p>
    {{/depend}}
{{/if}}

Nếu nó cần phức tạp hơn thế này, tốt nhất là chỉ đơn giản hóa logic của bạn bằng cách sử dụng một lớp khối cho mẫu.


1

Tôi chưa bao giờ thử các câu lệnh điều khiển lồng nhau như vậy, nhưng một giải pháp khả thi (mặc dù có thể làm việc nhiều hơn một chút so với mong muốn của bạn) là bao gồm một .phtmlmẫu tiêu chuẩn bên trong mẫu email của bạn.

Cốt lõi sử dụng tính năng này và nó có thể rất thuận tiện cho các tình huống bạn cần chạy một số PHP bên trong các mẫu email của mình.

Có một cái nhìn tại:

app/locale/en_US/template/email/sales/order_new.html

cũng như:

app/design/frontend/base/default/layout/sales.xml

Trong order_new.htmlmẫu, kiểm tra dòng 97 (hoặc ở đâu đó), bạn sẽ thấy cuộc gọi này:

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

Cuộc gọi này kiểm tra các tập tin bố trí của bạn cho xử lý sales_email_order_items. Trong sales.xmlbạn sẽ tìm thấy điều này ở gần dòng 268. Bạn sẽ thấy tải này trong mẫu email/order/invoice/items.phtml(trong số những thứ khác).

Đó là tất cả các công cụ bố trí Magento tiêu chuẩn khá từ đây. Nếu bạn có một cái nhìn vào items.phtmlmẫu, điều đầu tiên bạn sẽ nhận thấy là nó gán $_orderbiến. Điều này đang được thông qua trong xử lý bố cục của mẫu email như order=$order. Khi bạn vào items.phtml, họ chỉ định sử dụng biến đó $this->getOrder().

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.