Ergebnis 1 bis 8 von 8
  1. #1
    Avatar von ZeitGeist
    ZeitGeist ist offline Lounge-Member
    registriert
    26-04-2003
    Ort
    Outa Space
    Beiträge
    4.125

    [Smarty] Auf Funktionen von Klassenmembers zugreifen

    Ich spiele gerade ein wenig mit der Template Engine Smarty rum. Dabei bin ich auf folgendes Problem gestoßen:

    Ich habe ein Array mit Objekten die ich über eine Schleife in einem Template ausgebe. Dabei möchte ich allerdings auch auf Funktionen von Membern dieser Objekte zugreifen. Smarty schmeißt mir bei diesem Versuch immer folgende Fehlermeldung:

    Code:
    syntax error: unrecognized tag: $objekt->getB()->getId()
    Der Code sieht im Groben so aus:
    PHP-Code:
    class A
    {
        public function 
    getB()
        {
            return new 
    B(); 
        }
    }

    class 
    B
    {
        public function 
    getId() { return 1; }

    Template Intialisierung
    PHP-Code:
    $smarty = new Smarty();
    $array = array(new A(), new A(), new A());
    $smarty->assign_by_ref("objekte",$array);
    $smarty->display('index.tpl'); 
    index.tpl
    PHP-Code:
    {foreach from=$objekte item=objekt}
       {
    $objekt->getB()->getId();
    {/foreach} 
    Hab ich überhaupt eine Chance sowas in Smarty zum Laufen zu bekommen.
    Oder kennt jemanden einen vernünftigen Workaround oder eine Template Engine die sowas kann?
    Geändert von ZeitGeist (28-07-2007 um 03:27 Uhr)

  2. #2
    Avatar von Albu
    Albu ist offline Super Moderator
    registriert
    04-07-2001
    Beiträge
    13.501

    AW: [Smarty] Auf Funktionen von Klassenmembers zugreifen

    Ich kenne Smarty noch gar nicht. Und obwohl ich Anwendungsfälle sehe, wo es nützlich wäre und man sowas gut gebrauchen könnte, soll eine Template Engine doch eher Code und Content voneinander trennen. Hier scheint jedoch Code durch anderen Code ersetzt worden zu sein, was irgendwie die einfache Wartung durch Laien (sprich Webdeisgner) wieder zunichte macht.

    Ich habe bereits zwei verschiedene Template Engines eingesetzt, beide beschränkten sich darauf Blöcke und Variablen zu definieren und durch ein simples Markup abzugrenzen (== Webdesigner kompatibel). Während Variablen für einzelne Felder, bzw. Werte stehen (und gänzlich ohne $ auskommen), sind Blöcke für Wiederholungen zuständig. Die eigentliche Iteration über die Daten erfolgt dabei gänzlich im Script. Smarty hat hier eher so einen halb und halb Ansatz (wie es scheint).
    Das einzig besondere und vielleicht einzig brauchbare Feature (im Vergleich zu anderen Template Engines) dürfte die Möglichkeit für Verzweigungen sein.

    Was Dein Problem angeht: die wenigen Beispiele haben alle name.wert benutzt, um von einer Schleifenvariable auf ein Feld zuzugreifen. Es dürfte also mindestens objekt.getB... heißen. In wie weit das alles überhaupt möglich ist, weiß ich nicht. Mit einer anderen Template Engine (z.B. Sigma aus PEAR) ergibt sich eine solche Problematik erst gar nicht.
    1. Get people to play Space Taxi
    2. Sell real estates on neptun
    3. Profit!

    IE is not a browser, it is a scream.


    Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read.

  3. #3
    Avatar von ZeitGeist
    ZeitGeist ist offline Lounge-Member
    registriert
    26-04-2003
    Ort
    Outa Space
    Beiträge
    4.125

    AW: [Smarty] Auf Funktionen von Klassenmembers zugreifen

    Hier scheint jedoch Code durch anderen Code ersetzt worden zu sein, was irgendwie die einfache Wartung durch Laien (sprich Webdeisgner) wieder zunichte macht.
    Ich wollte damit nur Werte der Member-Klasse ausgeben. Insofern wäre eine Trennung ja schon noch vorhanden.

    Was Dein Problem angeht: die wenigen Beispiele haben alle name.wert benutzt, um von einer Schleifenvariable auf ein Feld zuzugreifen. Es dürfte also mindestens objekt.getB... heißen.
    mit dem . kann man auf assoziative Arrays zugreifen. Für Objekt-Eigenschaften/Methoden wird -> verwendet. Nach dem was ich jetzt alles gelesen habe, scheint dies aber nicht beliebig tief zugehen.
    Ich verfrachte die Daten jetzt vorher in ein Array, welches dann durchlaufen wird. Hat den Vorteil das aus den Templates auch keine Funktionen aufgerufen werden können die das Objekt verändern.
    Die Iteration im Template find ich sehr praktisch, sonst würden meine Seiten aus lauter template-Fetzen bestehen und ich hätte haufenweise Templates mit nur ein paar Zeilen Code (Start/Ende Tag von Listen/Tabellen zum Beispiel)

    trotzdem danke für deine Hilfe

  4. #4
    Avatar von Albu
    Albu ist offline Super Moderator
    registriert
    04-07-2001
    Beiträge
    13.501

    AW: [Smarty] Auf Funktionen von Klassenmembers zugreifen

    Zitat Zitat von ZeitGeist Beitrag anzeigen
    Ich wollte damit nur Werte der Member-Klasse ausgeben. Insofern wäre eine Trennung ja schon noch vorhanden.
    nunja, es ist aber eben doch noch Code im Template, anstatt dass es komplett codefrei ist.

    Zitat Zitat von ZeitGeist Beitrag anzeigen
    Die Iteration im Template find ich sehr praktisch, sonst würden meine Seiten aus lauter template-Fetzen bestehen und ich hätte haufenweise Templates mit nur ein paar Zeilen Code (Start/Ende Tag von Listen/Tabellen zum Beispiel)
    Wenn Du Dir mal andere Template Engines angeschaut hättest, dann wäre Dir aufgefallen, dass diese sehr wohl solche Konstrukte unterstützen:
    Code:
    <ul>
    <!-- BEGIN wiederholungsblock -->
       <li><img src="{bild1}" ..... </li>
    <!-- END wiederholungsblock -->
    </ul>
    Hier kann man Null bis n Zeilen erzeugen und hat dennoch keinen Code in der Template Datei. Alle Zugriffe erfolgen in der PHP Datei, woher diese dann die Daten holt ist dem Template egal.
    1. Get people to play Space Taxi
    2. Sell real estates on neptun
    3. Profit!

    IE is not a browser, it is a scream.


    Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read.

  5. #5
    Avatar von ZeitGeist
    ZeitGeist ist offline Lounge-Member
    registriert
    26-04-2003
    Ort
    Outa Space
    Beiträge
    4.125

    AW: [Smarty] Auf Funktionen von Klassenmembers zugreifen

    ich seh da keinen Unterschied. Ob ich nun {$bild} oder {bild} verwende, oder <!-- BEGIN ---> oder {foreach}

  6. #6
    Avatar von Albu
    Albu ist offline Super Moderator
    registriert
    04-07-2001
    Beiträge
    13.501

    AW: [Smarty] Auf Funktionen von Klassenmembers zugreifen

    Zitat Zitat von ZeitGeist Beitrag anzeigen
    ich seh da keinen Unterschied. Ob ich nun {$bild} oder {bild} verwende, oder <!-- BEGIN ---> oder {foreach}
    Das eine ist Markup, das andere Programmcode
    1. Get people to play Space Taxi
    2. Sell real estates on neptun
    3. Profit!

    IE is not a browser, it is a scream.


    Outside of a dog, a book is man's best friend. Inside of a dog, it's too dark to read.

  7. #7
    Avatar von Comet
    Comet ist offline Administrator
    registriert
    17-09-2001
    Ort
    Austria | Westendorf
    Beiträge
    2.182

    AW: [Smarty] Auf Funktionen von Klassenmembers zugreifen

    In smarty mußt du die Objekte registrieren, damit du diese verwenden kannst, siehe Smarty - advanced features
    ..:::Andi:::..

  8. #8
    Avatar von ZeitGeist
    ZeitGeist ist offline Lounge-Member
    registriert
    26-04-2003
    Ort
    Outa Space
    Beiträge
    4.125

    AW: [Smarty] Auf Funktionen von Klassenmembers zugreifen

    ich kann aber keine Objekte registieren die innerhalb eines Arrays gespeichert sind, bzw kann ich diese dann nicht mehr durchlaufen. Wie gesagt ich habs jetzt gelöst.
    Trotzdem danke

Ähnliche Themen

  1. Antworten: 5
    Letzter Beitrag: 26-12-2006, 00:10
  2. Auf Request Parameter zugreifen
    Von thea im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 29-09-2006, 21:03
  3. Antworten: 7
    Letzter Beitrag: 08-05-2006, 16:42
  4. Mit JavaScript auf PHP Variable zugreifen
    Von Willow im Forum JavaScript
    Antworten: 26
    Letzter Beitrag: 18-01-2006, 18:21
  5. Auf übergeordnetes Frameset zugreifen
    Von kirtas im Forum JavaScript
    Antworten: 1
    Letzter Beitrag: 16-01-2006, 11:37

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •