2012-10-24 16 views
7

Giả sử tôi có trang web thương mại điện tử và tôi muốn mang theo cách tôi hiển thị lưới sản phẩm thông qua nhiều mẫu. Sử dụng nguyên tắc DRY, làm cách nào bạn sử dụng lại mã này và có khả năng chuyển các đối số vào khối cho một số tùy chỉnh ở các khu vực khác nhau? {Embed} là tùy chọn tốt nhất? Tôi có thể thấy một cái gì đó như thế tạo ra rất nhiều chi phí không cần thiết.Cách sử dụng lại các khối mã và chuyển đối số cho chúng trong ExpressionEngine

Trả lời

13

Tôi đã làm điều này chính xác trên trang web của khách hàng. Tôi đã sử dụng lại cùng một lưới sản phẩm trên toàn bộ trang web và nó là 100% DRY. Tôi đã sử dụng nhánh dev của Stash và đã sử dụng tính năng nhúng mới. Mặc dù các lần nhúng thông thường luôn là tùy chọn hoạt động, tính năng nhúng Stash hiệu quả hơn và mạnh mẽ hơn.

Sự khác biệt thực sự là cách bạn chuyển các biến và khi nhúng được phân tích cú pháp. Với tính năng nhúng stash có thể được sử dụng bên trong thẻ lặp và phân tích cú pháp dữ liệu chỉ một lần. (Khi các lần nhúng thông thường được phân tích cú pháp với mỗi lần lặp của vòng lặp.)

Dưới đây là Gist tôi đã đăng lại một thời gian cho người dùng khác trên Twitter. https://gist.github.com/2950536

Lưu ý, ví dụ thể hiện nhiều tệp và khối mã hoặc tôi chỉ đăng ở đây. IMO, nó sẽ làm cho bài đăng này khó theo dõi và đọc nếu tôi đăng nó ở đây. Về cơ bản nó theo một cách tiếp cận partials mẫu sửa đổi.

Thông tin thêm về partials mẫu. http://eeinsider.com/blog/ee-podcast-stash-template-partials/

Nhưng để trực tiếp trả lời câu hỏi "Làm thế nào để thay thế biến nhúng bằng Stash?". Giải pháp là khá đơn giản và dựa trên khái niệm lập trình cốt lõi của "setters" và "getters". Lý thuyết là, nếu một bộ một biến nó có thể được lấy tại bất kỳ điểm nào sau này trong mẫu. Bí quyết là thiết lập các biến trước khi các getters được phân tích cú pháp.

{exp:stash:set} 

    {stash:page_content} 

     {exp:channel:entries channel="your-channel"} 

      {stash:your_var_1}Some value 1{/stash:your_var_1} 
      {stash:your_var_2}Some value 2{/stash:your_var_2} 
      {stash:your_var_3}Some value 3{/stash:your_var_3} 
      {stash:your_var_4}Some value 4{/stash:your_var_4} 

      {stash:embed name="your-template" process="start"} 

     {/exp:channel:entries} 

    {/stash:page_content} 

{/exp:stash:set} 

{stash:embed name="header" process="end"} 

Đó là nơi thông số có hiệu lực. Điều này sẽ cho phép bạn nhúng mẫu của mình trước khi vòng lặp mục nhập được chạy và nhúng tiêu đề chứa trình bao bọc trang web và xuất nội dung trang. Một khi bạn nhận được hang của nó, nó trở nên thực sự mạnh mẽ và làm cho trang web của bạn sạch hơn rất nhiều.

+0

Cảm ơn câu trả lời mạnh mẽ, Justin! Tuy nhiên, tôi không thể có được {stash: embed} cơ bản để hoạt động bình thường. Tôi có thư mục Stash được tham chiếu trong tập tin bootstrap của tôi, không có lỗi chính tả, sử dụng bản beta mới nhất. Nó chỉ viết ra '{stash: embed name =" test "}' thay vì nội dung thực trong test.html. –

+0

D'oh! Tôi có lẽ nên kích hoạt phần mở rộng. Cảm ơn, @croxton! (twitter.com/croxton) –

+0

Đây là thứ tuyệt vời, Justin. Và thậm chí bạn có thể chuyển các biến cho các mẫu được nhúng như '{stash: embed name =" test "stash: limit =" 20 "}'. Nifty! –

7

Bạn có thể sử dụng tính năng nhúng hoặc có thể stash tùy thuộc vào những gì bạn đang cố gắng chuyển.

https://github.com/croxton/Stash

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