यदि आप इस तरह से काम करने जा रहे हैं, तो आप अपने तर्क और डिजाइन को सही, अलग करना चाहते हैं।
लेकिन आपको ऐसा करने के लिए स्मार्टी का उपयोग करने की आवश्यकता नहीं है।
प्राथमिकता मानसिकता के बारे में है। मैंने देखा है कि लोग Smarty में चौंकाने वाली चीजें करते हैं, और अंततः में साइट विकसित करने वाले लोगों में बदल जाता है, और फिर कुछ उज्ज्वल स्पार्क तय करेंगे कि उन्हें Smarty में एक टेम्पलेट इंजन लिखने की आवश्यकता है (कभी गूंगा विचार की संभावना को कम से कम न समझें)।
यदि आप अपना कोड दो भागों में तोड़ते हैं और खुद को मानक मानने के लिए मजबूर करते हैं, तो आपको बेहतर प्रदर्शन मिलेगा।
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>
पीएचपी एक templating इंजन के रूप में लिखा गया था, तो आप कम से कम कि क्या आकलन करने से पहले इसके लिए डिज़ाइन किया गया कार्य के लिए इसका इस्तेमाल करने की कोशिश करनी चाहिए या आपको Smarty में जाने की जरूरत नहीं है।
इसके अलावा, यदि आप एक templating इंजन का उपयोग करना चाहते हैं, एक है कि डिफ़ॉल्ट द्वारा एचटीएमएल निकल जाता है पाने के लिए प्रयास करें और आप के बजाय "ऑप्ट आउट कर" "में अनु।" आप अपने आप को बहुत सारे एक्सएसएस सिरदर्द बचाएंगे। इस संबंध में Smarty कमजोर है, और इसके कारण, इसमें बहुत सारी सामग्री-भयानक टेम्पलेट्स लिखे गए हैं।
{if $cond}
{$dangerous_value}
{else}
{$equally_dangerous_value}
{/if}
कैसे चतुर टेम्पलेट्स जाना आम तौर पर है।समस्या dangerous_value मनमाना एचटीएमएल हो सकता है $ है और यह सिर्फ हर जगह अनुसरणीय स्पेगेटी कोड के साथ करने के लिए भी अधिक बुरा कोडिंग प्रथाओं ले जाता है।
किसी भी टेम्पलेट भाषा को आप पर विचार करते हैं इस चिंता को पूरा करना चाहिए। उदा .:
{$code_gets_escaped}
{{$code_gets_escaped_as_a_uri}}
{{{$dangerous_bare_code}}}
इस तरह, शोषण के लिए अपने संभावित दरवाजे के रूप में शोषण डिफ़ॉल्ट व्यवहार किया जा रहा है द्वार का विरोध किया, टेम्पलेट में आसानी से समझ रहे हैं।
आप $ pageData = new stdClass() ;, जो भी (ऑब्जेक्ट) (सरणी()) के समान हैं; –
@tom, हाँ, विचित्र रूप से, (ऑब्जेक्ट) नोटेशन कुछ हद तक तेज़ है :)। हालांकि यह क्यों है, मुझे नहीं पता। –
1060K बार/सेकंड बनाम 819 के समय/सेकंड विषम। –