Alle Standard-TagLibs beachten?

Im Entwickler-Forum können Implementierungsdetails sowie Alternativen der Umsetzung diskutiert werden. // Here, developers can discuss implementation details of features of their projects.
Antworten
Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Alle Standard-TagLibs beachten?

Beitrag von dr.e. » 20.12.2008, 20:05:41

Hallo Michl,

ich habe mich wie besprochen um das Thema gekümmert, ob die bekannten TagLibs nicht global konfigurierbar gemacht werden können. Vorteil der Vorgehensweise ist in der Tat, dass <core:addtaglib />-Tags deutlich seltener sind, Nachteil ist, dass die Performance dadurch negativ beeinträchtigt wird.

Als Lösung habe ich zwei Möglichkeiten evaluiert:
  • Erweiterung der __extractTagLibTags() und Konfiguration über die Registry
  • Einführung einer neuen TagLib, die alle Tags kennt
Die erste Variante hat den Vorteil, dass man alle in einem Projekt relevanten TagLibs in der index.php konfigurieren kann. Nachteil ist, dass bei jedem Parse-Vorgang auf die Registry zugegriffen werden muss. Das kostet bei meinen Tests rund 10%-15% an Performance. Die zweite Variante hat den Nachteil, dass die Tags nicht ganz so komfortabel konfiguriert werden können, die Performance jedoch nur durch die zusätzlichen und oft nicht notwendigen Parse-Operationen beeinträchtigt wird. Das sind in meinen Tests 2%-5% gewesen. Ich habe mich deshalb dafür entschieden, die __extractTagLibTags() nicht anzupassen, da mir die Erhaltung der Performance sehr wichtig ist.

Ich schlage daher vor, dass du in deinem Projekt eine eigene TagLib anlegst und im Konstruktor alle für dich und dein Projekt relevanten TagLibs bekannt machst (einschließlich der TagLib selbst) und diese dann Konsequent statt der <core:importdesign />-TagLib nutzt. Der Code gestaltet sich dann wie folgt:

Code: Alles auswählen

class all_taglib_importdesign extends core_taglib_importdesign
{

   function all_taglib_importdesign(){
      
      // include the necessary tag libs, including the taglib itself
      $this->__TagLibs[] = new TagLib('core::pagecontroller','core','setproperty');
      $this->__TagLibs[] = new TagLib('core::pagecontroller','core','setattribute');
      $this->__TagLibs[] = new TagLib('tools::html::taglib','html','getstring');
      $this->__TagLibs[] = new TagLib('tools::html::taglib','doc','createobject');
      $this->__TagLibs[] = new TagLib('tools::html::taglib','fcon','importdesign');
      $this->__TagLibs[] = new TagLib('tools::html::taglib','html','iterator');
      $this->__TagLibs[] = new TagLib('tools::form::taglib','html','form');
      $this->__TagLibs[] = new TagLib('tools::media::taglib','html','mediastream');
      $this->__TagLibs[] = new TagLib('tools::html::taglib','generic','importdesign');
      $this->__TagLibs[] = new TagLib('core::pagecontroller','core','appendnode');
      $this->__TagLibs[] = new TagLib('modules::socialbookmark::pres::taglib','social','bookmark');
      $this->__TagLibs[] = new TagLib('modules::alltags::pres::taglib','all','importdesign');
   
      // call the parent constructor
      parent::core_taglib_importdesign();
      
    // end function
   }

 // end class
}
Zur Verwendung muss dann nur noch im initialen Template folgendes stehen:

Code: Alles auswählen

<core:addtaglib namespace="modules::alltags::pres::taglib" prefix="all" class="importdesign" />
<all:importdesign ... />
Anschließend kannst du in jedem weiteren Template die TagLib zum Importieren verwenden.

Wenn Interesse besteht, baue ich die TagLib in's Release ein.

Viele Grüße,
Christian

PS: wie kommst du mit der Entwicklung voran? Gab es noch ungelöste Herausforderungen?
Viele Grüße,
Christian

Antworten

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast