ایجاد: ۱۹:۰۶ ۱۳۹۲/۱۰/۱۷
ویرایش: ۱۱:۱۰ ۱۳۹۲/۱۰/۱۹

آموزش‌ها

»

موتور قالب (template engine) چیست؟

ساختارها و الگوهای مختلفی که برای برنامه‌نویسی پیشنهاد شده است. در بسیاری از این الگوها، مطلوب این است که اسکلت صفحه، مجزای از محتویات آن باشد. یعنی مثلا یک صفحه ساده دارای این اسکلت باشد:
<!DOCTYPE HTML>
<html>
  <head>
    <title>{page_title}</title>
  </head>
  <body>
    <h2>{titr}</h2>
    {text}
  </body>
</html>
و بعد بجای {text} و {titr} و {page_title} مقادیر مختلف جایگزین شود.
به عنوان مثال در الگوی برنامه‌نویسی MVC بخش view ی برنامه یک بخش مجزاست که شامل اسکلت صفحه است و توسط controller مقادیر مربوطه جایگزین می‌شود.

این کار (مجزا شدن بخش View از برنامه) فواید زیادی دارد که در جای خودش بحث شده است. یکی از آنها مجزا شدن کار طراح و تهیه کننده html و css از برنامه‌نویسان است. فایده دیگر امنیت بالاتر است چرا که همه مقادیر قبل از درج در تمپلت می‌تواند escape شود. فایده دیگر ساده شدن عیب‌یابی برنامه است. اما مهم‌ترین فایده این است که یک سری داده مشخص (مثلا آرایه شامل آخرین مطالب سایت) می‌تواند با توجه به نوع template ، لباس‌های مختلفی بپوشد؛ بله همان تم (theme)
خروجی آماده شده، می‌تواند در تمپلت‌های مختلف، رنگ و نماهای مختلفی به یک صفحه وب بدهد یا در یک تمپلت rss یا در یک تمپلت صفحه کوچک موبایلی یا در یک تمپلت خروجی API برای دسترسی بیرونی و ... قرار گیرد.

template ها لزوما در سمت سرور مقداردهی نمی‌شوند بلکه همانطور که در مطلب «ساخت اپلیکیشن‌های کلاینتی با AngularJS گوگل» گفته شد، ممکن است یک template در سمت کاربر توسط مقادیر پر شود.

کار جایگزینی مقادیر در یک template توسط «موتور قالب» یا template engine صورت می‌گیرد.
تمپلت انجین های زیادی وجود دارد که برخی از آنها در اینجا لیست و با یکدیگر مقایسه شده‌اند.

یک موتور قالب چگونه کار می‌کند؟

بستگی به نوع تمپلت انجین و ساختار آن، پاسخ سوال فوق فرق دارد. مثلا فرض کنید که کد ذکر شده در ابتدای این مطلب، در فایلی به نام template.html ذخیره شده است و شما می‌خواهید مقادیری را جایگزین title و titr و text کنید. خب یک راه ساده برای انجام این کار این است که محتویات فایل template.html را بخوانید و سپس این مقادیر را جایگزین کنید. پس یک تمپلت انجین ساده برای تمپلت موجود در فایل template.html می‌تواند اینگونه باشد:
<?php
$data = array(
  'title' => 'عنوان تستی صفحه',
  'titr' => 'عنوان آزمایشی مطلب',
  'text' => 'درویش را نباشد، برگ سرای سلطان<br>ماییم و کهنه دلقی، کآتش در آن توان زد'
);
$template = file_get_contents('template.html');
foreach($data as $key => $val)
    $template = str_replace('{'.$key.'}', $val, $template);
echo $template;
خب کد فوق، یک کد بسیار ساده در این زمینه بود. اما در عمل، ما نیاز به تمپلت انجین هایی هستیم که قابلیت و امکانات بیشتری داشته باشد طوری که فقط متن ساده (نه غنی شده) را به تمپلت بفرستیم و به عبارت دیگر، View ما کاملا مستقل از برنامه اصلی باشد. برای این منظور تمپلت‌انجین‌های مختلفی نوشته شده که در ادامه برخی معرفی می‌شوند.

چه تمپلت انجین هایی به زبان PHP وجود دارد؟

همانطور که در بالا گفته شد، تمپلت‌انجینی برای ما مطلوب است که ما را از نوشتن کد و تگ html در غیر از فایل template بی‌نیاز کند. بدین منظور لازم است چند ویژگی پایه وجود داشته باشد. یکی از آنها پشتیبانی از حلقه است. مثلا اگر من نام شهرهای ایران را در یک آرایه ریختم، این تمپلت انجین بتواند این نام‌ها را به عنوان option های یک تگ select درج کند. یا مثلا امکان پشتیبانی از شرط (if) را داشته باشد و ...
بر این اساس، تمپلت‌انجین‌های مختلفی نوشته شده که تعداد آنها بسیار زیاد است. طبعا برخی ساده‌تر و دارای امکانات کمتری هستند و در نتیجه سبک‌تر هستند و برخی پرامکانات‌تر و سنگین‌تر!
لذا نباید فریب تبلیغ(!) برخی template engine ها را خورد که ادعا می‌کنند مثلا از template engine محبوب twig سبک‌تر و سریع‌تر هستند! چون مثلا بنده می‌توان با قاطعیت ادعا کنم که کد کوچک فوق، سریع‌ترین و سبک‌ترین template engine دنیاست اما وقتی فقط یک قابلیت دارد به چه دردی می‌خورد؟!

هر کسی لازم است با توجه به نیازها و انتظاراتش، یک تمپلت انجین را انتخاب کند. اگر تازه‌کار هستید یا اینکه کار شما سبک است، RainTPL یک نمونه انتخاب خوب است که یادگیری آن فقط 1 دقیقه وقت شما را خواهد گرفت!

اگر شما قابلیت‌های پیشرفته‌تری نیاز داشته باشید، من به شما TWIG را پیشنهاد می‌کنم. این تمپلت انجین عالی و مرتب، در بسیاری از برنامه‌ها استفاده می‌شود و پرطرفدار است. مثلا CMS معروف دروپل (drupal) از TWIG به عنوان template engine خودش استفاده کرده است. با وجود قدرت بالای این تمپلت انجین، یادگیری آن در نیم‌ساعت مسیر است...


یادداشت‌های مرتبط
  1. ساخت اپلیکیشن های کلاینتی با AngularJS گوگل
  2. روش شروع طراحی تم برای وردپرس

مدیریت

نام وسیله

اعتبار ورود

نام کاربری

رمز عبور

رمز یکبارمصرف

... لیست تمام آموزش‌ها

تبلیغات

ربات‌های تلگرامی:
مجموعه ربات‌های تلگرامی ما برای ساده‌تر کردن کار با تلگرام و مدیریت کانال
دامنه‌های فروشی:
دامنه‌های زیر مربوط به ما یا مشتریان ماست که قابل واگذاری هستند. در صورت تمایل به داشتن یکی از آنها، با این اکانت تلگرامی مکاتبه نمایید.

دامنه‌هایی که می‌تواند مصرف تخصصی داشته باشد:
AnyDesk.ir, Firebase.ir, Angularjs.ir, 9px.ir alAdmin.ir, iQore.ir notion.ir, 3dn.ir,

دامنه‌هایی که می‌تواند مصرف فرهنگی/مذهبی داشته باشد:
mavaez.ir, 2aha.ir, babolelm.ir, mahjoor.ir

دامنه‌هایی که می‌تواند مصرف شخصی/عمومی داشته باشد:
azizami.ir, 90blog.ir