Smarty چیست؟ — آشنایی با موتور قالب ساز اسمارتی
اسمارتی (Smarty) یک «سیستم قالب وب» (Web Template System) به زبان برنامه نویسی PHP است که در ابتدا به عنوان ابزاری برای «تفکیک دغدغهها» (Separation of Concerns) عرضه شد. در این مقاله به طور جامع به این سوال پاسخ داده شده است که Smarty چیست و همچنین به سایر مباحث و سوالات مهم برای آشنایی با موتور قالب ساز اسمارتی پاسخ داده میشود.
Smarty چیست ؟
اسمارتی یک موتور قالب (Template Engine) برای PHP به حساب میآید. اسمارتی این امکان را به وجود میآورد که بتوان منطق (Logic) و نمایش (بازنمایی | Presentation) را با تفکیک کدهای PHP از نشانهگذاریهای HTML یا سایر کدهای وب سایت جداسازی کرد. اسمارتی با قصد سادهسازی عملیات «حیطه بندی» (Compartmentalization) یا کپسولهسازی در برنامه نویسی ایجاد شد تا این امکان به وجود بیاید که فرانت اند در یک صفحه وب به طور جداگانه از بک اند آن قابل تغییر باشد. در حالت ایدهآل، این کار باعث کاهش هزینه و کمینه کردن زحمات مربوط به نگهداری نرم افزار میشود.
در پاسخ به این سوال که Smarty چیست باید گفت که اسمارتی محتوای وب را از طریق قرار دادن برچسبهای (تگهای) مخصوص اسمارتی در داخل یک سند تولید میکند. این برچسبها به همراه سایر کدها پردازش و جایگزین میشوند. برچسبها هدایت کنندههایی برای اسمارتی به حساب میآیند که به وسیله جدا کنندههای قالب احاطه میشوند. این هدایت کنندهها میتوانند متغیرهایی باشند که به وسیله یک علامت دلار ($) مشخص میشوند. همچنین، هدایت کنندهها میتوانند تابع، گزارههای منطقی یا حلقه هم باشند. Smarty به برنامه نویسان PHP اجازه میدهد تا توابع سفارشی را تعریف کنند که با استفاده از برچسبهای اسمارتی قابل دسترس هستند.
حال در ادامه برای درک بهتر پاسخ به این سوال که Smarty چیست به ارائه مثالی ساده برای موتور قالب ساز اسمارتی پرداخته شده است.
مثالی برای درک بهتر اسمارتی
با توجه به اینکه اسمارتی PHP را از HTML جداسازی میکند، دو فایل وجود دارند که یکی از آنها حاوی کدهای نمایش است که یک قالب HTML به همراه متغیرها و برچسبهای اسمارتی را شامل میشود ({$title_text|escape} {$body_html}). ساختار این فایل به صورت زیر است:
1<!DOCTYPE html>
2<html lang="en">
3<head>
4 <meta charset="utf-8">
5 <title>{$title_text|escape}</title>
6</head>
7
8<body> {* This is a little comment that won't be visible in the HTML source *}
9{$body_html}
10</body> <!-- this is a little comment that will be seen in the HTML source -->
11</html>
منطق کسب و کار (Business Logic) برای استفاده از قالب اسمارتی فوق به صورت زیر است:
1define('SMARTY_DIR', 'smarty-2.6.22/');
2require_once(SMARTY_DIR . 'Smarty.class.php');
3
4$smarty = new Smarty();
5$smarty->template_dir = './templates/';
6$smarty->compile_dir = './templates/compile/';
7
8$smarty->assign('title_text', 'TITLE: This is the Smarty basic example ...');
9$smarty->assign('body_html', '<p>BODY: This is the message set using assign()</p>');
10
11$smarty->display('index.tpl');
- مقالههای پیشنهادی:
اکنون پس از پاسخ به این سوال که Smarty چیست و ارائه یک مثال ساده برای موتور قالب ساز اسمارتی ، بهتر است برای آشنایی بیشتر با این موتور قالب به شرح مختصری از ویژگیهای آن پرداخته شود.
ویژگی های Smarty چیست ؟
تمرکز اصلی اسمارتی بر قالب سازی و کدنویسی کمتر است. در این بخش از مقاله «Smarty چیست» برخی از ویژگیهای این موتور قالب محبوب PHP فهرست شدهاند:
- ارثبری قالب سازی : درست مثل هر موتور قالب دیگر، ویژگی وراثت قالب هم به فهرست قابلیتهای اسمارتی اضافه شده است تا به راحتی بتوان از کدهای قالب استفاده و آنها را مدیریت کرد.
- کامپایل کردن : یکی از ویژگیهای اسمارتی این است که این موتور قالب به صورت بالاسری (Overhead) قالب را پارس نمیکند و به جای آن، تنها یک بار کامپایل انجام میشود. عملیات کامپایل تنها یک بار وقتی که هر قالب برای اولین بار فراخوانی میشود صورت میگیرد و سپس نسخههای کامپایل شده از آن نقطه به بعد مورد استفاده قرار خواهند گرفت. اسمارتی مدیریت این مسئله را بر عهده میگیرد تا طراح قالب فقط قالبهای اسمارتی را ویرایش کند و هیچ وقت نیازی نداشته باشد که نسخههای کامپایل شده را مدیریت کند.
- ذخیرهسازی موقت پیشفرض : برای سرعت بخشیدن به فراخوانی توابع fetch() و display()، اسمارتی دارای پشتیبانی پیشفرض برای ذخیرهسازی موقت (Caching) است.
- قابلیت Sandboxing : اسمارتی قالبها را از PHP جدا میکند که این مسئله باعث میشود تا جداسازی لایه نمایش از منطق کسب و کار حاصل شود. علاوه بر این، Smarty دارای ویژگیهای امنیتی است که میتواند محدودیتهای جزئی را در قالبها اعمال کند. این مسئله در صورتی که قالبهای ویرایش شخص ثالث وجود داشته باشند، بسیار کاربردی است.
- انتقالپذیری : با توجه به اینکه قالبهای اسمارتی غیر وابسته به زبان هستند، میتوان به راحتی آنها را به زبانهای دیگری (مثل جاوا اسکریپت) با یک کامپایلر دیگر کامپایل کرد و نحو مانوس آن را میتوان به سایر زبانهای برنامه نویسی انتقال داد.
در ادامه مقاله «Smarty چیست» به آموزش نصب Smarty پرداخته شده است. پیش از آن، دورههای آموزش برنامه نویسی PHP فرادرس به علاقهمندان معرفی شدهاند.
معرفی فیلم های آموزش PHP فرادرس
در پاسخ به این سوال که Smarty چیست ، توضیح داده شد که اسمارتی یک موتور قالب ساز برای زبان PHP به حساب میآيد. بنابراین برای استفاده از اسمارتی بهتر است آشنایی با زبان PHP وجود داشته باشد. برای یادگیری برنامه نویسی PHP میتوان از دورههای آموزش PHP فرادرس استفاده کرد. دورههای مختلف مرتبط با زبان PHP در این مجموعه شامل کتابخانهها، فریمورکها و سایر فناوریهای مرتبط در قالب مجموعه دورههای آموزش PHP در سایت فرادرس گردآوری شدهاند. مجموعه دورههای آموزش برنامه نویسی PHP در سایت فرادرس، تقریباً حاوی ۳۸۰۰ دقیقه محتوای آموزش ویدیویی است.
در حال حاضر، این مجموعه ۱۰ دوره آموزشی را شامل میشود که مباحث مختلف مقدماتی تا پیشرفته در ارتباط با زبان برنامه نویسی PHP در آنها ارائه شدهاند. بسیاری از دورههای آموزشی در مجموعه آموزش برنامه نویسی PHP به صورت پروژه محور ارائه میشوند و در آنها از مثالهای مختلفی برای درک بهتر مفاهیم مربوطه استفاده شده است. همچنین، دورههای آموزشی برخی از فریمورکهای PHP مبتنی بر معماری MVC نیز در این مجموعه قابل دسترسی هستند. در ادامه، برخی از دورههای آموزشی کلیدی در مجموعه آموزش PHP معرفی شدهاند:
- فیلم آموزش برنامه نویسی PHP (طول مدت: ۲۸ ساعت و ۳۱ دقیقه، مدرس: دکتر مصطفی کلامی هریس): هدف این فرادرس، آموزش تمامی موضوعات و مباحث عملی مورد نیاز برای ورود به دنیای برنامه نویسی و پیادهسازی وب به روش پویا و با استفاده از زبان PHP است. این دوره آموزشی برای افرادی مناسب است که قصد ورود به دنیای برنامه نویسی با زبان PHP را دارند. برای دیدن فیلم آموزش برنامه نویسی PHP + کلیک کنید.
- فیلم آموزش پروژه محور طراحی وب سایت با PHP و MySQL (طول مدت: ۶ ساعت و ۴۰ دقیقه، مدرس: مهندس محمود خاوریان): در این دوره یک پروژه طراحی سایت با نام بانک اطلاعاتی اشعار فارسی تعریف شده و نحوه ساخت آن به صورت گامبهگام آموزش داده شده است. برای دیدن فیلم آموزش برنامه نویسی PHP + کلیک کنید.
- فیلم آموزش فریمورک PHP کدایگنایتر (CodeIgniter): (طول مدت: ۷ ساعت، مدرس: مهندس مهدی عاشوری): هدف این دوره آموزشی شرح نحوه ایجاد وب سایت به روش سریع و اصولی و مبتنی بر مدل MVC با استفاده از چارچوب توسعه CodeIgniter است. برای دیدن فیلم آموزش فریمورک PHP کدایگنایتر (CodeIgniter) + کلیک کنید.
- فیلم آموزش ساخت نرم افزار فروشگاه اینترنتی با فریمورک CodeIgniter: طول مدت: ۷ ساعت و ۱۷ دقیقه، مدرس: مهندس امید نجفی پور): در این دوره، آموزش CodeIgniter با رویکردی پروژه محور ارائه و یک فروشگاه اینترنتی به صورت ساده اما جامع، طراحی و توسعه داده شده است. برای دیدن فیلم آموزش ساخت برنامه فروشگاه اینترنتی با فریمورک CodeIgniter + کلیک کنید.
- فیلم آموزش عبارات منظم در PHP: طول مدت: ۴ ساعت و ۱۶ دقیقه، مدرس: مجتبی حیات الغیب): عبارت منظم یکی از مفاهیم مهم در برنامه نویسی به شمار میرود. این دوره برای افرادی که میخواهند عبارتهای منظم را در سایر زبانهای برنامه نویسی بیاموزند نیز مناسب است. برای دیدن فیلم آموزش عبارات منظم در PHP + کلیک کنید.
- فیلم آموزش REST API در Laravel (لاراول) با بسته Passport: طول مدت: ۲ ساعت و ۵۷ دقیقه، مدرس: مهران شمالی): این دوره برای افرادی مناسب است که قصد یادگیری ساخت API مبتنی بر REST را با استفاده از فریمورک لاراول دارند. برای دیدن فیلم آموزش REST API در Laravel (لاراول) با بسته Passport + کلیک کنید.
حال در بخش بعدی مقاله «Smarty چیست» به آموزش و شرح چگونگی نصب Smarty پرداخته شده است.
آموزش نصب و استفاده از Smarty
در این بخش از مقاله «Smarty چیست»، نحوه نصب و استفاده از موتور قالب Smarty آموزش داده شده است. این آموزش در سطح مبتدی ارائه شده و برای افراد تازهکار مناسب است. اول از همه باید اسمارتی را از وب سایت آن [+] دانلود کرد.
همچنین، آموزش نصب سریع اسمارتی هم در وب سایت رسمی آن ارائه شده است. پس از دانلود آخرین نسخه اسمارتی باید آن را از حالت فشرده خارج کرد و در وب سایت خود قرار داد. بنابراین، مسیر فایلهای مربوط به موتور قالب اسمارتی چیزی شبیه به آدرس URL زیر خواهد بود:
http://example.com/smarty/
برای مثال، فرض میشود فایلها و ساختار دایرکتوری (شاخهها) به صورت زیر باشند:
1- index.php
2- classes
3 ---- ConnectSmarty.class.php
4- smarty_temp
5 ----- templates
6 ----- ---- index.tpl
7 ----- templates_c
8 ----- cache
9 ----- configs
10- smarty/... (main smarty folder)
فایل «ConnectSmarty.class.php» دایرکتوریهای موقت (temp) مختلف را تعریف میکند.
1<?php
2/**
3 * مسیر کامل اسمارتی
4 */
5require_once 'smarty/libs/Smarty.class.php';
6
7/**
8 * اتصال به بسته اسمارتی
9 *
10 */
11
12class ConnectSmarty extends Smarty
13{
14 /**
15 * تعریف مسیر برای اشاره به دایرکتوریهای اسمارتی
16 *
17 * @access public
18 */
19 public function __construct()
20 {
21 parent::__construct();
22
23 // تنظیم دایکرتوریهای پیشفرض
24 $this->setTemplateDir('smarty_temp/templates')
25 ->setCompileDir('smarty_temp/templates_c')
26 ->setCacheDir('smarty_temp/cache')
27 ->setConfigDir('smarty_temp/configs');
28 }
29}
30?>
فایل «index.php» محتوا را تخصیص میدهد و فایل «index.tpl» محتوا را فراخوانی میکند.
1<?php
2require_once('classes/ConnectSmarty.class.php');
3
4// ایجاد شیئی از کلاسی که در بالا لحاظ شده است
5$smarty = new ConnectSmarty;
6
7// تخصیص محتوا
8$smarty->assign('name','Mukesh Chapagain');
9$smarty->assign('address','Kathmandu, Nepal');
10
11// نمایش محتوا
12$smarty->display('index.tpl');
13?>
فایل «index.tpl» محتوا را همانطور که در «index.php» تخصیص داده شده نمایش میدهد.
1<html>
2<head>
3<title> Homepage </title>
4</head>
5<body>
6The author of this tutorial:<br/><br/>
7Name: {$name} <br/>
8Address: {$address} <br/>
9</body>
10</html>
حال در ادامه آموزش نصب اسمارتی در مقاله «Smarty چیست» با توجه به اینکه تفاوتهایی وجود دارند، به ارائه ترجمه راهنمای نصب سریع اسمارتی پرداخته شده که در وب سایت رسمی آن ارائه شده است.
راهنمای نصب سریع اسمارتی در محیط لینوکس
در این بخش از مقاله «Smarty چیست» یک راهنمای ساده برای راهاندازی و اجرای سریع Smarty ارائه شده است. در مستندات آنلاین، توضیحات کاملی در خصوص نصب اسمارتی وجود دارد. این راهنما تنها با هدف سرعت بخشیدن به راهاندازی اسمارتی برای استفاده آماده شده است.
در این راهنما فرض بر این است که فرد آشنایی لازم را با محیط سیستم عامل لینوکس دارد. کاربران ویندوز نیاز به تنظیم مجوزها در جای لازم یا پیدا کردن یک ارائه دهنده میزبانی مناسب دارند.
راهنمای نصب سریع اسمارتی در محیط لینوکس : نصب فایلهای کتابخانه
ابتدا باید فایلهای کتابخانه اسمارتی را روی سیستم خود کپی کرد. در این مثال فرضی، این فایلها در آدرس زیر کپی شدهاند:
/usr/local/lib/php/Smarty/
در صورتی که از FTP یا sFTP برای دسترسی به سرور استفاده میشود، باید فایلهای اسمارتی را به صورت محلی از حالت فشرده خارج کرد و آنها را در پوشه (دایرکتوری) مناسب بارگذاری کرد.
1$> cd YOUR_DOWNLOAD_DIR
2$> gtar -zxvf Smarty-3.0.tar.gz
3$> mkdir /usr/local/lib/php/Smarty
4$> cp -r Smarty-3.0/libs/* /usr/local/lib/php/Smarty
حالا ساختار فایل باید به صورت زیر باشد:
/usr/local/lib/php/Smarty/ debug.tpl plugins/ Smarty.class.php sysplugins/
راهنمای نصب سریع اسمارتی در محیط لینوکس : راه اندازی دایرکتوریها
برای راهاندازی و کارکرد صحیح اسمارتی به چهار دایرکتوری نیاز است. این فایلها برای قالبها، قالبهای کامپایل شده و فایلهای پیکربندی (Config Files) استفاده میشوند. ممکن است از فایلهای ذخیرهسازی موقت (کش کردن) یا فایلهای پیکربندی استفاده نشود، اما بهتر است در هر حال آنها را تنظیم کرد. همچنین توصیه میشود که آنها در خارج از ریشه سند وب سرور قرار داده شوند. کاربر وب سرور PHP نیاز به دسترسی نوشتن در حافظه موقت و همچنین کامپایل کردن دایرکتوریها دارد. در این مثال فرضی، نشانی ریشه سند به صورت زیر است:
/web/www.example.com/docs
نام کاربری وب سرور هم «nobody» است. فایلهای اسمارتی باید در نشانی زیر نگهداری شوند:
/web/www.example.com/smarty/
در صورتی که از FTP/sFTP استفاده میشود، نرم افزار FTP باید به فرد کمک کند تا مجوزهای لازم تنظیم شوند. 775 به معنی user/group = read/write و other = read است.
1$> cd /web/www.example.com
2$> mkdir smarty
3$> mkdir smarty/templates
4$> mkdir smarty/templates_c
5$> mkdir smarty/cache
6$> mkdir smarty/configs
7$> chown nobody:nobody smarty/templates_c
8$> chown nobody:nobody smarty/cache
9$> chmod 775 smarty/templates_c
10$> chmod 775 smarty/cache
راهنمای نصب سریع اسمارتی در محیط لینوکس : پیکربندی اسکریپتها
در ادامه آموزش نصب سریع اسمارتی در مقاله «Smarty چیست» نوبت به آن رسیده است که اپلیکیشن خود را در ریشه سند راهاندازی کرد:
1$> cd /web/www.example.com/docs
2$> mkdir myapp
3$> cd myapp
4$> vi index.php
حال باید فایل «index.php» را به گونهای ویرایش کرد که مشابه کدهای زیر شود:
1<?php
2
3// put full path to Smarty.class.php
4require('/usr/local/lib/php/Smarty/Smarty.class.php');
5$smarty = new Smarty();
6
7$smarty->setTemplateDir('/web/www.example.com/smarty/templates');
8$smarty->setCompileDir('/web/www.example.com/smarty/templates_c');
9$smarty->setCacheDir('/web/www.example.com/smarty/cache');
10$smarty->setConfigDir('/web/www.example.com/smarty/configs');
11
12$smarty->assign('name', 'Ned');
13$smarty->display('index.tpl');
14
15?>
راهنمای نصب سریع اسمارتی در محیط لینوکس : ایجاد قالب
برای ایجاد قالب باید دستور زیر را در خط فرمان لینوکس وارد کرد:
1$> nano /web/www.example.com/smarty/templates/index.tpl
حالا باید فایل «index.tpl» را به صورت زیر ویرایش کرد:
1<html>
2 <head>
3 <title>Smarty</title>
4 </head>
5 <body>
6 Hello, {$name}!
7 </body>
8</html>
اکنون باید از طریق مرورگر به اپلیکیشن جدید رفت که نشانی آن در این مثال فرضی به صورت زیر است:
http://www.example.com/myapp/index.php
در صورتی که همه چیز به درستی کار کند، باید در خروجی متن «Hello Ned!» چاپ شود. در صورتی که هر گونه مشکلی وجود داشته باشد، میتوان نرم افزار Smarty Test Utility را اجرا کرد تا از این مسئله اطمینان حاصل شود که تمام فایلها و پوشهها در جای صحیح خود قرار دارند و مجوزهای درستی به آنها اعطا شده است:
1$smarty->testInstall();
پس از راهاندازی صحیح اسمارتی میتوان از دوره آموزشی فشرده ارائه شده در وب سایت رسمی اسمارتی و همچنین مستندات آنلاین آن برای یادگیری موارد بیشتر استفاده کرد. در پاسخ به سوال اسمارتی چیست به این مسئله اشاره شد که اسمارتی یک موتور قالب سازی است. برای درک بهتر و بیشتر چیستی اسمارتی ، بهتر است در ادامه به این سوال پاسخ داده شود که موتور قالب چیست؟
موتور قالب یا Template Engine چیست؟
یک موتور قالب که بیشتر با نام «پردازنده قالب» (Template Processor) نیز شناخته میشود، نرم افزاری است که جهت ترکیب قالبها با یک مدل داده برای تولید سندهای نتیجه طراحی شده است. زبانی که قالبها با آن نوشته میشوند، «زبان قالب» یا «زبان قالب سازی» (Templating Language) نامیده میشود.
یک سند به دست آمده میتواند هر نوع خروجی قالب سازی شدهای از قبیل اسناد، صفحات وب یا کدهای منبع (در خصوص تولید کدهای منبع) باشد که یا به طور کامل یا به صورت قطعه قطعه خواهند بود.
یک موتور قالب به طور معمول به عنوان بخشی از یک سیستم قالب سازی یا یک فریمورک توسعه اپلیکیشن در نظر گرفته میشود و همچنین ممکن است به عنوان یک پیشپردازنده یا فیلتر مورد استفاده قرار بگیرد. یک موتور قالب به افراد امکان میدهد تا از فایلهای قالب ایستا در اپلیکیشن خود استفاده کنند. در زمان اجرا، موتور قالب متغیرها را در یک فایل قالب با مقادیر واقعی جایگزین و قالب را به یک فایل HTML تبدیل میکند که به کلاینت ارسال شده است. این رویکرد، کار طراحی یک صفحه HTML را بسیار سادهتر میکند.
- مقاله پیشنهادی: سند و ساختار وب سایت در HTML — راهنمای کاربردی
یک موتور قالب نوع خاصی از ماژول پردازش قالب به حساب میآید که تمام ویژگیهای اساسی یک زبان برنامه نویسی مدرن را به نمایش میگذارد. اصطلاح موتور قالب به عنوان یک توصیف عمومی شده از زبانهای برنامه نویسی تکامل یافته محوسب میشود که مقصود اصلی و ویژه آن، پردازش قالبها و دادهها برای تولید خروجی متنی است. این اصطلاح بیشتر در حوزه توسعه وب به کار میرود که در آن از یک سیستم قالب وب استفاده میشود و همچنین در سایر زمینهها نیز کاربرد دارد.
قالب وب سایت چیست؟
قالب وب سایت یک منبع از پیش طراحی شده است که ساختار طرحبندی جامع و ویژگیهای نمایشی یک وب سایت را نشان میدهد. قالب وب سایت توسط تامین کنندگان مختلف ارائه شده است تا به سهولت طراحی وب برای طراحان کمک کند. علاوه بر این، یک قالب وب سایت به عنوان یک قالب صفحه وب یا قالب صفحه نیز شناخته میشود.
انواع موتور قالب ساز
از پردازش قالب در زمینههای مختلفی برای اهداف مختلف استفاده میشود. هدف خاص معمولاً مشروط به برنامه نرم افزاری یا موتور قالب در حال استفاده است. با این حال، انعطافپذیری سیستمهای پردازش قالب اغلب استفادههای غیر متعارف را برای اهدافی که در ابتدا توسط طراحان اصلی در نظر گرفته نشده است، امکانپذیر میسازد. انواع موتورهای قالب مختلفی برای تولید و ایجاد موارد زیر به کار گرفته میشوند:
- موتور قالب وب
- تولید اسناد
- تولید کد منبع
- قابلیتهای عملکردی نرم افزار
XSLT یک مدل پردازش قالب طراحی شده توسط W3C به حساب میآید. این موتور قالب در اصل برای تبدیلهای صورت گرفته روی دادههای XML به اسناد وب یا سایر خروجیها استفاده میشود. زبانهای برنامه نویسی نظیر Perl، پایتون، PHP، روبی، سیشارپ، جاوا و Go پردازش قالب را یا به صورت بومی یا از طریق کتابخانهها و ماژولهای افزونه (Ad-On) پشتیبانی میکنند. صفحات جاوا اسکریپت، صفحههای سرور فعال، Genshi (برای پایتون) و eRuby مثالهایی از انواع موتورهای قالب هستند که به طور خاص برای توسعه وب اپلیکیشنها طراحی شدهاند. علاوه بر این، گاهی پردازش قالب به عنوان یک ویژگی فرعی بستههای توسعه نرم افزار مثل ویرایشگرهای کد، محیطهای توسعه و سیستمهای مدیریت پایگاه داده رابطهای نیز به کار گرفته میشود.
- مقاله پیشنهادی: فایل XML چیست و چگونه و با چه ابزاری میتوان آن را اجرا کرد؟ (+ دانلود فیلم آموزش گام به گام)
سیستم قالب وب چیست؟
یک «سیستم قالب وب» (Web Template System) به طراحان و توسعه دهندگان وب اجازه میدهد تا با قالبهای وب کار کنند و به طور خودکار صفحات وب سفارشی را مثل نتایج یک جستجو بسازند. با این کار میتوان از عناصر ایستای صفحه وب در حین تعریف عناصر پویا بر اساس پارامترهای درخواست وب، مجدداً استفاده کرد.
قالبهای وب از محتوای ایستا پشتیبانی و ساختار و ظاهری پایه را فراهم میکنند. توسعه دهندگان میتوانند قالبها را از طریق سیستمهای مدیریت محتوا، فریمورکهای توسعه وب اپلیکیشن و ویرایشگرهای HTML پیادهسازی کنند. یک سیستم قالب وب از موارد زیر تشکیل شده است:
- موتور قالب (Template Engine): این مورد به عنوان عنصر اصلی پردازش در سیستم به حساب میآید.
- منبع محتوا (Content Resource): هر نوعی از جریانهای داده ورودی مختلف، مثلاً از یک پایگاه داده رابطهای، فایلهای XML، دایرکتوری LDAP و سایر انواع دادههای محلی و شبکهسازی شده را منبع محتوا میگویند.
- منبع قالب (Template Resource): به قالبهای وبی گفته میشود که بر اساس یک زبان قالب سازی تعیین شدهاند.
منابع قالب و محتوا به وسیله موتور قالب پردازش و ترکیب میشوند تا تولید انبوه سندهای وب حاصل شود. مسئلهای که وجود دارد این است که PHP خودش به نوعی یک موتور قالب به حساب میآید. بنابراین، معمولاً این سوال برای اکثر افراد به وجود میآید که چرا با این وجود، باز هم از موتورهای قالب ثانویه استفاده میشود؟ در ادامه سعی شده است تا به این سوال مهم پاسخ داده شود.
- مقاله پیشنهادی: انتخاب بهترین فریمورک برای توسعه وب اپلیکیشن | راهنمای کاربردی
چرا وقتی PHP خودش یک موتور قالب است از یک موتور قالب مثل اسمارتی استفاده میشود؟
این درست است که میتوان از PHP به عنوان یک زبان قالب سازی استفاده کرد، اما وقتی انتخابهای قابل اطمینانتر و کم حجمتری وجود دارند، استفاده از PHP توجیهی ندارد.
برای مثال نمایش دادن مقدار یک متغیر در PHP به صورت زیر انجام میشود:
1<?php echo $var; ?>
اما همین کار را میتوان با کدنویسی بسیار کمتری در دیگر زبانهای قالب سازی مثل Twig یا جنگو به صورت زیر انجام داد:
1 {{ var }}
برای چاپ کردن تنها یک متغیر در خروجی ممکن است تفاوت چندانی احساس نشود، اما در زمان ایجاد یک وب سایت، باید چندین هزار متغیر را چاپ کرد و باز کردن و بستن هزاران برچسب PHP هیچگاه توصیه نمیشود. زبان برنامه نویسی PHP برای نوشتن منطق کسب و کار (Business Logic) بسیار مناسب است و نباید با لایه نمایش مخلوط شود. منطق کسب و کار نحوه ایجاد دادهها، ذخیرهسازی، پردازش و تغییر آنها را تعیین میکند. این درحالی است که لایه نمایش تعیین میکند که دادهها چگونه در یک قالب مشخص مثل XML ،JSON ،HTML یا هر قالب دیگری نمایش داده میشوند.
از نسخه پنجم تا هشتم PHP ، تغییرات و بهینهسازیهای بسیاری را میتوان شاهد بود. تمام این تغییرات مربوط به بهبود منطق کسب و کار هستند. هیچ تغییر قابل ملاحظهای در PHP به عنوان یک زبان قالب سازی ایجاد نشده است و به همین دلیل چندان نمیتوان PHP را به عنوان یک زبان قالب سازی به حساب آورد. برای مثال، چند سال پیش وراثت قالب (Template Inheritance) در جنگو به عنوان روشی برای شبیهسازی مفهوم کلاس برای قالبها معرفی شد:
1 {% extends "base.html" %}
2 {% block header%}
3 {% endblock}
4 {% block body%}
5 {% endblock}
6 {% block footer%}
7 {% endblock}
- مقاله پیشنهادی: آموزش جنگو (Django) | راهنمای کامل و رایگان جنگو برای شروع
همانطور که در کدهای فوق ملاحظه میشود، در عین سادگی هوشمندانه، درک وراثت قالب ساده و این ویژگی بسیار قدرتمند است. این قابلیت آنچنان قدرتمند است که در حال حاضر بسیاری از موتورهای قالب به طور پیشفرض از آن پشتیبانی میکنند. با ادامه داشتن توسعه وب اپلیکیشنهای پیچیدهای که بر پایه معماری MVC مدلسازی شدهاند، داشتن یک مرزبندی و دیواری برای جداسازی منطق بک اند از منطق فرانت اند بسیار اهمیت دارد. به این ترتیب، توسعه دهندگان بک اند و فرانت اند میتوانند در زمینههای مشترکی از پروژه بدون نیاز به دخالت در کدهای یکدیگر همکاری کنند.
معرفی ۵ موتور قالب برتر برای PHP
اکثر فریمورکهای MVC خودشان یک موتور قالب پیشفرض دارند. مثلاً Twig موتور قالب پیشفرض فریمورک سیمفونی است و لاراول هم موتور قالبی به نام Blade را به صورت پیشفرض در خود دارد. اما این بدان معنا نیست که این تنها گزینه برای چارچوب MVC به حساب میآید.
میتوان هر نوع موتور قالب سازی دلخواهی را به همراه هر فریمورک دلخواهی استفاده کرد. در ادامه این بخش 5 تا از پر استفادهترین موتورهای قالب سازی به ترتیب میزان استفاده و محبوبیت معرفی شدهاند:
- Twig : این موتور قالب، محبوبترین موتور قالب به حساب میآید و امکانات کاملی دارد. علاوه بر این ویژگیها، Twig سریعترین موتور قالب هم به شمار میرود.
- Blade : موتور Blade در عین سادگی یک موتور قالب قدرتمند به حساب میآید که به عنوان موتور قالب پیشفرض لاراول ارائه میشود. اما این بدان معنا نیست که نمیتوان از Blade در سایر فریمورکها استفاده کرد. Blade یک قطعه مستقل محسوب میشود.
- Smarty : اسمارتی در طول زمان تغییرات زیادی داشته و مطابقتهای بسیاری برای پاسخ به نیازهای همگان در آن اِعمال شده است. اسمارتی از امکانات جدید در هسته PHP بهره میبرد. اسمارتی از سینتکس ساده {tag} استفاده میکند که به طور خاص برای لایه نمایش (Presentation) طراحی شده است.
- Mustache : از Mustache میتوان برای HTML استفاده و فایلها، کدهای منبع و هر چیز دیگری را پیکربندی کرد. Mustache با بسط دادن برچسبها در قالب کار میکند و مقادیری را به کار میگیرد که در یک هش یا شی فراهم شده باشند.
- Volt : ولت یک زبان قالب سازی بسیار سریع و مناسب برای طراحان وب به حساب میآید که به زبان C و برای PHP نوشته شده است. Volt به میزان زیادی با اجزای دیگر در Phalcon ادغام شده است، تا حدی که میتوان به عنوان یک بخش مستقل در توسعه اپلیکیشنهای خود از آن استفاده کرد.
مقایسه سینتکس اسمارتی با سینتکس PHP
زبان برنامه نویسی PHP برای توسعه کد بسیار مطلوب است، اما بسیاری از افراد استدلال میکنند که جاسازی سینتکس مختصر PHP در بین کدهای HTML میتواند مدیریت کدها را دشوار سازد. Smarty این چالش را با عایقسازی PHP از لایه نمایش به وسیله یک سینتکس بسیار سادهتر مبتنی بر برچسب جبران میکند.
برچسبها محتوای اپلیکیشن را در داخل لایه نمایش به شیوهای تمیز و شهودی نمایان میکنند. برای روشنتر شدن موضوع، در ادامه مقایسهای میان سینتکس PHP و اسمارتی انجام شده است. ابتدا کد PHP ملاحظه میشود:
1<?=$foo?>
کد بالا در Smarty به صورت زیر نوشته میشود:
1{$foo}
باید توجه داشت که سینتکس PHP از پنج کاراکتر علامتگذاری برای نمایش یک متغیر استفاده میکند (<?=?>). این در حالی است که اسمارتی تنها ۲ کاراکتر این چنینی را برای همان کار به کار میگیرد ({}). در اینجا، علامت دلار ($) در نظر گرفته نشده است؛ چون این کاراکتر در سینتکس هر دو مشترک است. حال مقایسه سینتکس اسمارتی و PHP در خصوص دسترسی به آرایه در ادامه انجام شده است. کد PHP برای انجام این کار به صورت زیر است:
1<?=$foo['bar']?>
همین کد در Smarty به صورت زیر نوشته میشود:
1{$foo.bar}
همانطور که ملاحظه میشود، در PHP از ۹ کاراکتر علامتگذاری و در Smarty تنها از ۳ کاراکتر علامتگذاری برای دسترسی به آرایه استفاده شده است. حتی برای چنین مثال سادهای میتوان ملاحظه کرد که «آلایندگی نحوی» (نویز سینتکس) به میزان زیادی در اسمارتی کاهش یافته است. حالا در ادامه، مقایسه سینتکس اسمارتی با سینتکس PHP برای حلقه foreach انجام شده است. این حلقه در PHP به صورت زیر کدنویسی میشود:
1<?php foreach($foo as $bar): ?>
2...
3<?php endforeach; ?>
حالا برای مقایسه، همین حلقه در اسمارتی به صورت زیر است:
1{foreach $foo as $bar}
2...
3{/foreach}
همانطور که در کدهای فوق ملاحظه میشود، در PHP از ۱۸ کاراکتر علامتگذاری استفاده شده و بر خلاف آن، این میزان در Smarty تنها ۵ کاراکتر است. اکنون در ادامه یک مثال واقعی با مخلوط کردن کدها با نشانهگذاریهای HTML ارائه شده است. این مثال با کدهای PHP به صورت زیر است:
1<?php if(!empty($foo)): ?>
2 <?php foreach($foo as $bar): ?>
3 <a href="<?=$bar['zig']?>"><?=$bar['zag']?></a>
4 <a href="<?=$bar['zig2']?>"><?=$bar['zag2']?></a>
5 <a href="<?=$bar['zig3']?>"><?=$bar['zag3']?></a>
6 <?php endforeach; ?>
7<?php else: ?>
8 There were no rows found.
9<?php endif; ?>
حالا همین کارهایی که در کدهای بالا انجام شدهاند در ادامه با استفاده از کدنویسی با سینتکس اسمارتی پیادهسازی شده است:
1{foreach $foo as $bar}
2 <a href="{$bar.zig}">{$bar.zag}</a>
3 <a href="{$bar.zig2}">{$bar.zag2}</a>
4 <a href="{$bar.zig3}">{$bar.zag3}</a>
5{foreachelse}
6 There were no rows found.
7{/foreach}
در مثال کوتاه فوق، اسمارتی ۱۱۰ کاراکتر صرفهجویی داشته، یعنی یک کاهش سینتکس ۳۶ درصدی در سینتکس اتفاق افتاد است. همچنین باید توجه داشت که اسمارتی در هر جایی که امکانش وجود داشته ترتیب توابع Boilerplate یا تکراری را داده است. این مسئله را در خصوص مثال فوق میتوان برای آزمون empty() ملاحظه کرد. Smarty سینتکس قالبها را پاکسازی میکند که باعث میشود آنها آسیبپذیری کمتری داشته باشند. حال بهتر است در بخشهای پایانی مقاله «Smarty چیست» به برخی از سوالات رایج پیرامون این موتور قالب ساز پرداخته شود.
سوالات رایج اسمارتی و موتورهای قالب ساز
در این بخش از مقاله «Smarty چیست» به برخی از سوالات رایج پیرامون موتور قالب ساز اسمارتی پاسخ داده شده است تا ابهامات مربوطه تا حد امکان برطرف شوند.
آیا اسمارتی یک فریمورک PHP به حساب میآید؟
اسمارتی یک موتور قالب ساز وب است که نمایشی از بخشهای HTML و CSS محسوب میشود. فریمورک اسمارتی کاملاً به فناوری برنامه نویسی شیگرا در PHP وابسته است. اما اسمارتی بر اساس معماری MVC و فریمورکهای Zend، کدایگنایتر، CakePHP یا هر نوع فریمورک توسعه وب اپلیکیشن دیگری برای PHP ساخته نشده است.
مراحل استفاده از قالبهای Smarty چیست ؟
نحوه استفاده از قالبهای اسمارتی شامل ۵ مرحله میشود که در ادامه فهرست شدهاند:
- ابتدا باید برای تمرین یک دایرکتوری ایجاد کرد (برای مثال wamp/www/smarty)
- سپس قالب اسمارتی باید دانلود شود. میتوان آن را از وب سایت Smarty دانلود کرد.
- در این مرحله باید فایل فشردهسازی شده قالب اسمارتی دانلود شده را از حالت فشرده خارج کرد.
- سپس به سادگی باید نام پوشه آن را به «Smarty» تغییر داد.
- دو پوشه به نامهای template و template_c نیز باید ایجاد شوند.
چطور میتوان از نسخه نصب شده اسمارتی مطلع شد؟
در صورتی که فرد از نسخه اسمارتی مورد استفاده در قالب یا سند خود اطمینان نداشته باشد، میتوان آن را موقتاً با قرار دادن کد {$smarty. version} در سند مربوطه به دست آورد. این کد نسخه اسمارتی استفاده شده را در خروجی نمایش خواهد داد.
مراحل نصب Smarty چیست ؟
نصب و پیکربندی اسمارتی شامل ۴ گام است که در ادامه به طور خلاصه فهرست شدهاند:
- در گام اول باید آخرین کد منبع پایدار اسمارتی را از وبسایت آن دانلود کرد.
- باید PHP را به گونهای پیکربندی کرد که کتابخانههای اسمارتی را پیدا کند.
- باید اسمارتی را برای اپلیکیشن خود راه انداخت.
- در مرحله آخر باید از نصب صحیح اسمارتی اطمینان حاصل شود.
اسمارتی PHP چطور کار میکند؟
نحوه عملکرد داخلی اسمارتی به این صورت است که این موتور قالب وب رونوشتهایی از قالبها را به عنوان اسکریپتهای PHP کامپایل میکند. بدین طریق، میتوان هم از مزایای سینتکس برچسب قالب و هم از سرعت بالای PHP به طور همزمان بهرهمند شد. عملیات کامپایل زمانی اتفاق میافتد که هر قالب برای اولین بار فراخوانی میشود و سپس نسخههای کامپایل شده از آن لحظه به بعد مورد استفاده قرار میگيرند.
آیا موتورهای قالب سازی ضروری هستند؟
یک موتور قالب ساز مثل اسمارتی برای این منظور مورد نیاز است که بتوان مقادیر محدود به داده را در داخل نشانهگذاریهای خود درونیابی کرد. موتورهای قالب سازی همچنان برای توسعه هر نوع کاربرد وب غیر ایستایی ضروری به نظر میرسند.
آیا موتورهای قالب همچنان در سال ۱۴۰۰ استفاده میشوند؟
موتورهای قالب همچنان مطرح هستند، اما ممکن است به اندازه گذشته محبوب و پراستفاده نباشند. چرا که برای مثال در خصوص زبان جاوا اسکریپت که یکی از پر استفادهترین زبانهای برنامه نویسی در توسعه وب به حساب میآید، فریمورکهای توسعهای نظیر Vue ،React و انگولار پدید آمدهاند. همچنین، معمولاً افراد پیش از آنکه به سراغ بک اند بروند، توسعه وب را با یادگیری یک زبان فرانت اند شروع میکنند.
اکنون در آخرین بخش از مقاله «Smarty چیست» به معرفی دورههای آموزشی مرتبط با مباحث مطرح شده در این مقاله پرداخته شده است.
معرفی فیلم های آموزش موتور قالب و برنامه نویسی PHP
در این بخش پایانی از مقاله «Smarty چیست» به معرفی آن دسته از دورههای وب سایت فرادرس پرداخته شده است که بیشترین ارتباط را با مطالب بیان شده در این مقاله دارند. مرتبطترین دوره مربوط میشود به آموزش موتور قالب Twig برای PHP که در ادامه معرفی شده است.
فیلم آموزش پروژه محور Twig - موتور قالب در PHP
همانطور که در بخش بهترین موتورهای طراحی قالب برای PHP بیان شد، Twig یکی از موتورهای طراحی قالب محبوب و پر استفاده در PHP به حساب میآيد. برای یادگیری نحوه کار با Twig میتوان از دوره آموزش پورژه محور Twig فرادرس استفاده کرد. طول مدت این دوره نزدیک به ۲ ساعت و مدرس آن مهندس فرهاد پوررضا است. در این فرادرس روش نصب و استفاده از موتور قالب Twig به صورت پروژه محور و با ارائه مقدمهای از آموزش PHP شرح داده شده است. این دوره شامل سه درس میشود که از جمله سرفصلهای مهم این دروس میتوان به Template و لزوم استفاده از آن در طراحی وب، تعریف متغیرها و نمایش آنها در Template و سایر موارد اشاره کرد.
- برای مشاهده فیلم آموزش پروژه محور Twig - موتور قالب در PHP + اینجا کلیک کنید.
فیلم آموزش برنامهنویسی PHP
Smarty یک موتور قالب برای زبان PHP است و در پروژههای مبتنی بر این زبان برنامه نویسی مورد استفاده قرار میگیرد. برای یادگیری برنامه نویسی به زبان PHP میتوان از دوره جامع و کاربردی آموزش PHP فرادرس استفاده کرد. طول مدت این دوره ۲۸ ساعت و ۳۱ دقیقه و مدرس آن دکتر مصطفی کلامی هریس است. در این دوره آموزشی در کنار مباحث مربوط به PHP 5.6، ویژگیهای جدید مربوط به PHP 7 نیز شرح داده شدهاند. برخی از سرفصلهایی که در این دوره آموزشی پوشش داده شدهاند، شامل آشنایی با زبان برنامهنویسی PHP، متغیرها، انواع دادهها و ثابتها، ساختارهای کنترل برنامه، عبارتهای شرطی و تصمیمگیری، رشتهها، توابع، مقدمهای بر برنامهنویسی ماژولار (پیمانهای) و سایر موارد است.
- برای مشاهده فیلم آموزش برنامه نویسی PHP + اینجا کلیک کنید.
فیلم آموزش جنگو (Django) فرادرس
جنگو یک فریمورک توسعه وب به زبان پایتون است که در بخش مربوط به توضیح دلیل استفاده از موتور قالب به جای خود PHP در این مقاله به آن اشاره شد. زبان طراحی قالب جنگو، سیستم قالب خودش به حساب میآید. برای یادگیری کار با فریمورک جنگو میتوان از دوره آموزش جنگو فرادرس استفاده کرد. طول مدت این دوره آموزشی ۸ ساعت و ۱۵ دقیقه و مدرس آن، مهندس پدرام شاه صفی است. دوره آموزش جنگو به صورت پروژه محور است و پس از آموزش مباحث نظری، آموزشهای ارائه شده به صورت عملی و در قالب پروژههای نمونه، پیادهسازی شدهاند. درس پنجم این دوره به قالبها اختصاص دارد و در آن موضوعاتی از قبیل آشنایی با قالبها، Template context render و قالبهای Generic شرح داده شدهاند.
- برای مشاهده فیلم آموزش آموزش جنگو (Django) – فریمورک تحت وب با پایتون (Python) + اینجا کلیک کنید.
فیلم آموزش فریمورک PHP کدایگنایتر (CodeIgniter)
یکی از فریمورکهای محبوب PHP، فریمورک CodeIgniter به حساب میآید که بر خلاف Smarty نه یک موتور قالب ، بلکه یک فریمورک توسعه وب مبتنی بر الگوی MVC است. چنین فریمورکهایی رفته رفته در حال جایگزینی با موتورهای قالب هستند و با وجود آنها کمتر از موتورهای طراحی قالب استفاده میشود. برای یادگیری توسعه وب با کدایگنایتر میتوان از دوره آموزش CodeIgniter فرادرس استفاده کرد. طول مدت این دوره آموزشی ۷ ساعت و مدرس آن مهندس مهدی عاشوری است. برخی از سرفصلها و مباحث مطرح شده در این دوره شامل آشنایی با CodeIgniter، آشنایی با مدل MVC، آموزش کار با دیتابیس، آشنایی با Query Builder و سایر موارد است.
- برای مشاهده فیلم آموزش فریمورک PHP کدایگنایتر (CodeIgniter) + اینجا کلیک کنید.
در انتهای مقاله «Smarty چیست» به یک جمعبندی اجمالی پرداخته شده است.
جمعبندی
در این مقاله ابتدا به این سوال پاسخ داده شد که Smarty چیست و در ادامه نیز به سایر مباحث مهم پیرامون موتور طراحی قالب اسمارتی پرداخته شده است. علت اصلی استفاده از موتورهای طراحی قالب این است که این موتورها مخصوص طراحی قالب هستند و برای این کار بهینهسازی شدهاند؛ بنابراین، دردسرها و مشکلات زبانهای برنامه نویسی مثل PHP را برای قالب سازی ندارند. امروزه با پدید آمودن فریمورکهای همهجانبه توسعه وب، نقش موتورهای قالب کم رنگتر شده است اما همچنان از آنها استفاده میشود. امید است این مقاله مفید واقع شده باشد.