2012-01-19 20 views

Trả lời

23

Smarty3 cho phép bạn {$var = ['foo' => 'bar', 'sub' => [1, 2, 3]]}{$var.foo = 'other'}

nếu những tùy chọn không đủ, hãy viết một plugin function.

+0

Tôi đã thử những lời khuyên này và nó hoạt động. Tính năng này dường như không được ghi lại trong tài liệu Smarty, điều này làm cho lời khuyên này trở nên có giá trị hơn đối với tôi. –

10

Trong quá khứ, tôi đã sử dụng hai phương pháp - một ác và bẩn một - để nhanh chóng gán một mảng bên trong một tpl:

{* Am I evil? *} 
{php} 
    $array = array("cat", "dog", "rabbit"); 
    $this->assign("myArray", $array); 
{/php} 

{* Am I dirty? *} 
{assign var='myArray' value=','|explode:"cat,dog,rabbit"} 

Cả hai kết quả trong mảng của bạn có sẵn trong các mẫu để xây dựng một đơn giản vòng lặp. Dù sao tôi luôn luôn thay đổi mã của tôi theo cách này, vì vậy tôi không cần thứ này chút nào.

+0

Tôi không thích cách tiếp cận đầu tiên, vì mã php "nội tuyến". Các giải pháp thứ hai là một chút khôn lanh nhưng vẫn còn hợp lệ thông minh mà không có bất kỳ hack. Đã bỏ phiếu! –

1

Từ quan điểm MVC, phần Xem của nó chỉ chịu trách nhiệm hiển thị dữ liệu. Tôi sẽ khuyến khích bạn suy nghĩ lại ứng dụng theo cách mà nó sẽ cho phép bạn xử lý dữ liệu trong Mô hình và vượt qua nó để chỉ hiển thị trong Chế độ xem.

+0

Và làm thế nào để bạn xử lý một bảng (có hàng) trong một Mô hình để không có bất kỳ đánh dấu HTML nào? Bạn vẫn phải truyền toàn bộ mảng dữ liệu và xây dựng bảng động từ nó trong khung nhìn. – Andrew

+0

@Andrew Tôi có thiếu gì đó trong câu trả lời của mình không? Tôi không nói rằng khung nhìn phải tĩnh, tôi chỉ chỉ ra rằng tất cả việc xử lý dữ liệu nên được thực hiện trong mô hình và được chuyển tới khung nhìn được hiển thị. – Catalin

+0

Catalin> Vâng, tôi hiểu ý của bạn là gì. Tôi chỉ muốn biết nếu có một cách để ngăn chặn vòng lặp trong mẫu. Và AFAIK không có bất kỳ ... – Andrew

5

Nó thực sự rất đơn giản:

{assign 'myArray' ['cat', 'dog', 'rabbit']} 
+0

Tính năng này có hoạt động với phiên bản 2 không? –

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