masoud_razor
10-07-2008, 21:35
مقدمه : چرا از Template استفاده کنيم ؟
در يک جمله می توان گفت برای جدا کردن منطق برنامه از نحوه ارائه!
با استفاده از يک Templating Engine می توان به اين هدف درست يافت به ترتيبی که برنامه نويس در گير ارائه و طراح رابط کاربر درگير کار برنامه نويس نشوند و با يک زبان مشترک باهم تعامل خواند داشت. به اين ترتيب برنامه نويس خيلی راح می تواند منطق برنامهرا عوض کند بدون اينکه در گير ارائه شود و طراح نيز می تواند بدون کمک برنامه نويس شکل و شمايل يک سايت را کاملاً عوض کند.
اين چند جمله بايد تا حدی برای شما روشن کرده باشد که با استفاده از اين روش تا چه حد انعطاف در کار بوجود می آيد. جالب نيست؟!
تعداد زيادی Templating Engine برای PHP وجود دارد از کلاسهای PEAR گرفته تا Smarty و بسياری ابزار های ديگر، ولی با توجه به موضوع اين مقاله از ديگر ابزار ها صرف نظر کرده و به Smarty(
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید) می پردازيم .
Smarty از PHP و Zend Engine استفاده می کند و با استفاده از آن، برنامه ها را با کمترين سربار نسبت به حالتی که از Template استفاده نشده باشد اجرا می شوند چون Smarty يک بار الگو را کامپايل کرده و تا وقتی که الگو تغيير پيدا نکد از نسخه کامپايل شده استفاده می نمايد. برای بالا بردن کارايی امکانات caching هم دارد.
Smarty چگونه کار می کند ؟
Smarty بصورت شی گرا طراحی شده و عمل می کند پس برای استفاده از آن بايد يک instance از آن ايجاد کنيم :
<?php
require_once('Smarty.class.php'); // use absolute path here, if necessary
$smarty = new Smarty;
?>
Smarty بصورت پيش فرض در همان شاخه ای که صدا می شود دنبال الگو می گردد ولی بنا به دلايل امنيتی الگوها نبايد در شاخه ای که از طريق وب قابل دسترسی هستند قرار گيرند برای معرفی مسير دايرکتوريهای Smarty به شکل زير عمل می کنيم :
$smarty->template_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$smarty->compile_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$smarty->config_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$smarty->cache_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
شاخه template شاخه ای است که Smarty در آن به دنبال فایلهای .tpl می گردد.
شاخه compile شاخه ای است که Smarty در آن الگوهای کامپایل شده را ذخیره می کند.
شاخه config شاخه ای است که Smarty در آن به دنبال فایلهای تنظیمات می گردد.
شاخه cache شاخه ای است که Smarty در آن به دنبال فایلهایcache را ذخیره می کند.
روش دیگری نیز برای معرفی این متغیر ها وجود دارد و آن هم استفاده از مفهوم ارث بری است :
<?php
// require the Smarty class
require_once('Smarty.class.php');
// extend the Smarty class
class my_Smarty extends Smarty {
function my_Smarty() {
// create the Smarty object
$this->Smarty();
// set Smarty folders
$this->template_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->compile_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->config_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->cache_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
// set other Smarty options
$this->use_sub_dirs = false;
}
}
?>
حالا وقت آن رسیده که استفاده از Smarty را در عمل ببینیم :
//test.php
<?php
// require the Smarty class
require_once('Smarty.class.php');
// extend the Smarty class
class my_Smarty extends Smarty {
function my_Smarty() {
// create the Smarty object
$this->Smarty();
// set Smarty folders
$this->template_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->compile_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->config_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->cache_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
// set other Smarty options
$this->use_sub_dirs = false;
}
}
//creating an instance of my_smarty
smarty=new my_smarty();
// assign values from PHP
$smarty->assign('title', 'this is a sample');
$smarty->assign('testـstatement', 'Hello friends');
// display a template
$smarty->display('test.tpl');
?>
//test.tpl
<html>
<head><title>{ $title }</title></head>
<body> { $testـstatement }!</body>
</html>
هنگامی که مرور گر درخواستی برای صفحه test.php می فرستد مقدار متغیر ها بصورت \ویا توسط PHP مقدار دهی میشود و خروجی برای کار بر به شکل زیر خواه بود :
[/code]
Hello friends !
[/code]
استفاده ازفایلهای Configuration :
این فایلهای برای طراحیان Template بسیار مفید است، چرا که می توانند تنظیماتی را که در سراسر سیستم استفاده می شود مانند رنگها و ... را در این فایلها قرار دهند.
در يک جمله می توان گفت برای جدا کردن منطق برنامه از نحوه ارائه!
با استفاده از يک Templating Engine می توان به اين هدف درست يافت به ترتيبی که برنامه نويس در گير ارائه و طراح رابط کاربر درگير کار برنامه نويس نشوند و با يک زبان مشترک باهم تعامل خواند داشت. به اين ترتيب برنامه نويس خيلی راح می تواند منطق برنامهرا عوض کند بدون اينکه در گير ارائه شود و طراح نيز می تواند بدون کمک برنامه نويس شکل و شمايل يک سايت را کاملاً عوض کند.
اين چند جمله بايد تا حدی برای شما روشن کرده باشد که با استفاده از اين روش تا چه حد انعطاف در کار بوجود می آيد. جالب نيست؟!
تعداد زيادی Templating Engine برای PHP وجود دارد از کلاسهای PEAR گرفته تا Smarty و بسياری ابزار های ديگر، ولی با توجه به موضوع اين مقاله از ديگر ابزار ها صرف نظر کرده و به Smarty(
برای مشاهده محتوا ، لطفا وارد شوید یا ثبت نام کنید) می پردازيم .
Smarty از PHP و Zend Engine استفاده می کند و با استفاده از آن، برنامه ها را با کمترين سربار نسبت به حالتی که از Template استفاده نشده باشد اجرا می شوند چون Smarty يک بار الگو را کامپايل کرده و تا وقتی که الگو تغيير پيدا نکد از نسخه کامپايل شده استفاده می نمايد. برای بالا بردن کارايی امکانات caching هم دارد.
Smarty چگونه کار می کند ؟
Smarty بصورت شی گرا طراحی شده و عمل می کند پس برای استفاده از آن بايد يک instance از آن ايجاد کنيم :
<?php
require_once('Smarty.class.php'); // use absolute path here, if necessary
$smarty = new Smarty;
?>
Smarty بصورت پيش فرض در همان شاخه ای که صدا می شود دنبال الگو می گردد ولی بنا به دلايل امنيتی الگوها نبايد در شاخه ای که از طريق وب قابل دسترسی هستند قرار گيرند برای معرفی مسير دايرکتوريهای Smarty به شکل زير عمل می کنيم :
$smarty->template_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$smarty->compile_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$smarty->config_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$smarty->cache_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
شاخه template شاخه ای است که Smarty در آن به دنبال فایلهای .tpl می گردد.
شاخه compile شاخه ای است که Smarty در آن الگوهای کامپایل شده را ذخیره می کند.
شاخه config شاخه ای است که Smarty در آن به دنبال فایلهای تنظیمات می گردد.
شاخه cache شاخه ای است که Smarty در آن به دنبال فایلهایcache را ذخیره می کند.
روش دیگری نیز برای معرفی این متغیر ها وجود دارد و آن هم استفاده از مفهوم ارث بری است :
<?php
// require the Smarty class
require_once('Smarty.class.php');
// extend the Smarty class
class my_Smarty extends Smarty {
function my_Smarty() {
// create the Smarty object
$this->Smarty();
// set Smarty folders
$this->template_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->compile_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->config_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->cache_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
// set other Smarty options
$this->use_sub_dirs = false;
}
}
?>
حالا وقت آن رسیده که استفاده از Smarty را در عمل ببینیم :
//test.php
<?php
// require the Smarty class
require_once('Smarty.class.php');
// extend the Smarty class
class my_Smarty extends Smarty {
function my_Smarty() {
// create the Smarty object
$this->Smarty();
// set Smarty folders
$this->template_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->compile_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->config_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
$this->cache_dir = '/var/[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]';
// set other Smarty options
$this->use_sub_dirs = false;
}
}
//creating an instance of my_smarty
smarty=new my_smarty();
// assign values from PHP
$smarty->assign('title', 'this is a sample');
$smarty->assign('testـstatement', 'Hello friends');
// display a template
$smarty->display('test.tpl');
?>
//test.tpl
<html>
<head><title>{ $title }</title></head>
<body> { $testـstatement }!</body>
</html>
هنگامی که مرور گر درخواستی برای صفحه test.php می فرستد مقدار متغیر ها بصورت \ویا توسط PHP مقدار دهی میشود و خروجی برای کار بر به شکل زیر خواه بود :
[/code]
Hello friends !
[/code]
استفاده ازفایلهای Configuration :
این فایلهای برای طراحیان Template بسیار مفید است، چرا که می توانند تنظیماتی را که در سراسر سیستم استفاده می شود مانند رنگها و ... را در این فایلها قرار دهند.