Taglib-Call innerhalb eines Taglib-Call

Im Entwickler-Forum können Implementierungsdetails sowie Alternativen der Umsetzung diskutiert werden. // Here, developers can discuss implementation details of features of their projects.
APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Taglib-Call innerhalb eines Taglib-Call

Beitrag von APFelsahne » 12.09.2010, 20:05:10

Hallöchen!

Ich habe folgenden Template-Code:

Code: Alles auswählen

<icon:status 
    value="<item:placeholder name="status" />"
    alt="<item:placeholder name="status_desc" />"
    title="<item:placeholder name="status_desc" />" />


Es passiert folgendes: Innerhalb eines Iterator-Taglibs rufe ich eine eigene Taglib (icon_taglib_status) auf, die letztlich ein <img .../> liefert.
Je nach Wert, sieht das Bildchen anders aus.

Resultat:

Code: Alles auswählen

<icon:status value="wert" alt="beschreibung" title="beschreibung" />


Was rauskommen sollte ist dann sowas wie

Code: Alles auswählen

<img src="./wert.png" alt="beschreibung" title="beschreibung" />


Die Item-Platzhalter werden verarbeitet vom APF, das Icon-Taglib nicht mehr. Ich vermute entweder ignoriert das APF dann den Aufruf von
icon_taglib_status oder es liegt am Timing.

In meiner Taglib (icon_taglib_status) wird der Aufruf über transform() verarbeitet.
Muss man hier eine andere Methode verwenden? Oder gehe ich das Problem von der falschen Seite an?

Grüße!
Grüße, Florian
BildAPF-Extension wsCatalyst

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

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von Screeze » 12.09.2010, 20:08:51

Soweit ich weis ist es nicht möglich Taglibs im "Kopf" anderer Taglibs zu haben, das geht nur in deren Inhalt.

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

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von dr.e. » 13.09.2010, 12:57:10

Hallo APFelsahne,

Ralf hat den entscheidenden Tipp schon gegeben. Innerhalb einer Taglib-Definition kann der Parser keine weitere Taglibs verarbeiten. Wenn du dort Parameter dynamisch einsetzen möchtest, kannst du das aber gerne vom Controller aus tun. Jede Taglib kannst du im Document-Controller über die Instanz des aktuellen Knoten ($this->__Document->getChildren()) erreichen.

Schau dir mal den Code der Methode base_controller::setPlaceHolder() an, dort findest du ein Beispiel, wie du dir die Tags zusammensuchen kannst.
Viele Grüße,
Christian

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von jprangenberg » 15.09.2010, 23:47:13

Code: Alles auswählen

<form:listener control="username" validator="TextLengthValidator">
   <div class="Error"><form:getstring namespace="sitelanguage::register" config="register" entry="lengUser" /></div>
</form:listener>


Habe diesen Code! Wieso gibt er nichts aus? Wieso liest er das nicht aus der .INI? Wenn ich das Text ersetzte funktioniert es!
Liegt das am gleichen Problem? Gehe ich von aus! Wieso kann das APF so etwas nicht?

Kann jemand mal ein kleines Beispiel mit dem getchildren() erstellen!? Wofür ist es genau da?

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

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von Screeze » 16.09.2010, 14:01:24

Nein ist nicht das selbe problem, DU hast immernoch das problem was ich dir die letzten tage mehrfach gesagt habe ;)

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von jprangenberg » 16.09.2010, 14:22:46

Screeze hat geschrieben:Nein ist nicht das selbe problem, DU hast immernoch das problem was ich dir die letzten tage mehrfach gesagt habe ;)


Ich glaube auch, das ich es niemals verstehen werde :-D Mag mir das nochmal jemand erklären? Ich weiß nie, was ich dort hinschreiben muss: <form , <html , <template ....

Code: Alles auswählen

<form:listener control="username" validator="TextLengthValidator">
   <div class="Error"><listener:getstring namespace="sitelanguage::register" config="register" entry="lengUser" /></div>
</form:listener>


...??? Oh man! :-D

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von jprangenberg » 16.09.2010, 23:03:54

Problem:
<form:placeholder name="Message" />


Code: Alles auswählen

$form->setPlaceHolder('Message', '<form:getstring namespace="sitelanguage::register" config="register" entry="world" />');


Das Placeholder ersetzt es zwar, es wird aber nicht angezeigt! Was mache ich falsch? Das ist aber das Problem des Threads, wa?

Der Quelltext sieht so aus: <form:getstring namespace="sitelanguage::register" config="register" entry="world" />

APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von APFelsahne » 17.09.2010, 09:20:19

hehe ;) er meinte auch nicht, dass du dann im controller für den platzhalter die taglib-angabe machst, sondern dir dann die direkte auslesung der configdatei zu nutze machst. ($this->__getConfiguration(...) blabla :) )
Grüße, Florian
BildAPF-Extension wsCatalyst

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von jprangenberg » 17.09.2010, 09:25:26

