Frage zu Problem mit Templateklasse

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

  • #16
    So, letztes WE war leider nicht machbar, dieses aber um so früher.

    Ich hab mir eben noch mal den Code genau angesehen, aber widerrum nix gefunden.
    Mir fehlt wirklich jeglicher Ansatz, woran das liegen kann.

    Hast du irgendwas ausfindig machen können?
    mfg - sagg

    Kommentar


    • #17
      Omg, das ganze liegt an dem Pattern, was ich jetzt allerdings nicht wirklich verstehe.

      Ändert man
      PHP-Code:
      $pattern '%'.$tag_str.'foreach from=\$(S+) to=(w+)'.$tag_end.'
      (((?R)|(.*))*)'
      .$tag_str.'/foreach'.$tag_end.'%sU'
      in
      PHP-Code:
      $pattern '%'.$tag_str.'foreach from=\$(S+) to=(w+)'.$tag_end.'
      (.*)'
      .$tag_str.'/foreach'.$tag_end.'%sU'
      funktioniert das Ganze.

      Muss man das verstehen?

      Thx trotzdem.
      Zuletzt geändert von sagg; 20.02.2006, 01:09.
      mfg - sagg

      Kommentar


      • #18
        abend,

        ich muss den thread nochmal ausgraben, da ich gerade wieder vor genau dem selben problem stehe.

        damit ihr nicht nochmal den ganzen thread lesen müsst, nochmal die problem-beschreibung:
        im menü meiner seite habe ich eine verschachtelte foreach-funktion, diese arbeitet einwandfrei.
        im forum habe ich ebenfalls eine verschachtelt foreach-funktion, diese funktioniert überhaupt nicht, sondern gibt lediglich eine weisse seite aus, nicht mal das menü oder der header sind da, einfach nur weiss.

        der einzige unterschied zwischen diesen beiden templates ist die menge an html-code in den schleifen.
        im menü is das fast nix, im forum dagegen sind das insgesamt ca. 15 zeilen.
        lösche ich z.b. 10 zeilen, wird alles so angezeigt wie es sein soll, egal ob sich dabei die menge der zu parsenden variable erhöht oder veringert, hauptsache der inhalt ist nicht zu groß.

        hier nochmal der relevante code der template-engine:
        PHP-Code:
        function _replace_foreach($a) {
            
        $string '';
            if (
        is_array($this->_vars[$a[1]])) {
                
        $parse str_replace('{$'.$a[2], '{$___'.$a[2], $parse);
                foreach (
        $this->_vars[$a[1]] AS $this->_vars[$a[2]]) {
                    
        $string .= $this->_parse($a[3], $a[2]);
                }
            }
            return 
        $string;
        }

        function 
        _parse($string$do '') {
            if (!empty(
        $do)) {
                
        $pattern '%'.$tag_start.'\$('.$do.')\.(\w+)'.$tag_end.'%';
                
        $string preg_replace_callback($pattern, array(&$this'_replace_array'), $string);
            }
            
            
        $pattern '%'.$tag_start.'foreach from=\$(\S+) item=(\w+)'.$tag_end.'
        (((?R)|(.*))*)'
        .$tag_start.'/foreach'.$tag_end.'%sU';
            
        $string preg_replace_callback($pattern, array(&$this'_replace_foreach'), $string);
            return 
        $string;

        im template sieht der spass dann ungefähr so aus:
        PHP-Code:
        {foreach from=$kats item=kat}
         <
        b>{$kat.title}</b>
          {foreach 
        from=$links_{$row.iditem=link}
           <
        a...>{$link.title}</a>
          {/foreach}
        {/foreach} 
        Hat jemand einen Rat o. ä.?
        mfg - sagg

        Kommentar


        • #19
          Hm..

          *push?*

          Sry, ich komm hier nicht weiter.
          mfg - sagg

          Kommentar


          • #20
            Hi sagg,

            ohne mir jetzt alles durchzulesen
            PHP-Code:
            $pattern '%'.$tag_start.'foreach from=\$(S+) item=(w+)'.$tag_end.'
            (((?R)|(.*))*)'
            .$tag_start.'/foreach'.$tag_end.'%sU'
            vermute ich mal, dass dieser (?R) eine rekursive Suche nach deinen Schleifen durchführt - korrekt?

            Falls ja: da gab es mal eine Disskusion zu - das R scheint eine ganze Menge Ressourcen zu verschliengen. Ich glaube dadurch kam es zum Absturz des Apache bzw. PHP. Vielleicht findest du das Thema - dort ging es auch um Templates.

            Ich habe das ganze anders gelöst. Meine Blöcke/Schleifen im Template haben einen eindeutigen Bezeichner und zwar im Start- und End-Tag. Dadurch kann ich mmir das R im RegEx sparen. Ich finde auch, dass so die Übersichtlichkeit im Template erhöht wird - man sieht genau wo welcher Block / Schleife endet. Gerade bei verschachtelten Schleifen ist das ziemlich hilfreich.

            HTH

            Kommentar


            • #21
              Jepp, ist richtig.

              Logisch klingt es auf jeden Fall schonmal, da ich mir auch noch keinen anderen Grund vorstellen konnte, ausser das es zu viele Ressourcen verbraucht.
              Ich hab das Forum schon zwar ein paar mal wegen diesem Problem abgeklappert, aber dann werd ich mir die Suche wohl nochmal vorknöpfen müssen.

              Ansonsten muss ich die Engine eben auch umbasteln...


              Danke dir.

              *edit*
              found: Klick
              (Ich weiss nun nicht, ob ich auf den Hund warten soll, oder lieber mit dem Umbasteln anfangen soll. Ich fang wohl besser mit dem Basteln an.
              Zuletzt geändert von sagg; 21.02.2006, 10:39.
              mfg - sagg

              Kommentar


              • #22
                @sagg: Das ist doch bestimmt ein selbst erstelltes TS.
                Und ich wäre auch daran interessiert, Ich habe da auch schon ein paar Vorstellungen. (siehe Thema: eigenes Templatesystem den vorletzten Beitrag)
                Und dann hätte ich gerne noch ein bischen Hilfe dazu.

                Wie müßte ich da am besten den tpl-Parser aufbauen.

                Kommentar

                Lädt...
                X