النتائج 1 إلى 15 من 15

الموضوع: برمجة محرك قوالب

  1. #1
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613

    برمجة محرك قوالب



    بدأت في برمجة محرك قوالب ..

    حتى الآن الخواص التي قمت بتنفيذها هي :
    • دالة استيراد include
    • خاصية التعليقات
    • امكانية حفظ القالب في متغير
    • عرض اخطاء القالب
    • التأكد من ان المتغير ليس فارغاً
    • تبديل المتغيرات بقيمها في الملفات المستوردة
    الآن أريد إضافة خاصية "دالة تنفيذ كود php" ..
    بمعنى : في ملف القالب
    كود HTML:
    <p>this is the top..</p>
    <p>{php}echo md5("php");{/php}</p>
    <p>this is the bottom..</p>
    يتم استبدال ما بين الوسمين
    كود:
    {php}{/php}
    بنتيجة كود php الموجود وفي حالتنا هو
    كود PHP:
    echo md5("php"); 
    أول ما خطر على بالي هو الدالة eval بالطبع ..

    كود PHP:
    $template '<p>this is the top..</p>
    <p>{php}echo md5("php");{/php}</p>
    <p>this is the bottom..</p>'
    ;

    $template preg_replace_callback("/{php}(.*){\/php}/s","php_code_callback",$template);

    function 
    php_code_callback($matches)
    {
        return eval(
    $matches[1]);
    }

    echo 
    $template
    في هذا الكود يتم استبدال مابين الوسمين
    كود:
    {php}{/php}
    بنتيجة كود php الموجود ..
    لكنه لا يعرضه بشكل صحيح ..
    حيث يقوم بوضع ناتج كود php في اعلى الصفحة الناتجة ..
    كود HTML:
    e1bfd762321e409cee4ac0b6e841963c<p>this is the top..</p>
    <p></p>
    <p>this is the bottom..</p>
    فهل من حل لهذه المشكلة ؟

    * خواص القالب التي سيتم اضافتها مستقبلاً :
    • نظام cache
    • امكانية عدم وجود مجلد كاش ويتم تخزين الملفات في مجلد temp
    • التعرف التلقائي على المتغيرات
    • دالة تكرار loop
    • دالة شرط if/elseif/else
    • دالة تبديل switch
    • علامات المقارنة تكون نص بدلا عن رمز eq , neq , gt , lt
    بشكل عام القالب يشبه القالب السهل في طريقة عمله ..
    طبعاً لن أقوم بوضع ملف القالب حتى أنتهي من برمجته تماماً ( بعد تنفيذ قائمة "خواص القالب التي سيتم اضافتها مستقبلاً" ) ..





    التعديل الأخير تم بواسطة dev11 ; 28-10-2007 الساعة 07:09 PM


  2. #2
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    ألا يوجد حل ؟






  3. #3
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    اعتقد انني لم اوضح السؤال جيداً ؟
    أريد إضافة خاصية "دالة تنفيذ كود php" ..
    بمعنى : في ملف القالب
    كود HTML:
    <p>this is the top..</p>
    <p>{php}echo md5("php");{/php}</p>
    <p>this is the bottom..</p>
    يتم استبدال ما بين الوسمين
    كود:
    {php}{/php}
    بنتيجة كود php الموجود وفي حالتنا هو
    كود PHP:
    echo md5("php"); 
    أول ما خطر على بالي هو الدالة eval بالطبع ..

    كود PHP:
    $template '<p>this is the top..</p>
    <p>{php}echo md5("php");{/php}</p>
    <p>this is the bottom..</p>'
    ;

    $template preg_replace_callback("/{php}(.*){\/php}/s","php_code_callback",$template);

    function 
    php_code_callback($matches)
    {
        return eval(
    $matches[1]);
    }

    echo 
    $template
    في هذا الكود يتم استبدال مابين الوسمين
    كود:
    {php}{/php}
    بنتيجة كود php الموجود ..
    لكنه لا يعرضه بشكل صحيح ..
    حيث يقوم بوضع ناتج كود php في اعلى الصفحة الناتجة ..
    كود HTML:
    e1bfd762321e409cee4ac0b6e841963c<p>this is the top..</p>
    <p></p>
    <p>this is the bottom..</p>
    فهل من حل لهذه المشكلة ؟







  4. #4
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379


    استخدم دوال التحكم في التدفق , output control وهي باختصار تجمع اي مخرجات وتطبعها انت بعد تنفيذ الكود كامل .
    - تضع ob_start(); في اول الكود , قبل طباعة اي نتيجه
    - تضع ob_end_flush في اخر الكود , وهي بدورها ستطبع النتيجه.

    راجع PHP: Output Control Functions - Manual





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

  5. #5
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    لا تزال المشكلة قائمة بعد وضع الدالتين :
    كود PHP:
    ob_start();
    ob_end_flush(); 
    في أول وآخر الكود..






  6. #6
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    مرةً أخرى .. ألا يوجد حل ؟






  7. #7
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379


    الحل كما ذكرت لك , لكن اعتقد ان الطريقه كالتالي , ترجمة المحتوى من HTML الى PHP بعد ذلك تنفيذ كود PHP الناتج .
    انت قمت بترجمه وتنفيذ في نفس الوقت , المفترض كما ذكرت لك





    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

  8. #8
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    أخي الكريم daif هل من مثال للتوضيح ؟






  9. #9
    عضو شرف
    تاريخ التسجيل
    Apr 2002
    المشاركات
    1,379
    __________________
    ضيف الله العتيبي مبرمج حر و مهندس معتمد من زيند (ZCE)
    الاتصال: daif@daif.net او جوال: 0556639884
    الخدمات: تقديم استشارات برمجيه, تطوير بوابات/خدمات إلكترونيه للقطاع العام او الخاص .

  10. #10
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    أخي الكريم daif هل من مثال على الدالة التي قمت بوضعها ..
    كود PHP:
    function php_code_callback($matches)
    {
        return eval(
    $matches[1]);

    بالنسبة للمثال بناء محرك قوالب خاص فهو يهتم ببناء محرك قوالب بشكل عام ،، لكن ماريده هو تنفيذ اكواد php بين الوسمين {php}{/php}






  11. #11
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    بعد التفكير قليلاً .. وجدت أنه لا فائدة من برمجة شيء موجود سابقاً ..
    ورأيت أنني لو بذلت مجهودي في شيء موجود سابقاً لكان أفضل ..

    طبعاً لن أقوم بوضع ملف القالب حتى أنتهي من برمجته تماماً ( بعد تنفيذ قائمة "خواص القالب التي سيتم اضافتها مستقبلاً" ) ..
    أسحب كلامي

    ملف القالب :
    كود 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);
        } 
    اخيرا ً ...
    - من أراد تطوير القالب أو استخدامه فهو حر في ذلك بدون أي شروط .





    الملفات المرفقة الملفات المرفقة

  12. #12
    عضو نشيط
    تاريخ التسجيل
    Aug 2004
    المشاركات
    240


    جزاك الله خير بس هل من الممكن تشرح لي هالسطر

    function display($template,$print = 1)

    ما معنى $print = 1 داخل الفنكشن لان الطريقة اعجبتني و لكن ما فهمتها





    __________________
    لا اله إلا الله محمدً رسول الله

  13. #13
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    تعني أن القيمة الإفتراضية للمتغير $print هي 1






  14. #14
    عضو نشيط
    تاريخ التسجيل
    Aug 2004
    المشاركات
    240


    تعني أن القيمة الإفتراضية للمتغير $print هي 1
    هل يعني هذا انه إذا تم تعيين قيمة للمتغير $print ستعود قيمتها الى 1 ولا راح تكون كما تم تعيينها





    __________________
    لا اله إلا الله محمدً رسول الله

  15. #15
    عضو سوبر نشيط
    تاريخ التسجيل
    May 2007
    المشاركات
    613


    هل يعني هذا انه إذا تم تعيين قيمة للمتغير $print ستعود قيمتها الى 1 ولا راح تكون كما تم تعيينها
    ستكون كما تم تعيينها ، وستكون 1 اذا تم لم يتم تعيينها










ضوابط المشاركة

  • لا تستطيع إضافة مواضيع جديدة
  • لا تستطيع الرد على المواضيع
  • لا تستطيع إرفاق ملفات
  • لا تستطيع تعديل مشاركاتك
  •  

أضف موقعك هنا| اخبار السيارات | حراج | شقق للايجار في الكويت | بيوت للبيع في الكويت | دليل الكويت العقاري | مقروء | شركة كشف تسربات المياه | شركة عزل اسطح بالرياض | عزل فوم بالرياض| عزل اسطح بالرياض | كشف تسربات المياة بالرياض | شركة عزل اسطح بالرياض