Template mit "foreach"

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Template mit "foreach"

    Hallo zusammen,

    ich entwickel derzeit eine eigene Template Engine und habe nun ein Regex-Problem beim ersetzen. Ich beschreibe mal die Situation:

    In einem Template soll ein anderes Template mehrfach eingebunden werden (news.tpl in meinem Beispiel). Daher wollte ich folgenden Ausdruck ersetzen:
    Code:
    {foreach $foobar news.tpl}
    Das schreiben des Templates klappt soweit eigentlich, allerdings nicht das ersetzen von {foreach $foobar news.tpl}.

    Hier mal der Ausschnitt aus meiner Klasse:
    PHP-Code:
    /**
        * Der linke Delimter für eine Funktion
        *
        * @access public
        * @var    string
        */
        
    protected $leftDelimiterF '{';

        
    /**
        * Der rechte Delimter für eine Funktion
        *
        * @access public
        * @var    string
        */
        
    protected $rightDelimiterF '}';

    public function 
    replaceFunctions()
    {
    // foreach Schleife mit 2-Dimensionalen Arrays auflösen
    while(preg_match("/".$this->leftDelimiterF."foreach (.*) (.*)".$this->rightDelimiterF."/isUe",
        
    $this->template$backReference))
    {
        
    $varToReplace substr($backReference[1], 1);
        
    $arrTmp $this->templateVars[$varToReplace];
            
        
    $templateUnparsed file_get_contents($this->templateDir.'/'.$backReference[2]);
                
        for(
    $i 0$i count($arrTmp); $i++)
        {
            
            foreach(
    $arrTmp[$i] as $key => $value)
            {
                
    $templateUnparsed str_replace($this->leftDelimiter.$key.$this->rightDelimiter$value,
        
    $templateUnparsed);
            }
        }
                
        
    $this->template preg_replace("/".$this->leftDelimiterF."foreach \$".$varToReplace." ".
        
    $backReference[2].$this->rightDelimiterF."/isUe"$templateUnparsed$this->template);
    }

    Ich bekomme als Regulären Ausdruck folgendes raus:
    Code:
    /{foreach $foobar news.tpl}/isUe
    Allerdings wird es halt nicht ersetzt. Kann mir da jemand weiterhelfen?


    Gruß Radhad
    Zuletzt geändert von Radhad; 02.08.2007, 10:16.

  • #2
    Re: Template mit "foreach"

    Regeln lesen, Code umbrechen.
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      Ok, wegen 10 Zeichen... Hab ich gemacht, falls es hilft ... ^^

      Kommentar


      • #4
        /{foreach \$foobar news.tpl}/isUe
        "Nicht jeder Mensch kann und soll Programmieren[...]".

        Kommentar


        • #5
          Hab ich auch schon probiert, aber es klappt auch damit nicht. Im Code wird das $-Zeichen ja escaped...

          Kommentar


          • #6
            Test-Skript schreiben.
            Regex solange verkleinern, bis er passt.
            Langsam aufbauend erweitern, dabei gucken wo der Fehler liegt

            und >dann< mit einer konkreten Frage hier wieder herkommen.

            OffTopic:
            Das man jedem user erst debugging beibringen muss...

            Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

            bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
            Wie man Fragen richtig stellt

            Kommentar


            • #7
              Ich denke nicht, dass es was mit meinem debugging zu tun hat, denn bis auf das preg_replace() geht ja alles genau so, wie ich es haben will, nur dass er halt preg_replace nicht ausführt.

              Ich hab es jetzt mit str_replace gemacht, das funktioniert fehlerlos.

              Danke für die Hilfe!


              Gruß Radhad

              Kommentar


              • #8
                Man kann auch einen Regex debuggen!!!

                Teilprobleme bilden, eingrenzen, determinieren des fehlerverursachenden Stückes... ach egal

                Ein netter Guide zum übersichtlichen Schreiben von PHP/MySQL-Code!

                bei Klammersetzung bevorzuge ich jedoch die JavaCoding-Standards
                Wie man Fragen richtig stellt

                Kommentar


                • #9
                  Dasi st ja das, was ich die letzten 2 Tage schon versucht habe, aber da ich persönlich nicht viel Erfahrung mit RegEx habe, hab ich halt an dem Punkt jetzt aufgegeben. Es funktioniert jetzt so wie es soll, das reicht mir imo erstmal.

                  Kommentar

                  Lädt...
                  X