APFelsahne hat geschrieben:hehe ;) er meinte auch nicht, dass du dann im controller für den platzhalter die taglib-angabe machst, sondern dir dann die direkte auslesung der configdatei zu nutze machst. ($this->__getConfiguration(...) blabla :) )


Und wieso funktioniert das nicht?

Code: Alles auswählen

$form->setPlaceHolder('Message', '<form:getstring namespace="sitelanguage::register" config="register" entry="world" />');

APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von APFelsahne » 17.09.2010, 09:33:53

wegen dem timingmodell.

zu dem zeitpunkt wurden die templates schon geparst. du bist hier im transform-zeitpunkt (also später als der parse-zeitpunkt), hier wird der aufruf <form:... /> nicht mehr als taglib, sondern als html-ausgabe interpretiert. ich könnte wetten, wenn du dir den html-quellcode im browser anschaust, wirste die taglib-angabe finden.
Grüße, Florian
BildAPF-Extension wsCatalyst

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von jprangenberg » 17.09.2010, 11:09:46

Ja, das finde ich auch dort.
Kann mir jemand sagen, wie ich es td machen kann? Geht das überhaupt irgendwie so?
CodeBeispiel?

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von Well » 17.09.2010, 12:20:01

Code: Alles auswählen

         // get configuration
         $config = &$this->__getConfiguration($namespace,$configName);
         if($config == null){
            $t->stop($id);
            return (string)'';
          // end if
         }
         else{

            // get configuration values
            $value = $config->getValue($this->__Language,$entry);

            if($value == null){

               // get environment variable from registry to display nice error message
               $env = Registry::retrieve('apf::core','Environment');

               trigger_error('['.get_class($this).'->transform()] Given entry "'.$entry
                  .'" is not defined in section "'.$this->__Language.'" in configuration "'
                  .$env.'_'.$configName.'.ini" in namespace "'.$namespace.'" and context "'
                  .$this->__Context.'"!');
               $t->stop($id);
               return (string)'';

             // end if
            }
            else{
               $t->stop($id);
               return $value;
             // end if
            }

So wirds im TagLib gemacht - das eventuell im Controller implentieren? Das ist aber ziemlich viel Aufwand, denke ich. Edit: Ok, wenn man die Prüfungen weglässt - Welche in diesem Fall ja eh nicht benötigt werden, geht das Wohl doch ganz gut. :)

Wie sieht dein Anwendungsfall aus? Wieso packst du das ganze nicht in ein Template und setzt das an der entsprechenden Stelle ein/ setzt es dort nicht ein? Das ist, denke ich, auf jeden Fall weniger Aufwand, als die Konfigurationsdatei manuell auszulesen.
Zuletzt geändert von Well am 17.09.2010, 13:08:25, insgesamt 1-mal geändert.

jprangenberg
Beiträge: 410
Registriert: 16.08.2010, 22:14:54

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von jprangenberg » 17.09.2010, 12:40:00

Ich möchte halt eine Message ausgeben, wenn etwas passiert. Und das auf 2 Sprachen.
Wenn ich den Placeholder setze muss ich Ihn ja dann auf Deutsch und Englisch setzen. Was ist wenn Spanisch dazu kommt? ;)

Möchte einfach ein Placeholder setzen der den String in der jeweiligen Sprache ausgibt, welche ausgewählt ist.

Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von Well » 17.09.2010, 12:49:16

Moment, da habe ich mich wohl schlecht ausgedrückt: Mit "das ganze" meinte ich den getstring-Tag. :)

Code: Alles auswählen

<html:template name="message">
  <template:addtaglib ... />
  <template:getstring ... />
</html:template>

Code: Alles auswählen

if(...) {
  $tmpl__message = &$this->__getTemplate('message');
  $this->setPlaceHolder('message', $tmpl__message->transformTemplate());
}
Zuletzt geändert von Well am 17.09.2010, 12:53:59, insgesamt 1-mal geändert.

APFelsahne
Beiträge: 222
Registriert: 18.03.2010, 13:13:07
Wohnort: Ludwigshafen am Rhein
Kontaktdaten:

Re: Taglib-Call innerhalb eines Taglib-Call

Beitrag von APFelsahne » 17.09.2010, 12:51:32

dafür gibst du ja die section an, wenn die den sprach-schnipsel rausliest.
grundsätzlich bin ich aber grad verwirrt, warum das denn nicht mit :getstring funktionieren soll? dafür ist das ja da

edit: @well du brauchst aber dann nur das transformTemplate. Das placeholder-Konstrukt drumrum passt da nicht/brauchst du nicht (im bezug auf das davor gesetzte template).
Grüße, Florian
BildAPF-Extension wsCatalyst

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast