بعد التفكير قليلاً .. وجدت أنه لا فائدة من برمجة شيء موجود سابقاً ..
ورأيت أنني لو بذلت مجهودي في شيء موجود سابقاً لكان أفضل ..
طبعاً لن أقوم بوضع ملف القالب حتى أنتهي من برمجته تماماً ( بعد تنفيذ قائمة "خواص القالب التي سيتم اضافتها مستقبلاً" ) ..
أسحب كلامي
ملف القالب :
كود PHP:
<?php
// this is a very simple template engine
class template
{
// vars
// templates folder
var $folder = ".";
// template file name
var $template;
// the vars in the template
var $vars;
// functions
// function to load the template file
function load($file)
{
// if the templates folder is not exist
if (!is_dir($this->folder))
{
die("<strong>error:</strong> the templates folder is not exist..");
}
// if the template file is not exist
if (!file_exists("$this->folder/$file"))
{
die("<strong>error:</strong> the template file <em>$this->folder/$file</em> is not exist..");
}
// get the file contents
$this->template = file_get_contents("$this->folder/$file");
}
//function to assign the vars
function assign($var, $value)
{
// if the var is not empty
if ($var != "")
{
$this->vars[$var] = $value;
}
}
// function to parse the template functions
function parse()
{
// include function
$this->template = preg_replace_callback('/{include file="(.*)"}/siU', array($this, "include_callback"), $this->template);
}
// callback functions
// include callback
function include_callback($matches)
{
return file_get_contents("$this->folder/$matches[1]");
}
// function to replace the vars with there values
function replace()
{
foreach ($this->vars as $key => $value)
{
$this->template = str_replace('{'.$key.'}', $value, $this->template);
}
}
// function to remove comments
function remove_comments()
{
$this->template = preg_replace("/{\*(.*)\*}/sU", "", $this->template);
}
// function to display the template
function display($template,$print = 1)
{
// load the file
$this->load($template);
// remove the comments
$this->remove_comments();
// parse the template functions
$this->parse();
// replace the vars with there values
if (count($this->vars) !== 0)
{
$this->replace();
}
if ($print == 0)
{
// return template
return $this->template;
}
else
{
// print the template
echo $this->template;
// unset the template
unset($this->template);
}
}
}
?>
طريقة الإستخدام بسيطة جداً :
ملف القالب :
كود PHP:
{* the name *}
<p>My name is <b>{name}</b></p>
{* the web site *}
<p>My web site is <b><a href="{web.site}">{website}</a></b></p>
{* the email *}
<p>My email is <b><a href="mailto:{email}">{email}</a></b></p>
{* include file *}
{include file="test.html"}
كود PHP:
// include the template engine
include("class.template.php");
// create the template object
$template = new template;
// define the templates folder
$template->folder = "templates";
// assign the vars
$template->assign("name", "jordan");
$template->assign("website", "http://jordan.net");
$template->assign("email", "jordan@gmail.com");
// display the template
$template->display("template.html");
القالب ارى فيه مميزات اتمنى لو تتواجد في القالب السهل :
- استخدام الدالة display ، حيث انه يوجد خيار يسمح للمستخدم بتخزين القالب في متغير ، اما الخيار الافتراضي فهو طباعة المتغير ..
كود PHP:
function display($template,$print = 1)
{
if ($print == 0)
{
// return template
return $this->template;
}
else
{
// print the template
echo $this->template;
}
}
الان .. اذا تم الاستخدام بهذه الطريقة
كود PHP:
$template->display("template.html");
فانه سيتم طباعة القالب
اما اذا تم الاستخدام بهذه الطريقة
كود PHP:
$x = $template->display("template.html",0);
فانه سيتم تخزين القالب في المتغير $x
- استخدام الدالة is_dir للتأكد من المجلد بدلا من file_exists
- الاخطاء لا يتم تخزينها بل يتم عرضها مباشرة وايقاف العمل بواسطة الدالة die
- التعليقات
كود PHP:
// function to remove comments
function remove_comments()
{
$this->template = preg_replace("/{\*(.*)\*}/sU", "", $this->template);
}
اخيرا ً ...
- من أراد تطوير القالب أو استخدامه فهو حر في ذلك بدون أي شروط .