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

الموضوع: مشكل extract بداخل كلاس واستدعاء من خلال دالة

  1. #1
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    44

    مشكل extract بداخل كلاس واستدعاء من خلال دالة



    مرحبا اخواني
    كيفكم ؟ ان شاء الله بالف خير
    المهم اخواني عندي كلاس محرك قوالب يعتمد على جلب القالب من قاعدة البيانات شغال تمام
    الكلاس بعتمد فيه على
    كود PHP:
    extract($GLOBALS); 
    بحيث اقوم بتعديل مايناسبي واقوم بعرض النتيجة عن طريق eval مع ob_start
    مثل ما دكرت اعلاه كل شيء تمام
    كمثال
    كود PHP:
    $template = new Template();
    $string "TEST";
    $template->display("header"); 
    هنا شغال , انما لما استعدي القالب من خلال دالة اقوم بعرضها وهده الاخيرة تحتوي على متغييرات
    لايتم تعريف المتغييرات التي انشأت بداخل الدالة بحيث يتم تجاهلها و يتم تعريف باقي المتغييرات خارج الدالة

    كود PHP:
    $template = new Template();
    $string "Test one two :)";
    function 
    hello(){
    global 
    $template;
    $hello "say hello !!";
    $template->display("header");
    }
    hello(); 
    القالب header يحتوي على كل من المتغيير $string و $hello
    انما في النتيجة يظهر لي فقط قيمة المتغيير $string اللي هي Test one two

    فيا ترى اين يكمن المشكل







  2. #2
    عضو شرف
    تاريخ التسجيل
    May 2007
    المشاركات
    1,647


    عزيزي لم أفهم آلية العمل تماماً، لكن حاول أن تعرّف المتغير hello$ في global أيضاً ..





    __________________
    # اتبعني على Twitter
    # عِرفان ساهم ببناء المحتوى العربي العلمي على الإنترنت!

  3. #3
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    44


    تفضل استاد اشرف , هده الكلاس كامل
    كود PHP:
    <?
    class Template{
    var 
    $variable "";
     function 
    display($code){
                       
    $code $this->Get_Tmp($code);
                       echo 
    $code;
                      }
     function 
    xml_exists($xml){
                          
    $xml "styles/style_".$xml.".xml";
                          if(
    file_exists($xml )){
                           return 
    true;
                           }else{
                           return 
    false;
                           }
                      }
     function 
    wrong_path($xml){
                          
    $xml $xml.".xml";
                          
    $path "styles/style_".$xml;
                         echo 
    '<b>Warning : </b> Template File '.$xml.' Not Exists in Path '.$path.'';
                         exit();
                      }
     function 
    wrong_tmp($file,$style){
                         echo 
    '<b>Warning : </b> Template Row '.$file.' Not Exists in Style '.$style.' , Wrong Query';
                         exit();
                      }
     function 
    Get_Tmp($file){
                      global 
    $choose_style,$dbhost,$dbuser,$dbpass,$dbname;
                     
    // Check File XML
                     
    if(!$this->xml_exists($choose_style)){
                     
    $this->wrong_path($choose_style);
                      }

                    
    $Sql mysql_query("select *  from ".prefix."TEMPLATES where NAME ='$file' AND STYLE_NAME = '$choose_style' ") or die(mysql_error());
                    
    $Num mysql_num_rows($Sql);
                     if (
    $Num == 0) {
                     
    $this->wrong_tmp($file,$choose_style);
                     }
                     if (
    $Num != 0) {
                     
    $row=mysql_fetch_array($Sql);
                     
    $tpl_source $row['SOURCE'];
                     }
     
                      
    $DesignCode $this->Code_Html($tpl_source);
     return 
    $DesignCode;
     }
     
     function 
    Code_Html($html){
     
    extract($GLOBALS);
    $DF stripslashes($html);
                                                        
    $DF preg_replace('#{\$(.*)\[(.*)]\[(.*)]}#i','<php> echo $this->variable[\'$1\'][\'$2\'][\'$3\'];</php>',$DF); 
      
    $DF eregi_replace("{{","<php> echo "$DF);
      
    $DF eregi_replace("}}","; </php>"$DF);

    // if condition
       
    $DF $this->if_condition($DF);
       
    $DF =eregi_replace("\<else>","</code>\";} else {echo \"<code>",$DF);
     
    // loop
       
    $DF $this->html_loop($DF);

    // while and mysql_fetch
                                                          
    $DF $this->sql_com($DF);
    // Replace php by code for use in the realy php
      
    $DF eregi_replace("\<php>","</code>\";"$DF);
      
    $DF eregi_replace("\</php>","echo \"<code>"$DF);
    // Config Simple
                       
    $DF "echo \"<code>".$DF."</code>\";"
    // Replace " with \" until I can echo html code with no prblem
      
    $DF =  $this->Html_Quot($DF);
    // Delete code from template 
                       
    $DF str_replace("<code>","",$DF);
      
    $DF str_replace("</code>","",$DF);
                                        
    $DF.= "\nreturn true;";
    // ShowTime !!!!
                                                                            
    ob_start();
        
    $DF = eval($DF);
        
    $DF ob_get_contents();
        
    ob_end_clean();
     
     return 
    $DF;
     }

     
     function 
    if_condition($Html){
                       
    $Html preg_replace('/\<if condition\=\"(.*)\">/','</code>"; if($1){ echo "<code>',$Html); 
                       
    $Html preg_replace('/\<\/if\>/','</code>";} echo "<code>',$Html);
                       return 
    $Html;
     }
                      function 
    sql_com($Html){
    $Html preg_replace('#<sql name="(.*)" fetch="(.*)">#','</code>";$i=1; while($2=@mysql_fetch_array($1)){ echo "<code>',$Html); 
    $Html preg_replace('/\<\/sql\>/','</code>"; $i++;} echo "<code>',$Html);
    return 
    $Html;
                      }
                      function 
    html_loop($Html){
    $Html preg_replace('#<loop value="(.*)" star="(.*)" end="(.*)">(.*)</loop>#si','<php>for($1 = $2;$i < $3;$1++){</php>$4<php>}</php>',$Html); 
                       return 
    $Html;
                      }
    // Add Multipe Array like $lang
                   
    function assign_array($string,$value){
                    
    $this->variable[$string] = $value;
                    return 
    true;
                   }
      function 
    Html_Quot($String){
          
    $Tablo=split("<code>",$String);
          
    $String="";
          
    $String.=$Tablo[0];
          foreach(
    $Tablo as $Cle=>$Valeur){
              if(
    eregi("</code>",$Valeur)) {
                  
    $TabloOne=split("</code>",$Valeur);
                  
    $TabloOne[0]=eregi_replace('\"','\"',$TabloOne[0]);
                  foreach(
    $TabloOne as $CleOne=>$ValeurOne){
                      if(
    $CleOne==0)
                      
    $ValeurOne="<code>".$ValeurOne."</code>";
                      
    $String.=$ValeurOne;
                  }
              }     
          }
          return 
    $String;
      } 
     
    }
    ?>







  4. #4
    عضو نشيط جدا
    تاريخ التسجيل
    Sep 2006
    المشاركات
    589


    جرب


    كود PHP:
    function hello(){
    global 
    $template;
    $hello "say hello !!";
    return 
    $template->display("header");







    __________________
    ومن اعجب الاشياء انك لاتدري وانك لاتدري بانك لاتدري
    فإن كنت لاتدري ولم تكُ بالذي يسال من يدري فكيف اذن تدري
    تمام العمى طول السكوت وانما شفاء العمى يوماً سؤالك من يدري

  5. #5
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    44


    s6ur
    تسلم اخوي بس مااشتغل






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


    جرب
    كود PHP:

    function hello(){
    global 
    $template;
    $GLOBALS['hello'] = "say hello !!";
    return 
    $template->display("header");







    __________________
    Google
    Firefox

  7. #7
    عضو نشيط
    تاريخ التسجيل
    Jan 2008
    المشاركات
    44


    سملت يمناك اخي Foxhound
    بالفعل اشتغل , بس احب اترك هدا الحل كحل اخير
    لانه انا لما استعملت
    كود PHP:
    extract($GLOBALS); 
    استعملته بغاية تنفيد الكود مباشرة والاهم عدم عمل assign , اي تعريف المتغيير
    فلو فيه اي حل اخر بدون اللجوء الى تعريف المتتغييرات يكون افضل لانه يشتغل بشكل جيد فقط لما انفد القالب من داخل دالة يحدث المشكل , انما في حالة كان الجواب لا فما في اي مشكل
    واشكرك من جديد .










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

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

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