importdesign in templates

Das Forum soll der Ablage von Lösungen für immer wieder auftauchende Problemstellungen dienen. // This forum contains solutions to problems that frequently occur.
Antworten
Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

importdesign in templates

Beitrag von Screeze » 27.02.2010, 21:07:47

Hi,

Irgendwie steh ich grad auf dem schlauch.
Sobald ich ein core:importdesign in ein <html:template> stecke, kommt am ende nur

Code: Alles auswählen

<4645ceaf8a83631827832a728c1f067b />  
raus.
Ich finde den speicherort der importdesign taglib nicht, also kann ich diesen auch nicht nachträglich ins template einbinden.
Was ich allerdings eigenartig finde, ist die tatsache, dass es einen Fehler gibt, wenn das template, welches importdesign einbinden soll, einen fehlerhaften documentcontroller definiert hat. Also scheint es doch irgendwie irgendwo ausgeführt zu werden.

Kann mir da jemand auf die Sprünge helfen?

Danke,
Ralf

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: importdesign in templates

Beitrag von dr.e. » 28.02.2010, 00:45:12

Hallo Ralf,

hier kommt dir die Tatsache in die Quere, dass der Tag <core:importdesign /> im Root-Dokument (=Knoten, der aus deiner Template-Datei generiert wird) bekannt ist. Damit extrahier diesen der Parser vor dem <html:template />-Tag.

Das mag zunächst etwas seltsam klingen, es bietet jedoch erst die Möglichkeit, einen <core:addtaglib />-Tag zu schaffen, der im laufenden Parser-Lauf neue Tags einbindet. Es ist also immer wichtig, dass du den Gültigkeitsbereich der bekannten Tags beachtest. Für deinen Anwendungsfall bedeutet das: die Taglib, die nur im <html:template /> ausgeführt werden soll, darf nicht im Knoten, der durch die Template-Datei erzeugt wird direkt bekannt sein. Dadurch entsteht auch der verlassene Marker-Tag: zunächst wird das <core:importdesign />-Tag geparst (steht innerhalb von <html:template />) und ein Marker im Template-Tag erzeugt, danach wird das Template geparst und erhält fälschlicherweise den Marker als Inhalt des Template-Tags. Da das Tag geparst wurde, hängt es als Kind im DOM und wird natürlich auch ausgeführt.

Konkret sieht die Lösung wie folgt aus:
  • Erstelle eine neue Taglib, die von <core:importdesign /> (liegt unter core::pagecontroller, direkt in der Datei pagecontroller.php, weil es zum Core des Frameworks/Page-Controllers gehört!) ableitet.
  • Die Taglib sollte nur im Template bekannt sein (Name z.B. <template:importdesign />). Diese kann daher per <template:addtaglib /> hinzugefügt werden.
  • Binde die "neue" Taglib im Template ein und inkludiere damit die gewünschten Inhalte.
Damit solltest du das mit sehr wenig Aufwand lösen können.

Ich hoffe, damit wird das verhalten des Parsers klar! :)
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: importdesign in templates

Beitrag von Screeze » 28.02.2010, 12:25:20

So in etwa dachte ich mir das - aber ich hab nicht erwartet, dass diese taglib nicht out of the box auch in templates funktioniert.

Gut dann werd ich sie erweitern.

Danke.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: importdesign in templates

Beitrag von dr.e. » 28.02.2010, 12:28:27

Die Frage ist: warum musst du in <html:template />-Tags Inhalt per <core:importdesign /> einbinden? Das ist bisher kein Anwendungsfall gewesen, der relevant war, das <html:template />-Tags nur als Wiederverwendbare Template-Fragmente gedacht sein. Kannst du die Inhalte nicht in ein eigenes <html:template/> auslagern und per <core:appendnode /> einbinden?
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: importdesign in templates

Beitrag von Screeze » 28.02.2010, 12:33:00

Nope ist leider nicht machbar in dem Fall, da ich zum einen mehrere templates benötige, und einen controller der diese verwaltet. und das ganze will ich loslösen von dem einbindenden template, um es eigenständig benutzen zu können.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: importdesign in templates

Beitrag von dr.e. » 28.02.2010, 12:37:52

Dann bau die Taglib, wir können sie ja dem 1.12er Release beisteuern...
Viele Grüße,
Christian

Benutzeravatar
Screeze
Beiträge: 1920
Registriert: 05.08.2009, 09:49:04
Kontaktdaten:

Re: importdesign in templates

Beitrag von Screeze » 28.02.2010, 13:34:11

Was soll ich da viel bauen, mehr als das brauchts nicht: 8-)

Code: Alles auswählen

<?php
class template_taglib_importdesign extends core_taglib_importdesign{
    public function __construct(){
        parent::core_taglib_importdesign();
    }
}
?>
Jedenfalls scheints zu funktionieren.

Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: importdesign in templates

Beitrag von dr.e. » 28.02.2010, 13:44:40

Hi Ralf,
Was soll ich da viel bauen, mehr als das brauchts nicht:
Viel jedenfalls nicht! ;) Mein Focus lag mehr auf dem Einbauen in das Release.
Jedenfalls scheints zu funktionieren.
Freut mich! Deswegen habe ich den Thread auch nach FAQs verschoben.
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast