Unterstützung " und ' als Attribut-Abgrenzung

Dieser Bereich dient dazu, neue Features zu diskutieren und für die Entwicklung zu dokumentieren. // This area is dedicated to new features including proposals and documentation.
Benutzeravatar
dr.e.
Administrator
Beiträge: 4527
Registriert: 04.11.2007, 16:13:53

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von dr.e. » 31.12.2012, 13:57:35

Hi Jan,
[..] addStringReplacement() klingt durch das "add" für mich sehr nach dem hinzufügen von etwas, was hinterher ausgetauscht wird ;)
Was es ja letztlich aber auch ist. ;) Nehmen wir einfach setStringPlaceHolder(), denn ohne eine dritte Person wird's schwer sich zu entscheiden. Die möglichen Unklarheiten soll dann einfach die Dokumentation auflösen.
Nervt dich, oder? Mich auch. Ich habe immer noch ein Linux und auch eine Software (kdesvn, RapidSVN), nur funktionierts leider nicht wie es soll. Wir wollten das ja mal per Skype klären.
Mich nerven tut's nicht. Sorry, wenn das so rübergekommen ist. Melde mich gleich per Skype bei dir.
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von jwlighting » 02.01.2013, 13:39:02

Wir hatten uns ja geeinigt, dass wir eine Methode setStringPlaceHolder() in PlaceHolderTag implementieren wollen.
Im Documentcontroller sollte das dann so aussehen:

Code: Alles auswählen

$this->getPlaceHolder('name')->setStringPlaceHolder('name', 'value');
 
Derzeit gibt es allerdings noch keine Methode BaseDocumentController::getPlaceHolder(). Ich würde diese dann auch implementieren.

Hinzu kommt noch, dass es ja mehrere PlaceHolderTags mit dem selben Namen geben kann. Dies lässt sich mit dem obigen, verketteten Ausdruck dann nicht mehr umsetzen.
Statdessen wäre sowas (im DocCon) nötig:

Code: Alles auswählen

$placeHolderTags = $this->getPalceHolders('name');

if(count($placeHolderTags) > 0){
   foreach($placeHolderTags AS $placeHolderTag){
      $placeHolderTag->setStringPlaceHolder('name','value');
   }
}
 
Irgendwie ist das noch nicht ganz die perfekte Lösung, oder?

LG :)

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von dr.e. » 02.01.2013, 18:08:57

Hi Jan,
Irgendwie ist das noch nicht ganz die perfekte Lösung, oder?
Hmm, da hast du recht. :D

Im aktuellen Projekt haben wir diese Ersetzungen mit OutputFiltern geregelt. Ist zumindest eleganter hinsichtlich mehrerer Platzhalter...
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von jwlighting » 02.01.2013, 18:15:33

Ich würde vorschlagen, wir fahren ein Mittelding:
  • PlaceHolderTag bekommt eine Methode setStringPlaceholder()
  • BaseDocumentController bekommt eine Methode getPlaceHolders()
  • BaseDocumentController bekommt eine Methode setStringPlaceHolders() mit 3 Parametern Placeholder-Tag Name, String Placeholder Name und Ersetzungsstring, in der auf jedes Placeholder-Tag das von getPlaceHolders() zurückgegeben wird setStringPlaceholder() aufgerufen wird.
LG :)

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von dr.e. » 02.01.2013, 20:35:56

Klingt gut, gekauft! ;)
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: [1.17] Refactoring/Umbenennung Tag-Klassen

Beitrag von jwlighting » 02.01.2013, 21:33:39

So, ich poste hier erst mal die Implementierung zur Diskussion, bevors ins SVN geht ;)

PlaceHolderTag:

Code: Alles auswählen

/**
 * @package core::pagecontroller
 * @class PlaceHolderTag
 *
 * Represents a place holder within a template file. Can be filled within a document controller
 * using the setPlaceHolder() method.
 *
 * @author Christian Achatz
 * @version
 * Version 0.1, 28.12.2006<br />
 */
class PlaceHolderTag extends Document {

   /**
    * @protected
    * @since 1.17
    *
    * @var array Replacement strings for string placeholders
    *
    */
   protected $stringPlaceHolders = array();


   /**
    * @public
    */
   public function __construct() {
      // do nothing, especially not initialize tag libs
   }


   /**
    * @public
    *
    *
    * @param string $key Name of the string placeholder
    * @param string $value Replacement value
    *
    * @since 1.17
    * @author Jan Wiese
    * @version
    * Version 0.1, 02.01.2013<br />
    */
   public function setStringPlaceHolder($key, $value) {
      $this->stringPlaceHolders[$key] = $value;
   }


   /**
    * @public
    *
    * Implements the transform() method. Returns the content of the tag, that is set by a
    * document controller using the BaseDocumentController's setPlaceHolder() method.
    * All registered string placeholders are replaced.
    *
    * @return string The content of the place holder.
    *
    * @author Christian Schäfer, Jan Wiese
    * @version
    * Version 0.1, 28.12.2006<br />
    * Version 0.2, 02.01.2013 Jan Wiese (Added string placeholder replacement)<br />
    */
   public function transform() {
      
      // check if there are any string palceholders to be replaced
      if (count($this->stringPlaceHolders) < 1) {
         return $this->__Content;
      }
      
      // replace string placeholders
      $content = $this->__Content;
      foreach($this->stringPlaceHolders AS $key => $value){
         $content = str_replace(
            '{' . $key . '}',
            $value,
            $content
         );
      }
      
      // return content 
      return $content;
   }



}
 
BaseDocumentController:

Code: Alles auswählen

   // ...

   /**
    * @protected
    *
    * Sets the given value as the content of the specified place holder.
    *
    * @param string $name The name of the place holder to fill.
    * @param string $value The value to insert into the place holder.
    * @throws InvalidArgumentException In case the place holder cannot be found.
    *
    * @author Christian Achatz, Jan Wiese
    * @version
    * Version 0.1, 28.12.2006<br />
    * Version 0.2, 23.04.2009 (Corrected PHP4 style object access)<br />
    * Version 0.3, 02.01.2013 (Introduced usage of method getPlaceHolders())<br />
    */
   protected function setPlaceHolder($name, $value) {

      $placeHolders = $this->getPlaceHolders($name);

      // warn, if no place holder was found
      if (count($placeHolders) < 1) {
         throw new InvalidArgumentException('[' . get_class($this) . '::setPlaceHolder()] There are no place holders '
            . 'found for name "' . $name . '" in document controller "' . get_class($this) . '"!', E_USER_WARNING);
      }
      
      // set content of place holder tags
      foreach($placeHolders AS $placeHolder){
         $placeHolder->setContent($value);
      }
      
   }


   // ...
   
   /**
    * @protected
    * 
    * Sets string place holder for every place holder tag with specified name.
    * 
    * @param string $placeholderName Name of placeholder tags to be affected 
    * @param string $key String placeholder name
    * @param string $value Replacement value
    * @throws InvalidArgumentException
    * 
    * @since 1.17
    * @author Jan Wiese
    * @version
    * Version 0.1, 02.01.2013<br />
    */
   protected function setStringPlaceHolder($placeholderName, $key, $value){
      
      // get place holders with defined name
      $placeHolders = $this->getPlaceHolders($placeholderName);
      
      // check for empty list
      if(count($placeHolders) < 1){
         throw new InvalidArgumentException('[' . get_class($this) . '::setStringPlaceHolder()] There are no place holders '
            . 'found for name "' . $placeholderName . '" in document controller "' . get_class($this) . '"!', E_USER_WARNING);
      }
      
      // set string place holder for each place holder tag
      foreach($placeHolders AS $placeHolder){
         $placeHolder->setStringPlaceHolder($key, $value);
      }
      
   }
   
   /**
    * @protected
    * 
    * Returns all place holder tags with a specified name as array.
    * 
    * @param string $name Name of the place holders to find
    * @return PlaceHolderTag[] Collection of all found place holders.
    * @throws InvalidArgumentException
    * 
    * @since 1.17
    * @author Jan Wiese
    * @version
    * Version 0.1, 02.01.2013<br />
    */
   protected function getPlaceHolders($name){

      $children = & $this->__Document->getChildren();
      if (count($children) > 0) {
         
         $placeHolders = array();
         foreach ($children as $objectId => $DUMMY) {

            if ($children[$objectId] instanceof PlaceHolderTag) {

               if ($children[$objectId]->getAttribute('name') == $name) {
                  $placeHolders[] = $children[$objectId];
               }
            }
         }
      } else {
         throw new InvalidArgumentException('[' . get_class($this) . '::getPlaceHolders()] No placeholder object with name "'
            . $name . '" composed in current document for document controller "' . get_class($this)
            . '"! Perhaps tag library html:placeholder is not loaded in current template!', E_USER_ERROR);
      }
      
      return $placeHolders;
   }

   // ...
 
LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von dr.e. » 02.01.2013, 23:57:29

Hallo Jan,

danke für's implementieren. Ich schau mir den Code in den nächsten Tagen an und gebe dir Feedback..
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von jwlighting » 03.01.2013, 13:28:47

Wenn das mal alles gewesen wäre.... :P

Wir brauchen getPlaceHolders($name) und setStringPlaceHolders($placeholderName, $key, $value) dann ja auch für TemplateTag und HtmlFormTag (hab ich noch was vergessen).
Lässt sich das vielleicht doch schlauer lösen, als den Code jeweils zu kopieren? Da wären Traits jetzt eine tolle Sache...

LG :)

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von dr.e. » 03.01.2013, 14:53:59

Irgendwie gefällt mir das Feature immer weniger... ;)
Da wären Traits jetzt eine tolle Sache...
Traits sind hierfür eine gute Wahl - korrekt. Allerdings bin habe ich zu Traits im Allgemeinen kein gutes Verhältnis, da ich weiterhin behaupte, dass sie schlechtes Software-Design fördern und gegen OOP sind.

Lass uns doch nochmal drüber nachdenken, wozu wir das Feature brauchen, welchen Aufwand es generiert und ob es wirklich eine sinnvolle Erleichterung ist.
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von jwlighting » 03.01.2013, 15:23:39

Hallo Christian,

ich habe in einem aktuellen Projekt zwei Anwendungsfälle für die StringPlaceHolder. Entstanden sind sind sie ja aus der Diskussion, einfache Anführungszeichen (') für Attribute zuzulassen.
  1. Ich brauche Platzhalter in Attributen von HTML-Elementen. Verwende ich hier Tags, wird der Code extrem unübersichtlich und die IDE erkennt den Code korrekt als invalid, bietet mir darüber hinaus auch keine Unterstützung mehr beim Erkennen von Fehlern oder durch Vervollständigung
  2. Ich habe einen Bereich in einem Template, den ich nur unter Bestimmten Umständen ausgeben will. Hier könnte ich zwar auch einen Palceholder und ein weiteres Template-Tag einsetzen, habe dann aber schnell eine große Anzahl Template-Tags und den Code quer verstreut.
Hier mal ein Beispiel für Punkt 1:

Code: Alles auswählen

<template:placeholder name="anchor"><a class="anchor" id="{ALIAS}"></a></template:placeholder>
 
Und für Punkt 2. Die Daten sollen jeweils nur ausgegeben werden, wenn dafür auch ein Wert existiert. Sollen sie nicht ausgegeben werden, kann ich für den Placeholer im Controller einfach einen leeren String setzen.

Code: Alles auswählen

      <div class="datedata">
         <dl>
            <template:placeholder name="category"><dt>Kategorie</dt><dd>{CATEGORY}</dd></template:placeholder>
            <template:placeholder name="date"><dt>Datum</dt><dd>{DATE}</dd></template:placeholder>
            <template:placeholder name="time"><dt>Beginn</dt><dd>{TIME}</dd></template:placeholder>
            <template:placeholder name="endtime"><dt>Ende</dt><dd>{ENDTIME}</dd></template:placeholder>
            <template:placeholder name="place"><dt>Ort</dt><dd>{PLACE}</dd></template:placeholder>
            <template:placeholder name="intern"><dt>Intern</dt><dd>Ja</dd></template:placeholder>
         </dl>
      </div>
 
welchen Aufwand es generiert
Die Methoden zu kopieren ist für mich kein Aufwand - sie zu pflegen könnte schon eher ein Problem sein.

Mal ganz gewagt:
Man könnte sich auch einigen, das Placeholder grundsätzlich ein Feature jeder Taglib sind, dann könnten die Methoden in Document eingebaut werden (durch mit 1.17 einheitlichem Klassennamen für PlaceHolderTag's kein Problem mehr). Eine schlechtere Performance gibt es durch das Existieren der Methoden in Document doch nicht, oder? In BaseDocumentController ließen sich dann auch die Methoden von Document benutzen. So gäbe es keinen doppelten Code.
Irgendwie gefällt mir das Feature immer weniger...
Finde ich sehr schade - mir gefällt es sehr gut und im aktuellen Projekt ist es schon fest eingeplant... :shock: :roll:

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von dr.e. » 04.01.2013, 08:35:50

Hallo Jan,
Finde ich sehr schade - mir gefällt es sehr gut und im aktuellen Projekt ist es schon fest eingeplant... :shock: :roll:
Ich sag ja nicht, dass ich das Feature nicht unterstütze, sondern ich bin einfach mit der Lösung noch nicht zufrieden. Sofern das so ist, werde ich solange weiter diskutieren wollen, bis ich der Meinung bin eine optimale Lösung gefunden zu haben. :) Sorry, wenn das falsch rübergekommen ist.
Mal ganz gewagt:
Man könnte sich auch einigen, das Placeholder grundsätzlich ein Feature jeder Taglib sind, dann könnten die Methoden in Document eingebaut werden (durch mit 1.17 einheitlichem Klassennamen für PlaceHolderTag's kein Problem mehr). Eine schlechtere Performance gibt es durch das Existieren der Methoden in Document doch nicht, oder? In BaseDocumentController ließen sich dann auch die Methoden von Document benutzen. So gäbe es keinen doppelten Code.
Das wiederum finde ich einen guten Ansatz. Ich denke nochmal in Ruhe drüber nach, wie dein Anwendungsfall damit sauber abgebildet werden kann.
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von jwlighting » 04.01.2013, 11:45:10

Ich denke nochmal in Ruhe drüber nach, wie dein Anwendungsfall damit sauber abgebildet werden kann.
Im Prinzip brauchen wir die Methoden aus dem BaseDocumentController nur in Document umzulagern und entsprechend anzupassen.
Die eigentliche StringPlaceHolder-Funktionalität liegt ja in PlaceHolderTag.

Damit wären die "Placeholder-Befüll-Methoden" dann auch in jeder Taglib-Klasse verfügbar - und ich kann ein mittels Page::loadDesign() geladenes Template ohne des Zwang eines DocCon befüllen.
Das würde auch einige Taglibs schlanker machen, die ihrerseits ein Template verwenden (z.B. <sms:nav />)

Im BaseDocumentController bräuchte man nur noch Methoden die an BaseDocumentController::__Document durchreichen.
Damit gibt es nur noch einen Ort, an dem die Methoden implementiert sind.

LG :)

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von dr.e. » 06.01.2013, 16:38:45

Hallo Jan,

ich habe mir deinen Anwendungsfall und den bisherigen Code dazu nochmals genauer angesehen. Aus meiner Sicht gibt es folgende Lösungsmöglichkeiten:
  • Punk 1 mit Boardmitteln:
    Implementierung einer Methode im BaseDocumentController (oder einem davon abgeleiteten) um die dynamische Ersetzung zu realisieren. Hierzu schreibst du im Controller statt einem

    Code: Alles auswählen

    $this->setPlaceHolder('anchor', '...'); 
    einfach ein

    Code: Alles auswählen

    $this->setPlaceHolder('anchor', $this->replaceStringPlaceHolder('...', '...')); 
    Damit wird die Logik zwar im Controller abgebildet wenn du die Inhalte jedoch in ein <html:template /> auslagerst, ist kein HTML-Code mehr im Controller vorhanden.
  • Punkt 2 mit Boardmitteln:
    Die beschriebene Liste mit einem Template abzubilden wirft exakt die Frage auf, wie nicht notwendige Einträge ausgeblendet werden können. Betrachtest du den Anwendungsfall umgekehrt - sprich wie schaffst du es nur diejenigen Einträge anzuzeigen, die auch vorhanden sind - kannst du das Ganze IMHO einfacher lösen. Hier bieten sich der Iterator oder die Htmllist-Extension an. Dort kannst du im Controller eine Liste an Hand der Informationen der vorhandenen Einträge aufbauen und die Gestaltung/das Aussehen der Inhalte im Template definieren.
Aus den beiden obigen Lösungen heraus könnte nun argumentiert werden, dass das Feature per se garnicht notwendig ist zu implementieren - sofern das Problem mit der "richtigen" Lösung belegt wird.

Für Punkt 2 sehe ich diese Argumentation definitiv zu treffen, da du ein Problem beschreibst, das mit Platzhalter nicht sauber gelöst ist sondern. Platzhalter per se sind dazu gedacht Inhalte aufzunehmen und nicht kennt daher fachlich keine Sichtbarkeit oder Bedingung einer Ausgabe.

Punkt 1 ist hinsichtlich der IDE ein absolut nachvollziehbarer Punkt. Ich habe mir hierzu nochmals den kompletten Thread durchgelesen und sowohl aus Einfachheits- als auch aus Konsistenz-Gründen schlage ich vor die Implementierung als Ersetzung direkt im Document-Controller ohne PlaceHolderTag zu implementieren. Wie schon von dir gepostet könnte die Methode BaseDocumentController::setStringPlaceholder() eine direkte String-Ersetzung im Inhalt des aktuellen Dokuments vornehmen. Dein Beispiel-Code:

Code: Alles auswählen

// in html_taglib_placeholder
public function setStringPlaceholder($key, $value){
   $content = $this->getContent();
   $replacedString = '{' . strtoupper($key) . '}';

   $this->setContent(
      str_replace($replacedString, $value, $content)
   );
} 
Nachteil ist, dass dies dann eine "echte" String-Ersetzung ist und nicht dem Tag-Modell folgt. Vorteil ist die schnelle Implementierung und vor allem die einfache Handhabung. Alles andere scheint mir einfach zu umständlich und kompliziert.

Die Anwendunger folgt dann im Template statt per

Code: Alles auswählen

<template:placeholder name="anchor"><a class="anchor" id="{ALIAS}"></a></template:placeholder>
wie folgt:

Code: Alles auswählen

<a class="anchor" id="{anchor}"></a>
Das spart Markup (=besser Performance) und damit Tip-Arbeit und ist für den Punkt 1 meiner Ansicht nach eine gute Lösung hinsichtlich der diskutierten Parameter.

Einverstanden?
Viele Grüße,
Christian

Benutzeravatar
jwlighting
Beiträge: 466
Registriert: 14.07.2010, 14:23:58
Wohnort: LK Oldenburg
Kontaktdaten:

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von jwlighting » 08.01.2013, 20:11:56

Hallo Christian,

erst Mal vielen Dank, dass du dich damit nochmal so tiefgehend beschäftigt hast. ;)
Damit wird die Logik zwar im Controller abgebildet wenn du die Inhalte jedoch in ein <html:template /> auslagerst, ist kein HTML-Code mehr im Controller vorhanden.
:? Das verstehe ich jetzt nicht:
1: Wie ersetze ich damit StringPlaceHolder, die innerhalb einer anderen Taglib wie einem <html:template> oder <html:form> enthalten sind? Dazu müsste ich ja alle Kindknoten des aktuellen Dokuments auch durchsuchen...
Das ist doch wieder genau die selbe Problematik, die wir vor wenigen Beiträgen festgestellt haben. Die Ersetzung von PlaceHoldern (egal ob String oder Tag) nur im DocCon zu implementieren macht in meinen Augen keinen Sinn - sorry. :|
2: Was hat das alles mit "HTML-Code im Controller" zu tun? Und welche Inhalte lagre ich nach <html:template> aus und mit welchem Sinn?
Punkt 2 mit Boardmitteln [...]
Vielen Dank für die Tipps. Das ich den Placeholder hier nicht ganz sinngemäß verwende, war mir irgendwie schon klar. In dem Moment wusste ich mir aber auch nicht besser zu helfen. ;)
[...] schlage ich vor die Implementierung als Ersetzung direkt im Document-Controller ohne PlaceHolderTag zu implementieren. [...] Nachteil ist, dass dies dann eine "echte" String-Ersetzung ist und nicht dem Tag-Modell folgt.
Ich sehe da noch wesentlich mehr Nachteile, wenn auch der von dir genannte Vorteil der besseren Performance schon ein wichtiger Punkt ist:
1: Es macht den PlaceHolderTag praktisch überflüssig, da er funktionell dem StringPlaceHolder gleich wäre.
2: Du kannst den String nur einmal ersetzen. Danach ist der StringPlaceHolder nicht mehr vorhanden und kann nicht mehr korrigiert/verändert werden.
3: Das Feature "StringPlaceHolder" ist fest an einen DocCon gebunden und damit nicht flexibel einsetzbar.
4: Wie oben schon geschrieben: Es lässt sich nicht/schwer auf den Content von Taglibs innerhalb des Documents anwenden.
Einverstanden?
Du ahnst es schon: Ehrlich gesagt überhaupt nicht. Um mich zu überzeugen fehlt mir besonders das Verständnis, weshalb du den in den letzten Beiträgen und in meinen Augen sehr sinnvollen, wenn auch steinigen Weg auf einmal unbegründet verwirfst. :cry:
Wenn wir folgenden Weg gehen, dann haben wir bis auf Tipparbeit und etwas mehr Arbeit für den XmlParser eigentlich nur gewonnen:
(Tut mir Leid, das ich das jetzt nochmal ausbreite... )
  1. Document bekommt eine Methode...
    • getPlaceHolder() die alle Placeholder eines Namens liefert...
    • setPlaceHolder() die alle Placeholder eines Namens setzt und dabei getPlaceHolder() verwenden kann und ...
    • setStringPlaceHolders() die über alle Ergebnisse von getPlaceHolder() für einen Namen iteriert und jeweils setStringPlaceHolder() mit einem Key-Value-Paar aufruft.
    Damit ist diese Funktion in allen Taglibs verfügbar.
    Vorteil: Ich kann in der Logik einer Taglib Placeholder verwenden, ohne über new Page() mit Template-Datei und Controller arbeiten zu müssen. Damit ist die Funktion der Taglib dann auch wirklich in der Taglib-Klasse implementiert und nicht in externen Controllern und über mehrere Dateien verstreut.
  2. PlaceHolderTag bekommt die bekannte Implementierung setStringPlaceHolder(), wobei erst beim Transformieren wirklich ersetzt wird.
  3. BaseDocumentController ruft in setPlaceHolder() nur noch $this->__Document->setPlaceHolder() auf, ebenso für setStringPlaceHolder() und getPlaceHolder(). Damit ist diese Funktionalität nur noch an einer Stelle zu pflegen, und nicht mehr in BaseDocumentController, <html:template>, <html:form>, ...
Dabei bleibt die Kompatibilität zu bisherigen eigenen taglib-Implementierungen im Übrigen erhalten!

Sag mir, was dir daran nicht gefällt und mein Einverständnis zu deinem Vorschlag wesentlich greifbarer.

LG :)
Jan

Menschen irren - Politiker sind Menschen.
Für den Norddeutschen ist 1kW = 2 Pfund Schlick.

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

Re: Unterstützung " und ' als Attribut-Abgrenzung

Beitrag von dr.e. » 10.01.2013, 11:29:23

Hallo Jan,

ich wollte mich kurz melden, nicht dass der Eindruck entsteht, dass ich das Thema nicht weiter bearbeiten möchte. Ich bin gerade an der Logger-Story und weiteren Config- und Cache-Provider-Implementierungen für APC und schaue mir das anschließend das Thema nochmal im Gesamten und in Ruhe an.
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast