اسمارتی

از ویکی‌پدیا، دانشنامهٔ آزاد
پرش به: ناوبری، جستجو
اسمارتی
Smarty-logo.png
توسعه‌دهنده(ها) مونته اورت، مسجو مُر
انتشار پایدار ۳٫۱٫۱۳ / ۱۵ ژانویه ۲۰۱۳؛ ۵۶۱ روز پیش
نوشته شده به پی‌اچ‌پی
سیستم‌عامل چندسکویی
گونه موتور مدیریت الگوی وب
پروانه گنو ال‌جی‌پی‌ال
وب‌گاه http://www.smarty.net

اسمارتی ( به انگلیسی : smarty ) یک موتور الگوی وب[یادداشت ۱] برای پی‌اچ‌پی است که امکان جداسازی کدهای نمایشی (اچ‌تی‌ام‌ال، سی‌اس‌اس و...) را از منطق برنامه‌های تحت وب می‌دهد به طوری که منطق کاری[یادداشت ۲] به صورت جداگانه‌ای از کدهای نمایشی عملیات را انجام می‌دهند و به این ترتیب طراحان وب و برنامه‌نویسان به صورت جداگانه یک ساختار وب را طرح ریزی می‌کنند.[۱]

ویژگی‌ها[ویرایش]

اسمارتی چه چیزی نیست[ویرایش]

اسمارتی یک چارچوب نرم‌افزاری تحت وب نیست، اسمارتی همچنین شباهتی به ام‌وی‌سی ندارد و سازوکاری متفاوت از چارچوب‌های نرم‌افزاری مانند چارچوب زند، کیک‌پی‌اچ‌پی، جوملا و سایر چارچوب‌هایی که برای پی‌اچ‌پی به کار می‌روند دارد.[۱]

ایجاد فایل کامپایل[ویرایش]

اسمارتی پس از تجزیه کردن[یادداشت ۳] هر الگو[یادداشت ۴] یک کد پی‌اچ‌پی از فایل تولید می‌کند (به جای پرونده دودویی) و سپس زمانی که صفحه نمایش داده می‌شود، اسمارتی این فایل را به جای فایل الگو فراخوانی می‌کند و بدین ترتیب از تجزیه کردن دوبارۀ فایل الگو جلوگیری می‌شود، اسمارتی در مورد اینکه چه زمانی عمل کامپایل را انجام دهد هوشمند عمل می‌کند و زمانی که فایل الگو توسط برنامه‌نویس تغییر کند، اسمارتی یک فایل جدید تولید می‌کند و دیگر نیازی به تغییر دستی فایل کامپایل شده نیست.[۲]

جداسازی منطق کاری از الگو[ویرایش]

هدف اسمارتی جداسازی ساختار منطقی از ساختار نمایشی است و نه جداسازی ساختار نمایشی از پی‌اچ‌پی و این یکی از امتیازهای اسمارتی است چرا که در هدف نهایی یک موتور مدیریت الگو، نباید تمام منطق کاری را از اچ‌تی‌ام‌ال حذف کرد بلکه باید این دو ساختار را به صورتی از هم جدا کرد. برای مثال منطقی را در نظر داشته باشید که در آن باید چندین کاربر از پایگاه داده فراخوانی شوند و حال منطق نمایشی[یادداشت ۵] را در نظر بگیرید که باید کاربران را در سه ستون نمایش دهد در این حالت راه حل نامناسب این است که کاربرانی که از پایگاه داده فراخوانی کرده‌ایم را در یک تابع که سه آرایه بازمی‌گرداند فراخوانی کنیم، چرا که از لحاظ منطقی این کاری نیست که باید با داده‌ها انجام شود و بدون داشتن راه حلی منطقی در فایل الگو، مجبور به کاری می‌شوید که نباید انجام دهید.[۳]

ارث بری از الگو[ویرایش]

ارث بری از الگو رویکردی است برای مدیریت کردن الگوهای اسمارتی که شبیه به تکنیک برنامه‌نویسی شیءگرا عمل می‌کند، در این روش به جای فراخوانی کردن بخش‌های مختلف یک صفحه با استفاده از چندین {include...} می‌توان تنها محتوایاتی از آن صفحه را فراخوانی کرد شبیه به عملی که در شیءگرایی برای به ارث بردن کلاس‌ها انجام می‌شود، این کار در جایی که الگوها با هم صفات و عملیات مشترکی دارند و تنها در بخش‌های کوچکی با هم متفاوت هستند باعث می‌شود که الگوها کوچک و در عین حال کارا شوند، این روش اشاره‌ای به تجمیع در نمودار Use-Case در مهندسی نرم‌افزار دارد.[۴]

پیش از ارث بری از الگو در اسمارتی، برنامه نویسان مجبور بودند که بخش‌های مختلف یک صفحه را همانند زیر از هم جدا کنند، در این حالت یک صفحه ممکن بود دارای چندین فایل الگو شود و مدیریت فایل‌ها در پروژه‌های عظیم مشکل می‌شد.

فایل الگو بدون ارث بری در حالت کلاسیک[ویرایش]

header.tpl
<html>
<head>
<title>{$title|default:"Default Page Title"}</title>
</head>
<body>
footer.tpl
</body>
</html>
mypage.tpl
{include file="header.tpl" title="My Page Title"}
My HTML Page Body goes here
{include file="footer.tpl"}
output of mypage.tpl
<html>
<head>
<title>My Page Title</title>
</head>
<body>
My HTML Page Body goes here
</body>
</html>

که در این حالت فایل بالا صفحه به همراه خصوصیات به این صورت تعریف شده :

{include file="header.tpl" title="My Page Title"}

و همچنین برای فایل پایین صفحه :

{include file="footer.tpl"}

حال همین صفحه با رویکرد ارث بری از الگو به صورتی متفاوت و کاراتر به این صورت تغییر می‌کند :

فایل الگو با ارث بری[ویرایش]

layout.tpl
<html>
<head>
<title>{block name=title}Default Page Title{/block}</title>
</head>
<body>
{block name=body}{/block}
</body>
</html>
mypage.tpl
{extends file="layout.tpl"}
{block name=title}My Page Title{/block}
{block name=body}My HTML Page Body goes here{/block}
output of mypage.tpl
<html>
<head>
<title>My Page Title</title>
</head>
<body>
My HTML Page Body goes here
</body>
</html>

در این حالت با حذف صفحات و اضافه کردن بلاک‌ها ({block}) قابلیت به ارث بردن از فایل الگو فراهم می‌شود.

کش کردن[ویرایش]

کش کردن پی‌اچ‌پی در اسمارتی روشی است که باعث می‌شود با ذخیره کردن یک فایل ایستا از صفحه پی‌اچ‌پی، کارایی را بهبود بخشید، این کار به سرور اجازه می‌دهد که چندین درخواست به صفحه را تنها با یک بار اجرا کردن یک کد پی‌اچ‌پی موثر پاسخ گو باشد. کش کردن را می‌توان بروی هر نوع محتوایی که از طرف سرور برای مرورگر فراهم می‌شود اعمال کرد، کش کردن در اسمارتی اشاره به کش کردن توکار[یادداشت ۶] دارد.[۵]

require('Smarty.class.php'); 
$page = new Smarty(); 
$page->caching = 2; 
$page->cache_lifetime = 1800; // 30 minutes 
$page->display('template.tpl');

در این مثال فایل قالب بندی برای مدت سی دقیقه به صورت ایستا تنها محتویات پردازش شده را نمایش می‌دهد که باعث بهبود استفاده از منابع سرور و در نتیجه سروری با منابع کمتر و کارایی بهینه‌تر را می‌توان پیاده سازی کرد.

شروع کار[ویرایش]

پرونده‌ها[ویرایش]

به صورت پیش‌فرض هر پروژه اسمارتی از تعدادی پوشه و فایل تشکیل شده است که ساختار یک صفحه که با اسمارتی پیاده سازی می‌شود را نمایان می‌سازد.

Gnome-folder.svg

cache محل پرونده‌های کش شده
Gnome-folder.svg configs محل پرونده‌های پیکربندی
Gnome-folder.svg plugins محل پرونده‌های پلاگین.
Gnome-folder.svg templates محل پرونده‌های الگو، پرونده‌هایی که بخش‌های مختلف یک صفحه هستند.
Gnome-folder.svg templates_c محل پرونده الگوهای کامپایل شده.
Oxygen480-mimetypes-hidef-application-x-php.svg index.php پروندۀ پی‌اچ‌پی که شامل تنظیمات اسمارتی و کدهای پی‌اچ‌پی است.

مثال[ویرایش]

این یک مثال ساده از نوع تعریف یک پروندۀ ساده با نام index.php است که تنها نام یک فرد را در فایل index.tpl در پوشۀ template مانند مثال بالا اجرا می‌کند، در این حالت اشکال‌یاب برای برنامه‌نویس فعال شده، عملیات کش کردن هر ۱۲۰ ثانیه بر روی پرونده انجام می‌شود و نهایتاً پرونده در پوشه cache ذخیره می‌شود و همچنین یک متغیر به فایل الگو برای نمایش ارسال می‌شود و در آخر کار پرونده را با تنظیماتی که انجام شده نمایش می‌دهد.

index.php :

<?php
require('../libs/Smarty.class.php');
$smarty = new Smarty;
$smarty->debugging = true;
$smarty->caching = true;
$smarty->cache_lifetime = 120;
$smarty->assign("Name","mehdi",true);
$smarty->display('index.tpl');
?>

و حال پروندۀ index.tpl می‌تواند نام فرد را به این صورت نمایش دهد.

index.tpl

<html>
<head>
<title>this is final output of index.php</title>
</head>
<body>
<p>
my name is {$Name}
</p>
</body>
</html>

محیط‌های یکپارچه توسعه نرم‌افزار[ویرایش]

نام محیط توسعه نوع ابزار نام ابزار آدرس
نت‌بینز پلاگین PHP Smarty Framework [۱]
اکلیپس پلاگین PHPEclipse [۲]

یادداشت‌ها[ویرایش]

  1. web template system
  2. business logic
  3. parsing
  4. pattern
  5. presentation logic
  6. Built-in Caching

مطالعه بیشتر[ویرایش]

پانویس[ویرایش]

  1. ۱٫۰ ۱٫۱ «about smarty»(انگلیسی). بازبینی‌شده در ۲۸ مارس ۲۰۱۳. 
  2. «All About Smarty – The PHP Template Engine»(انگلیسی). بازبینی‌شده در ۲۸ مارس ۲۰۱۳. 
  3. «Template Engines»(انگلیسی). بازبینی‌شده در ۲۸ مارس ۲۰۱۳. 
  4. «Template Inheritance»(انگلیسی). بازبینی‌شده در ۲۸ مارس ۲۰۱۳. 
  5. «PHP Smarty Caching»(انگلیسی). بازبینی‌شده در ۲۸ مارس ۲۰۱۳.