Frage zu Problem mit Templateklasse

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

  • Frage zu Problem mit Templateklasse

    Hallo,

    und zwar habe ich eine Templateklasse, welche unter anderem auch Funktionen wie foreach, if und die Timestampumwandlung in ein allgemein leserliches Format enthält.
    Ich möchte hier nicht über den Sinn der Sache diskutieren, ich weiss, dass diese Funktionen für manche nicht in ein Templatesystem gehören.

    Wie dem auch sei, die Klasse funktionierte bis jetzt einwandfrei, allerdings macht mir die foreach-Funktion z. Z. ein paar Probleme.

    Im Template steht z. B. folgendes:
    Code:
    {foreach from=$var to=row}
    <tr>
    <td>{$row.lalla}</td>
    <td>lalla</td>
    <td>lalla</td>
    <td>lalla</td>
    <td>lalla</td>
    </tr>
    {/foreach}
    Wäre im Prinzip das selbe wie:
    PHP-Code:
    foreach ($var AS $row} {
    echo 
    '<tr>
    <td>'
    .$row['lalla'].'</td>
    <td>lalla</td>
    <td>lalla</td>
    <td>lalla</td>
    <td>lalla</td>
    </tr>'
    ;

    Steht in der foreach-Funktion im Template allerdings etwas mehr (egal ob HTML oder anderes), wird der Seitenaufbau abgebrochen, und es erscheint lediglich eine weisse Seite.

    Nun, woran kann das liegen?

    Vielen Dank schonmal.
    Zuletzt geändert von sagg; 06.11.2005, 19:25.
    mfg - sagg

  • #2
    Glaskugel???

    Kommentar


    • #3
      Omg, wieso vergesse ich das, sorry.

      Aufs wensentlich reduziert:
      PHP-Code:
      function _foreach($str) {
        
      $string "";
        
      $from  $str[1];
        
      $strs    "___" $str[2];
        
      $parse $str[3];

        
      $str[1] = $this->_vars[$str[1]];

        
      $parse str_replace('{$'.$str[2], '{$'.$strs$parse);
        foreach (
      $this->_vars[$from] AS $this->_vars[$strs]) {
          
      $string .= $this->_parse($parse);
        }
        unset(
      $this->_vars[$strs]);
        return 
      $string;
      }

      function 
      _parse($string) {
        
      $tag_str preg_quote($this->tag_str);
        
      $tag_end   preg_quote($this->tag_end);
        
      $pattern '%'.$tag_str.'foreach from=\$(\S+) to=(\w+)'.$tag_end.'(((?R)|(.*))*)'.$tag_str.'/foreach'.$tag_end.'%sU';
        
      $string preg_replace_callback($pattern, array(&$this'_foreach'), $string);
        
      $string $this->_unquote($string);
        return 
      $string;
      }

      function 
      _unquote($string) {
        return 
      str_replace(array('\\'.$this->tag_str'\\'.$this->tag_end), array($this->tag_str$this->tag_end), $string);

      Richtiger Code wie immer per Zitat.
      mfg - sagg

      Kommentar


      • #4
        Hat keiner einen Rat?

        Das es bei 1024er Auflösung nicht ganz ohne Querscrollen geht, bitte ich zu verzeihen, aber mitten in der Zeile einen Umbruch zu machen würde wohl den Code etwas "zerreissen".
        mfg - sagg

        Kommentar


        • #5
          Nach weniger als 3 Stunden zu drängeln sollte eigentlich ne Zwangspause für den Thread geben!

          Kommentar


          • #6
            Entschuldige meine Ungeduld, aber in gut einer Stunde muss ich los und komme erst Freitag wieder zurück, da wäre es schön gewesen, das Problem noch klären zu können.

            Unter anderen Umständen hätte ich natürlich nicht so gedrängelt.
            Wie dem auch sei, tut mir leid.
            mfg - sagg

            Kommentar


            • #7
              Dann solltest du uns als kleine Hilfestellung wenigstens mitteilen, mit welchem Parameter _foreach() aufgerufen wird...

              Kommentar


              • #8
                Dieser Code ist es genau, welcher das Abbrechen der Funktion hervor ruft.

                PHP-Code:
                {foreach from=$kats to=kat}
                <
                tr align="center" valign="top">
                  <
                td class="forumRollOut" align="left" valign="middle" 
                onMouseOver="className='forumRollOver'; this.style.cursor='hand';" 
                onMouseOut="className='forumRollOut';" 
                onclick="window.location.href='index.php?action={get[action]}&kid={$kat.id}'; this.style.cursor='hand';">
                   <
                a href="./index.php?action={get[action]}&kid={$kat.id}">{$kat.title}</a>
                   {if 
                $kat.desc != empty}<br><span class="smallfont">{$kat.desc}</span>{/if}
                  </
                td>
                  <
                td align="center" valign="middle" class="forumclass3">{$kat.posts}</td>
                  <
                td align="center" valign="middle" class="forumclass3">{$kat.threads}</td>
                  <
                td align="left" valign="middle" class="forumclass3">
                <
                a href="./index.php?action={get[action]}&kid={$kat.id}&tid={$kat.ltid}">{$kat.ltitle}</a>
                <
                br>{kat.ltimevon <b><a href="./index.php?action=info&uid={$kat.luid}">{$kat.lusr}</a>
                </
                b></td>
                  <
                td align="left" valign="middle" class="forumRollOut forumlinks" width="170" align="left" nowrap style="padding-top:5px;">{$row.mods}</td>
                </
                tr>
                {/foreach} 
                Nimmt man auch nur ein paar HTML/CSS-Argumente raus, funktioniert es einwandfrei.

                Falls du das meintest, die Funktion wird per preg_replace_callback aufgerufen, siehe oben.
                mfg - sagg

                Kommentar


                • #9
                  Bitte lies dir meine Bitte nochmal GENAU durch!!!

                  Kommentar


                  • #10
                    Hm, welche Parameter meinst du?
                    Ich weiss, das sollte ich wissen, wie der Parameter lautet, aber ich komme nicht drauf was du meinst.
                    mfg - sagg

                    Kommentar


                    • #11
                      Ja, das solltest du wissen. Denn so viele Parameter hat die Methode nicht. Genau genommen nur einen einzigen. Und ich kann dir auch sagen, dass es ein array sein sollte. Nur den aufbau dieses Array will ich mir jetzt gerade nicht im Kopf "zusammenparsen".

                      Ich rede von $str.

                      Kommentar


                      • #12
                        Achso, im Nachhinein wieder logisch.

                        $str ist das Array, welches der Pattern ausgibt.
                        Im Prinzip gleichzusetzen mit $string.
                        mfg - sagg

                        Kommentar


                        • #13
                          Argh!

                          Ich will wissen, wie dieses Array aufgebaut ist und was der Inhalt davon ist!!!

                          print_r

                          Kommentar


                          • #14
                            Bsp.:
                            Code:
                            Array (
                             [0] => {foreach from=$links to=row}{$row.title}{/foreach}
                             [1] => links
                             [2] => row
                             [3] =>{$row.title}
                            )
                            Ich glaube es ist besser, wenn wir an der Stele am Freitag weiter machen, da ich nicht mehr ausreichend Zeit habe, mich hierrauf richtig zu konzentrieren.
                            Was dabei raus kommt sieht man ja.

                            Trotzdem vielen, vielen Dank für deine Hilfsbereitschaft.
                            Zuletzt geändert von sagg; 18.11.2005, 19:51.
                            mfg - sagg

                            Kommentar


                            • #15
                              Gerne, Push den Thread, wenn du wieder da bist.

                              Kommentar

                              Lädt...
                              X