Htmlheader AddTitleTag

Dieser Bereich dient dazu, eure Tricks und Erweiterungen vorzustellen, damit diese auch andere Anwender nutzen können. // This area can be used to publish your tricks and extensions to the APF to be used by other developers.
Antworten
proggerxy
Beiträge: 12
Registriert: 24.09.2013, 21:42:46

Htmlheader AddTitleTag

Beitrag von proggerxy » 30.11.2013, 22:04:07

Hallo Leute,

nachdem ich im Wiki auf den Artikel mit der Htmlheader Header Extension gestoßen bin, war ich über deren Funktionalität begeistert. Nachdem ich nun keinen Thread zum Thema gefunden habe, eröffne ich diesen nun:
es ist nämlich so: ich möchte im Htmlheader einen Sprachabhängigen Titel hinzufügen und brauche dazu natürlich den <html:getstring /> Tag. Nun hab ich wird aber in der transform()-Methode des Tags keine Taglibtransformation unternommen. Jetzt wollte ich mal fragen, ob es möglich wäre, Taglibs auch im AddTitleTag des Htmlheaders zu transformieren. Wenn ich den Code jetzt ändere und später das APF upgrade, dann ist die Änderung ja wieder futsch-.-

LG proggerxy

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

Re: Htmlheader AddTitleTag

Beitrag von dr.e. » 01.12.2013, 16:37:36

Hallo proggerxy,

schön, dass du mit der htmlheader-Extension ein passendes Werkzeug gefunden hast. Extensions sind dazu da, eigenen Code, der anderen nützlich sein kann im Release-Zyklus des APF zu verwalten und damit sicher zu stellen, dass Änderungen am APF auch mitgezogen werden.

Da Extensions nicht zum Kern gehören, kann sich jeder an der Entwicklung beteiligen. Daher mein Vorschlag: wenn du einen Patch einreichen möchtest, dann erstelle doch im Tracker unter http://tracker.adventure-php-framework.org ein Issue und ich bin mir sicher, dass dieses aufgenommen wird, wenn es nützlich ist. In deinem Fall denke ich, sollte das nur eine Formalie sein.
Viele Grüße,
Christian

proggerxy
Beiträge: 12
Registriert: 24.09.2013, 21:42:46

Re: Htmlheader AddTitleTag

Beitrag von proggerxy » 01.12.2013, 22:11:23

Hallo dr.e.,

ich weiß ja nicht, aber iwie stehe ich mit der Verbesserung der Extension stehe ich grad auf dem Schlauch:

Code: Alles auswählen

public function transform() {
      /* @var $header HtmlHeaderManager */
      $header = $this->getServiceObject('APF\extensions\htmlheader\biz\HtmlHeaderManager');
      $content = parent::transform();
      
      if (!empty($content)) {
         if ($this->getAttribute('append') === 'true') {

            $title = $header->getTitle();
            /* @var $title SimpleTitleNode */

            if ($title !== null) {
               $titleContent = $title->getContent() . $content;
            } else {
               $titleContent = $content;
            }
         } else {
            $titleContent = $content;
         }
         $header->addNode(new SimpleTitleNode($titleContent));
      }
      return '';
   }
Eigentlich habe ich ja in der 4. Zeile $this->getContent() durch parent::transform() verändert.
Jetzt werden aber auch weiterhin nur die ObjectIDs ausgegeben.

Ich hab folgendes versucht:

Code: Alles auswählen

var_dump($this->getChildren());
Das Ergebnis war
array(0) {}
Mein Template sieht etwa so aus:

Code: Alles auswählen

<html:addtitle append="true">
	     <html:getstring config="labels" namespace="VENDOR\pres\labels" entry="label.title.home" />
	  </html:addtitle>
Ich fände es mal ganz gut, wenn mir diesbezüglich einer unter die Arme greifen kann.

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

Re: Htmlheader AddTitleTag

Beitrag von dr.e. » 01.12.2013, 23:35:57

Hallo progerxy,

das Problem ist die Reihenfolge der Tag-Definition - siehe http://adventure-php-framework.org/Seit ... Hierarchie. Um den Tag <*:getstring /> in der "zweiten" (=tieferen) Ebene zu verwenden, muss dieser dort auch registriert werden. Am einfachsten geht das mit einer Änderung der Implementierung von <html:addtitle />, in dem du den Tag dort im Konstruktor bekannt gibst (siehe http://adventure-php-framework.org/Seit ... ierarchien bzw. http://adventure-php-framework.org/Seit ... M-Struktur und http://adventure-php-framework.org/Seit ... ufdiagramm).

Hoffe das hilft dir weiter.
Viele Grüße,
Christian

proggerxy
Beiträge: 12
Registriert: 24.09.2013, 21:42:46

Re: Htmlheader AddTitleTag

Beitrag von proggerxy » 02.12.2013, 00:32:14

Guten Abend dr.e.,

ich glaube, du hast mich nicht richtig verstanden: der Taglibarray ist zwar leer, aber statt dem Tag werden die Object IDs ausgegeben (wie es nach dem Parsen der Templates ja auch sein sollte). Eigtl. muss ich die tags doch nicht überschreiben, da dieser Tag keinen eigenen Konstruktir hat und fomglich den von Document() verwendet. Lange Rede kurzer Sinn: der Parser scheint zu funktionieren (der generiert ja die ObjektIDs) aber er speichert die Taglibs iwie nicht im
Array.

Schönen Abend noch,
proggerxy

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

Re: Htmlheader AddTitleTag

Beitrag von dr.e. » 02.12.2013, 12:23:09

Hallo proggerxy,

es kann gut sein, dass ich dich falsch verstanden habe. Allerdings ordnet der Parser die Tags immer dann der falschen Hierarchie zu, wenn diese nicht korrekt registriert sind. In deinem Beispiel bedeutet das, dass <html:getstring /> der selben Ebene wie auch <html:addtitle /> zugeordnet wird und damit natürlich auch dein

Code: Alles auswählen

var_dump($this->getChildren()); 
in deinem <html:addtitle />-Tag ein leeres Array ergibt.

Ich bin daher weiter der Meinung, dass es an der Registrierung der Tags in den entsprechenden Ebene liegt.

Versuche mal folgendes:

Code: Alles auswählen

<html:addtitle append="true">
   <addtitle:getstring config="labels" namespace="VENDOR\pres\labels" entry="label.title.home" />
</html:addtitle>
und

Code: Alles auswählen

class HtmlHeaderAddTitleTag extends Document {

   public function __construct() {
      $this->tagLibs[] = new TagLib('APF\core\pagecontroller\LanguageLabelTag', 'addtitle', 'getstring');
   }

   public function onParseTime() {
      $this->extractTagLibTags();
   }

   public function transform() {
      /* @var $header HtmlHeaderManager */
      $header = $this->getServiceObject('APF\extensions\htmlheader\biz\HtmlHeaderManager');

      $content = $this->getContent();
      if (!empty($content)) {

         if ($this->getAttribute('append') === 'true') {

            $title = $header->getTitle();
            /* @var $title SimpleTitleNode */

            if ($title !== null) {
               $titleContent = $title->getContent() . $content;
            } else {
               $titleContent = $content;
            }
         } else {
            $titleContent = $content;
         }

         $header->addNode(new SimpleTitleNode($titleContent));
      }
      return '';
   }

} 
Damit wird dein innen liegender Tag geparst und auch der richtigen Hierarchie zugeordnet.
Viele Grüße,
Christian

proggerxy
Beiträge: 12
Registriert: 24.09.2013, 21:42:46

Re: Htmlheader AddTitleTag

Beitrag von proggerxy » 02.12.2013, 21:58:43

Guten Abend dr.e.,

jetzt seh ichs auch: ich hab die Extrahation der Taglibs vergessen. So was kann aber auch nur mir passieren :oops: .
Ich hab heute Abend leider keine Zeit mehr, ich schick morgen die Eeweiterung der Erweiterung an den Tracker. Ich hoffe mal, dass ich dann das APF unbesorgt upgraden kann und es auch weiterhin genießen kann.

Lg proggerxy

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

Re: Htmlheader AddTitleTag

Beitrag von dr.e. » 02.12.2013, 23:52:23

Hallo proggerxy,

kein Stress, der Parser ist mit das komplexeste Element des APF und daher nicht immer gleich zu 100% zu verstehen! ;) Freue mich auf deinen Beitrag.
Viele Grüße,
Christian

proggerxy
Beiträge: 12
Registriert: 24.09.2013, 21:42:46

Re: Htmlheader AddTitleTag

Beitrag von proggerxy » 03.12.2013, 19:28:49

Hallo dr.e.,

danke für deine Hilfe.

Ich hab im Tracker den Eintrag gemacht und davor noch deinen Code ein wenig erweitert.

LG proggerxy

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast