Frage zu Problem mit Templateklasse

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

  • 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.
    Last edited by sagg; 06-11-2005, 18:25.
    mfg - sagg

  • #2
    Glaskugel???

    Comment


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

      Comment


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

        Comment


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

          Comment


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

            Comment


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

              Comment


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

                Comment


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

                  Comment


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

                    Comment


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

                      Comment


                      • #12
                        Achso, im Nachhinein wieder logisch.

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

                        Comment


                        • #13
                          Argh!

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

                          print_r

                          Comment


                          • #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.
                            Last edited by sagg; 18-11-2005, 18:51.
                            mfg - sagg

                            Comment


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

                              Comment

                              Working...
                              X