الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

فكرة برمجة محرك قوالب بسيط

بدأه حسام الذهبي في 5 يونيو 2013 · 1 رد · 1,594 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

بسم الله الرحمن الرحيم 

 

السلام عليكم ورحمة الله وبركاته

 

اهلا بكم يا أعضاء "موقع فريق العرب للبرمجة"  وارجو ان تكونوا بصحة وعافية ان شاء الله .

 

اخواني الاعزاء احببت ان اتطرق لشرح اساسيات برمجة محرك القوالب template engine وفكرة التعامل معه.

 

اولا : ماهو نظام او محرك القوالب ؟؟؟ 

 

هو نظام اهميته تكمن في فصل اكواد لغة html  عن لغة البرمجة والنفيذ php بشكل مبسط  :) .

 

ثانيا :  ماهو هدفه ؟؟

 

لنفرض انك تريد برمجة سكربت او نظام ادارة محتوة او او او الخ...


بعد ان انتهيت من برمجة هذا السكربت , تريد ان تضعه في المنتديات وتنشره , ثم حمله بعض المستخدمون, بعد ان حمله المستخدمون اعجبهم السكربت ارادوا ان يستكملوا استخدام هذا سكربت , فارادوا تغيييييير شكل السكربت  :o  هنا تكمن المشكلة .

في حالة لم يستخدم المبرمج بيئة نظام القوالب , اذا كان المصمم يريد التعديل عليه فسوف يجد صعوبة وتعقيد لان اكواد الـ html مختلطة باكواد الـ php + قد سبب تعديله الخاطئ للتصميم تخريب لكل البرمجية :wacko: .لان قد يكون المصمم لايعرف مايفعله الكود المراد تعديل التصمم عليه . :lol: . وايضا كثرة التعديل تسبب فقدان الشيئ.

 

فلذلك يجب على المبرمج استخدام محرك نظام القوالب اذا كان يريد تسويقه او نشره open source مفتوح المصدر . لفصل اكواد الـ php والـ html 
حتى توفر للمصمم بيئة ليعمل عليها دون الاختلاط بالاكواد في حال يريد التعديل على التصميم حتى لا  تتعطل البرمجية.

هذه من ناحية المصمم او المحرر .

 

اما من ناحية مبتكر البرمجية او مبرمجها  ففصل الكود عن التصميم سيسبب له راحة نفسية  في البرمجة + قلة الوقوع في الاخطاء البرمجية لان معظم الاخطاء تسببها اكواد ال html  + توفير الوقت في البرمجة.

 

هذا هو هدفه براي واذا كان خطا ارجو الرد عليه .. :lol: فجلى من لايسهو .

ثالثا : امثلة المستخدمين لها .
انا اشهر السكربتات المستخدمة حاليا كالفي بي وسكربت معرض الصور كلها تستخدم نظم القوالب وطبعا تستخدم نظام يسمى سمارتي. وهو اشهر نظام للقوالب . وسنطرق لشرح كيفية استخدامه لاحقا بالتفصيل الممل ان شاء الله .



رابعا : البدء بالبرمجة .

قبل البدء بالبرمجة يجب الالمام باساسيات البرمجة الكائنية OOP.

http://php.net/manual/en/language.oop5.php

لاننا سنعتمد على البرمجة الكائنية ففي برمجة النظام .
 

طبعا النظام الذي سنبرمجه بسييييط جدا ولكن على الاقل نشرح فكرته . وهو سيؤهولك لتبرمج نظام قوالب متكامل . في حال كنت تريد . 

 

 

الان لنبدا :

خطة العمل :
 

1 - نفتح كلاس باسم template.

   2 - نقوم بعمل متغير للمجلد القالب ومتغير للملف

   3 - نقوم بعمل method تقوم بفتح ملف القالب .

   4 - نقوم بعمل method تقوم بعملية استبدال متغيرات التي تتعامل مع وثيقة html بـ القيم المراد وضعها .

   5 - نقوم بعمل method تقوم بعرض الـ قالب display

 

الان لننفذ هذه الخطة بصيغة كود : 

 

<?php

 class template{
      public $folder; // مجلد القالب
      public $file;   // ملف القالب
      public function __construct($folder){
          $this->folder = $folder;
      }
      public function inc_temp($filename){ // نفتح القالب عن طريق هذه الدالة
            $filename = ("".$this->folder."/"."".$filename."");
            // نقوم عمل شرط اذا كان القالب موجود قوم بفتحه
            if (file_exists($filename)) {
                $file = file_get_contents($filename);
                $this->file = $file;
                 return ($this->file);
            }  else {
                exit("عفوا ولكن القالب ".$filename." غير موجود");
                return (false);
            }
      }

      public function assign($var1,$var2) { // نستبدل المتغيرات بالوثيقة بـ قيم الذي نردي وضعها
              // نلاحظ انا وضعنا {} للمتغير المستبدل حتى لانتضر ان نضعها عند استخدام الدالة
              $this->file = str_ireplace("{".$var1."}","".$var2."",$this->file);
              return($this->file);
      }

      public function display(){
           // تقوم بعرض وثيقة html داخل اكواد php
            eval("?>".$this->file."<?");
      }

 }


?>

طريقة الاستخدام : 

 

 

<?php


require_once ("class.template.php");

$TPL = new template("template");

$TPL->inc_temp("index.html");
$TPL->assign("title","hussam alzahabi");
$TPL->assign("hellomsg","hello world");
$TPL->display();

?>

والحمد لله انتهينا من الدرس  :D 

وطبعا اكيد هناك من الاشخاص لاحظوا انني لم استخدم الكاش والـ regex في هذا النظام 

نعم لانني فقط اشرح الاساسيات 
 

اما لو استخدمتهم فسوف اعقد الامور على المبتدئ . ولن يصبح الدرس بسيط.

فلذك فقط وضعت الاساسيات التي تؤهل المبرمج لتطويره 
 

ارجو لمن ينقل الموضوع ان يضع المصدر

 

المصدر : حسام الذهبي , منتدى فريق العربي للبرمجة
 

اي مشاكل فسوف نستقبل تعليقاتكم.

 

شكرا لكم .

تم تعديل هذه المشاركة بواسطة حسام الذهبي في 5 يونيو 2013 في 15:13

#2

شرح عملي اعمق للاستخدام :

 

مثال اردنا عمل مجلد للقوالب باسم temp .

 

ثم نقوم بعمل ملف مثلا index.html.

 

 

مثلا هذا كود ملف index.html

 

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml">

<head>
  <title>{title}</title>
</head>

<body>

{hellomsg}

</body>

</html>

 

الان نريد ان ننشئ خارج مجلد temp ملف باسم index.php

 

نقوم بكتابة الكود داخل الـ index.php

 

<?php


require_once ("class.template.php");

$TPL = new template("temp");

$TPL->inc_temp("index.html");
$TPL->assign("title","الفريق العربي للبرمجة");
$TPL->assign("hellomsg","اهلا بكم , مع تحيات حسام الذهبي");
$TPL->display();

?>

طبعا نربط الملف بملف المحرك حتى تعمل اكواد المحرك او اومر المحرك

 

نكتب اسم المجلد الذي انشاناه .

 

الان سيتبدل {title} بـ الفريق العربي للبرمجة 

 

و {hellomsg} بـ اهلا بكم , مع تحيات حسام الذهبي 

 

وهذه ملفات القالب اذا اردتم للتجربة :
test_temp.zip

تم تعديل هذه المشاركة بواسطة حسام الذهبي في 5 يونيو 2013 في 17:58

مواضيع مشابهة