Frage zu Problem mit Templateklasse

Collapse
X
 
  • Filter
  • Time
  • Show
Clear All
new posts

  • #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

    Comment


    • #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.
      Last edited by sagg; 20-02-2006, 00:09.
      mfg - sagg

      Comment


      • #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

        Comment


        • #19
          Hm..

          *push?*

          Sry, ich komm hier nicht weiter.
          mfg - sagg

          Comment


          • #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

            Comment


            • #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.
              Last edited by sagg; 21-02-2006, 09:39.
              mfg - sagg

              Comment


              • #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.

                Comment

                Working...
                X