Nếu bạn định làm theo cách đó, bạn muốn tách logic và thiết kế của mình thành sự thật.
Nhưng bạn không cần sử dụng Smarty để thực hiện việc này.
Ưu tiên là về tư duy. Tôi đã thấy mọi người làm những điều gây sốc trong Smarty, và cuối cùng biến thành những người đang phát triển các trang web trong Smarty, và sau đó một số tia sáng sẽ quyết định họ cần viết một công cụ mẫu trong Smarty (Không bao giờ đánh giá thấp tiềm năng của ý tưởng ngu ngốc).
Nếu bạn chia mã thành hai phần và bắt buộc phải tuân theo tiêu chuẩn, thì bạn sẽ có hiệu suất tốt hơn nhiều.
PageLogic.php
<?php
$pageData = (object)(array()); // Handy trick I learnt.
/* Logic Goes here */
$pageData->foo = SomeValue;
ob_start();
require("layout.php");
ob_end_flush();
layout.php
<html>
<!-- etc -->
<?php for ($i = 1; $i < 10; $i++){ ?>
<?php echo $pageData->foo[$i]; ?>
<?php } ?>
<!-- etc -->
</html>
PHP Đã được viết như một công cụ khuôn mẫu, vì vậy bạn nên ít nhất thử sử dụng nó cho công việc thiết kế của nó trước khi đánh giá liệu hay không bạn cần phải nghiên cứu về Smarty.
Hơn nữa, nếu bạn quyết định sử dụng một động cơ templating, cố gắng có được một mà thoát HTML bởi mặc định và bạn "không tham gia" thay vì "từ chối trong." Bạn sẽ tiết kiệm cho mình rất nhiều đau đầu XSS. Smarty là yếu trong khía cạnh này, và vì điều này, có rất nhiều mẫu nội dung ngây thơ được viết trong đó.
{if $cond}
{$dangerous_value}
{else}
{$equally_dangerous_value}
{/if}
Thông thường các mẫu Smarty sẽ như thế nào.Vấn đề là $ dangerous_value có thể là HTML tùy ý và điều này chỉ dẫn đến thậm chí nhiều hơn thực hành mã hóa xấu với mã spaghetti không thể tha thứ ở khắp mọi nơi.
Bất kỳ ngôn ngữ mẫu nào bạn xem là nên phục vụ cho mối quan tâm này. ví dụ .:
{$code_gets_escaped}
{{$code_gets_escaped_as_a_uri}}
{{{$dangerous_bare_code}}}
Bằng cách này, cửa ra vào tiềm năng của bạn để khai thác có thể dễ dàng thấy rõ trong các mẫu, như trái ngược với lối ra vào để khai thác là DEFAULT hành vi.
bạn cũng có thể làm $ pageData = new stdClass() ;, tương tự như (object) (array()); –
@tom, vâng, kỳ quặc, ký hiệu (đối tượng) hơi nhanh hơn :). Tại sao đó là tuy nhiên, tôi không biết. –
1060K lần/giây so với 819K lần/giây lẻ. –