2012-02-16 18 views
6

Tôi đang cố gắng làm việc với khuôn khổ FatFree và cố gắng sử dụng công cụ mẫu. Tôi hiển thị mẫu với mã sau -Mã PHP trong mẫu FatFree

echo Template::serve('template.php'); 

Vấn đề mà tôi đang gặp phải là bên trong tệp template.php các thẻ F3 được công nhận nhưng mọi mã PHP đều không hoạt động. Ví dụ, nếu tôi có đoạn mã sau trong file template.php -

<?php 
if (F3::get('var') == 'var1') { 
    ?> 
    <span>var1 is present</span> 
    <?php 
} else { 
    ?> 
    <span>var1 not present</span> 
    <?php 
} 
?> 

đây cả var1 is presentvar1 not present được in không phụ thuộc vào giá trị của var. Ngoài ra, php cho vòng không hoạt động - vì vậy về cơ bản tất cả các mã php không hoạt động.

Tuy nhiên, nếu tôi sử dụng <F3:check> để viết mã PHP ở trên, thì mọi thứ hoạt động tốt. Chúng ta không thể sử dụng mã PHP trong các mẫu. Nếu đây là trường hợp, đây là một hạn chế nghiêm trọng.

+0

Đó là thú vị ... Tôi nhìn vào nó. Tôi đang sử dụng nó ngay bây giờ và chưa thử nghiệm khía cạnh đó. –

+0

Yup nếu bạn sử dụng Mẫu, bạn không thể sử dụng PHP thay vì bạn cần sử dụng thẻ mẫu f3. Bạn cần sử dụng View nếu bạn cần sử dụng PHP làm công cụ tạo khuôn mẫu mà tôi nghĩ. Nhưng tôi không thấy bất kỳ nhược điểm nào ở đó. – amilaishere

Trả lời

8

Tôi đã tìm thấy câu trả lời, mặc dù tôi không thực sự thích nó.

Có hai chức năng khác nhau, F3::render()Template::serve()

Với F3::render() bạn có thể đánh giá biểu thức PHP và sử dụng F3::get() để lấy biến. Theo trang web: "The only issue with embedding PHP code in your templates is the conscious effort needed to stick to MVC principles"

Template::serve() chỉ dành cho templating. Có nghĩa là nó chỉ đơn giản là để xử lý ngôn ngữ templating. Vì vậy, về cơ bản, và có nó hút và không có ý nghĩa, bạn có thể đánh giá mã PHP trong F3::render() và bạn không thể sử dụng biến templating ({{@var}}) -OR- bạn có thể sử dụng Template::serve() và bạn được giới hạn chỉ gọi các hàm PHP, và không thực sự đánh giá mã PHP.

+0

Cảm ơn câu trả lời. Tôi nghĩ rằng tôi có thể sống với điều đó mặc dù nó là một câu hỏi nghiêm túc trên chính khuôn khổ đó. Không có khung khác (giá treo ví dụ) làm điều đó. Bạn nói rằng người ta có thể gọi hàm PHP mặc dù. Các chức năng đó nằm ở đâu và tôi có thể gọi chúng như thế nào? – Siddharth

+5

Bạn có thể gọi bất kỳ hàm nào {{{date ('m/d/Y', @ timestamp)}} 'hoặc tôi sử dụng hàm đã tạo được xác định trong trang index.php để giải mã dữ liệu,' {{exploded (@delim, @ cụm từ, 0)}} '. Tôi nghĩ rằng điều chính là '{{}}' về cơ bản là các thẻ ngắn '' để bạn có thể làm bất cứ điều gì trong dấu ngoặc đơn mà bạn có thể làm với các thẻ ngắn. –

+0

Tôi không nghĩ rằng nó hút nhưng thay vào đó là một ví dụ về những gì dường như là "thiết kế có chủ ý" để hạn chế "chất béo" (tức là PHP) trong các mẫu/lượt xem (chơi có chủ ý). Với Phân đoạn có điều kiện qua và phân đoạn lặp lại qua không cần nhiều mã PHP trong mẫu và nếu cần PHP phức tạp thì hãy đánh giá nó trong bộ điều khiển nơi nó thuộc và truy cập nó dưới dạng biến trong mẫu của bạn.Việc tách mã tốt hơn nhiều vì các nhà thiết kế giao diện người dùng không cần phải lo lắng về bản thân với lập trình và các lập trình viên có thể tập trung vào back-end. – nikolaosinlight

0

Có thể thử sử dụng công cụ tạo mẫu khác nhau cho phép bạn xác định phụ thuộc biến khối dễ dàng hơn?

Ví dụ trong PHPTal http://phptal.org/manual/en/split/tal-condition.html bạn có thể làm điều đó như thế:

<div tal:condition="php: var == 'var1'"> 
.... 
</div> 
+0

Tại sao? Công cụ mẫu tích hợp sẵn không có chất béo đã có logic Phân đoạn có điều kiện ngay cả khi OP tự đề cập đến vấn đề của họ một cách hoàn hảo. Tôi nghĩ rằng vấn đề là OP thích đặt PHP trong các mẫu của họ mà không nhất thiết phải là một điều tốt nếu bạn xem xét thiết kế so với lập trình và tách mối quan tâm w.r.t. MVC. – nikolaosinlight