a und img taglib

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.
welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

a und img taglib

Beitrag von welworx » 04.06.2011, 15:28:21

Hallo!

Was haltet ihr davon einen link taglib ins apf aufzunehmen?
Da jeder von uns des öfteren links verwendet wäre doch ein genereller Link taglib der dann für die eigenen Sachen abgeleitet werden kann nicht verkehrt. Oder?

Code: Alles auswählen

class html_taglib_a extends Document {

    protected $attributeWhiteList = array('id', 'style', 'class', 'onabort', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout', 'onkeypress', 'onkeydown', 'onkeyup');

    public function __construct() {
        $this->attributeWhiteList[] = 'tabindex';
        $this->attributeWhiteList[] = 'dir';
        $this->attributeWhiteList[] = 'accesskey';
        $this->attributeWhiteList[] = 'title';
        $this->attributeWhiteList[] = 'charset';
        $this->attributeWhiteList[] = 'coords';
        $this->attributeWhiteList[] = 'href';
        $this->attributeWhiteList[] = 'hreflang';
        $this->attributeWhiteList[] = 'name';
        $this->attributeWhiteList[] = 'rel';
        $this->attributeWhiteList[] = 'rev';
        $this->attributeWhiteList[] = 'shape';
        $this->attributeWhiteList[] = 'target';
        $this->attributeWhiteList[] = 'xml:lang';
        $this->attributeWhiteList[] = 'onblur';
    }

    function onParseTime() {

        if ($this->getAttribute('href') === null) {
            throw new InvalidArgumentException('[html_taglib_a::onParseTime()] The attribute "href" is missing. Please provide the destination!', E_USER_ERROR);
            exit(1);
        }
    }

    function transform() {
        return '<a ' . $this->getAttributesAsString($this->getAttributes(), $this->attributeWhiteList) . '>' . $this->__Content . '</a>';
    }
} 
Genauso würde ich dann auch einen für Bilder zur Verfügung stellen.

Code: Alles auswählen

class html_taglib_img extends Document {

    protected $attributeWhiteList = array('id', 'style', 'class', 'onabort', 'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover', 'onmousemove', 'onmouseout', 'onkeypress', 'onkeydown', 'onkeyup');

    public function __construct() {
        $this->attributeWhiteList[] = 'src';
        $this->attributeWhiteList[] = 'alt';
        $this->attributeWhiteList[] = 'title';

        $this->attributeWhiteList[] = 'name';
        $this->attributeWhiteList[] = 'longdesc';

        $this->attributeWhiteList[] = 'height';
        $this->attributeWhiteList[] = 'width';
        $this->attributeWhiteList[] = 'border';

        $this->attributeWhiteList[] = 'ismap';
        $this->attributeWhiteList[] = 'usermap';
        $this->attributeWhiteList[] = 'dir';
        $this->attributeWhiteList[] = 'lang';
        $this->attributeWhiteList[] = 'xml:lang';
    }

    function onParseTime() {

        if ($this->getAttribute('src') === null) {
            throw new InvalidArgumentException('[html_taglib_img::onParseTime()] The attribute "src" is missing. Please provide the image source!', E_USER_ERROR);
            exit(1);
        }

        if ($this->getAttribute('alt') === null) {
            throw new InvalidArgumentException('[html_taglib_img::onParseTime()] The attribute "alt" is missing. Please provide the image alternative text!', E_USER_ERROR);
            exit(1);
        }
    }

    function transform() {
        return '<img ' . $this->getAttributesAsString($this->getAttributes(), $this->attributeWhiteList) . '/>';
    }
} 


welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: a und img taglib

Beitrag von welworx » 04.06.2011, 15:41:30

man könnte darauf recht einfach taglibs aufbauen, die gewisse sachen setzten. zb kann man einen taglib schreiben, der auf dem link taglib aufbaut, und sich den link aus der applikation holt. Dennoch kann man einfach die class oder id oder was auch immer eintragen.

Oder man könnte einen taglib bauen, der aus einem gewissem ordner je nach sprach das richtige bild holt und als src setzt so wie die sprache.

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

Re: a und img taglib

Beitrag von Screeze » 04.06.2011, 15:47:50

Hmm.
Da die Taglib imho selbst keinen Mehrwert bietet, halte ich eine integration in der Form für eher weniger sinnvoll. Die Basis ist nicht gerade umfangreich und in einer entsprechenden "speziellen" Taglib recht schnell implementiert.
Wenn wir jedoch ein paar Standartfeatures anbieten könnten direkt, sähe das anders aus.

Beispielsweise könnte ich mir vorstellen, dass die Taglib standartmäßig prüft ob bereits ein "http(s)://" vorhanden ist, und wenn nicht, sie aus der Apllication (config?) die URL des Projektes bezieht und vorneanstellt. Somit könnte im Template ein Link wie

Code: Alles auswählen

<html:a href="(/)subpage/id">bla</html:a> 
generiert werden, der automatisch zu

Code: Alles auswählen

http://example.com/subpage/id
umgeschrieben wird, womit ein Domainumzug nur durch Änderung der Einstellungen zu bewerkstelligen wäre, oder z.B. verschiedene Domains für verschiedene Sprachen im selben Projekt benutzbar wären, wobei die entsprechende Sprachdomain automatisch verwendet werden würde.

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: a und img taglib

Beitrag von welworx » 04.06.2011, 15:50:47

wäre natürlich auch ein cooles feature :)

Was hältst du von der idee eine art debug modus zu machen, der automatisch prüft ob alle gesetzten links erreichbar sind?

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

Re: a und img taglib

Beitrag von Screeze » 04.06.2011, 15:54:59

Klingt interessant, sofern das ohne Ressourcen zu fressen per default abgeschaltet ist, auch praktikabel denke ich.
Letztes Wort hat aber Christian wie immer ;)

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: a und img taglib

Beitrag von welworx » 04.06.2011, 16:04:35

Wie könnte man sowas umsetzten?

Das mit der config fände ich auch echt praktisch!

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

Re: a und img taglib

Beitrag von Screeze » 04.06.2011, 16:12:20

Den Debugmodus aktivieren könnte man global z.b. durch setzen eines Registry wertes in der Bootstrap Datei, oder durch eine Konfigurationsdatei.
Das prüfen ob die Links korrekt sind wird da schon schwieriger. Am besten eignen würde sich da CURL, damit bekommt man gut die Fehlercodes wenn ich mich nicht Irre. Da das aber nicht auf allen Servern installiert ist müssen wir vielleicht schauen ob das per Standartfunktionen von PHP nachbaubar ist.

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

Re: a und img taglib

Beitrag von dr.e. » 04.06.2011, 16:45:51

Hallo ihr beiden,

ich persönlich sehe weder in der ersten noch in der folgend diskutierten Idee einen Mehrwert. Eine solche Taglib trägt nichts besonderes zur Automatisierung bei kostet aber Resourcen. In einer konkreten Applikation hingegen macht das schon wieder Sinn - dann allerdings ist das nicht generisch.

Beispiel: in der APF-Seite rendere ich die Links alle mit dem <int:link />-Tag. Dieses gibt es in folgenden Ausprägungen:

Code: Alles auswählen

<int:link pageid="012" />
<int:link pageid="012" lang="en"/>
<int:link pageid="012" anchor="Chapter-1-Einleitung" />
<int:link pageid="012" anchor="Chapter-1-Einleitung">Link-Text</int:link>
Der Tag selbst besitzt damit folgende Signatur:

Code: Alles auswählen

<int:link pageid="" [anchor=""] [lang=""] />
<int:link pageid="" [anchor=""] [lang=""]>...</int:link>
Mehrwert hier:
  • Links werden nach einem standardisierten Schema generiert (RewriteLinkScheme).
  • Änderung des URL-Layouts für den Seiten-Parameter ist ein einmaliger, zentraler Eingriff.
  • URL-Inhalte werden zentral aus der Datenbank ausgelesen in der ein Index gehalten wird.
  • Sprachwechsel möglich.
  • Standard- und Custom-Link-Texte möglich. Standard wird aus Datenbank gelesen.
Das alles kannst du im Standard nicht bieten, denn einfache Links sind nun einfach sehr begrenzt in ihrem Wesen. Du hast ein bischen URL, ein bischen Text und idealerweise Standard-Formatierung. Falls nicht hast du bei einem semantischen Markup jedoch HTML-Elemente um die a- bzw. img-Tags herum, die du zur kaskadierten Formatierung nutzen kannst.

Die Features
  • Link-Prüfung
  • Dynamisch zwischen HTTP-/HTTPS-Modus umschalten
sind also mehr oder weniger Applikationsspezifische Themen, die man so nur mit viel Aufwand generisch abfassen kann.

Ich halte es also gerade im Hinblick auf die generischen URL-Generierungs-Mechanismen für sinnvoller die hierfür draufgehende Performance für konkrete Features zu nutzen.

@Werner: wie ist denn deine Applikation aufgebaut in der so ein Tag/solche Tags benötigt werden? Gib uns mal ein Beispiel.
Viele Grüße,
Christian

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: a und img taglib

Beitrag von welworx » 04.06.2011, 16:59:58

ich hatte den z.B. den Fall, dass ich eine navigation geschrieben hab, bei der je nach sprache entweder das englische bild oder das deutsche bild angezeigt werden musste. Man hat dann in dem taglib einfach den bildnamen eingegeben und anschließend wurde dynamisch die sprache mit einem unterstrich davor angehängt. Ebenfalls war der pfad zur datei auch schon darin enthalten.

Klar ist das alles keine große hexerei, aber wenn man da einfach nur eine bestehende klasse erweitert gehts noch schneller und bleibt übersichtlicher. Außerdem soll man ja keinen code wiederholen .. oder ;)?

Und so sehr performance lastig kann das ganze ja auch nicht sein. Oder?

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

Re: a und img taglib

Beitrag von dr.e. » 04.06.2011, 17:07:40

Hi Werner,

der beschriebene Anwendungsfall scheint es mir auch Wert eine Taglib zu verfassen. Daumenregel war bisher immer:
Wenn du mit einem Document-Controller nicht mehr weiter kommst oder die Funktion nicht sauber wiederverwenden kannst, schreibe eine Taglib.
Das scheint mir bei einfachen <a />- und <img />-Tags nicht zutreffend. Für deinen Anwendungsfall besitzt eine Taglib natürlich schon eine Rechtfertigung.
Klar ist das alles keine große hexerei, aber wenn man da einfach nur eine bestehende klasse erweitert gehts noch schneller und bleibt übersichtlicher. Außerdem soll man ja keinen code wiederholen .. oder ;)?
Die Document-Klasse ist doch auch eine bestehende Klasse, die du als Tag-Schreiber erweiterst. Diese besitzt Funktionen zum Parsen des Inhalts, etc. Damit schaffst du mit deiner Klasse einen Zweizeiler, den ich so in einer konkreten Tag-Klasse für deinen Anwendungsfall sowieso nicht verwenden kann, da onParseTime() und transform() wieder überschrieben werden müssen.
Was das Wiederholen angeht: HTML ist eine Auszeichnungs-Sprache und damit nicht zwangsläufig dem DRY-Prinzip unterworfen. ;)
Und so sehr performance lastig kann das ganze ja auch nicht sein. Oder?
Nein, das ist ein schwaches Argument, aber jeder zusätzliche Tag braucht Parse-Zeit und verbraucht Speicher. Bei einem solchen Tag ist das absolut irrelevant, bei komplexen Formularen vielleicht etwas relevanter.
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von Well » 04.06.2011, 21:53:00

Screeze hat geschrieben:Hmm.
Da die Taglib imho selbst keinen Mehrwert bietet, halte ich eine integration in der Form für eher weniger sinnvoll. Die Basis ist nicht gerade umfangreich und in einer entsprechenden "speziellen" Taglib recht schnell implementiert.
Wenn wir jedoch ein paar Standartfeatures anbieten könnten direkt, sähe das anders aus.

Beispielsweise könnte ich mir vorstellen, dass die Taglib standartmäßig prüft ob bereits ein "http(s)://" vorhanden ist, und wenn nicht, sie aus der Apllication (config?) die URL des Projektes bezieht und vorneanstellt. Somit könnte im Template ein Link wie

Code: Alles auswählen

<html:a href="(/)subpage/id">bla</html:a> 
generiert werden, der automatisch zu

Code: Alles auswählen

http://example.com/subpage/id
umgeschrieben wird, womit ein Domainumzug nur durch Änderung der Einstellungen zu bewerkstelligen wäre, oder z.B. verschiedene Domains für verschiedene Sprachen im selben Projekt benutzbar wären, wobei die entsprechende Sprachdomain automatisch verwendet werden würde.
Kennst du einen Browser, der das nicht von sich aus macht? Ich kenne keinen ...
... oder geht es dir dabei um etwas völlig anderes, das ich nicht erkannt habe?

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

Re: a und img taglib

Beitrag von Screeze » 04.06.2011, 21:58:38

Gutes Argument, aber ich bevorzuge die Urls immer mit Domain vornedran... Hab ich mir irgendwie so angewöhnt :D

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

Re: a und img taglib

Beitrag von dr.e. » 04.06.2011, 22:06:54

Das wäre eine Idee, jedoch kannst du das sehr einfach mit dem Meta-Tag
<base href="http://example.com" />
lösen. ;) Ich schlage vor: Werner macht einen Vorschlag und wir diskutieren das nochmal im Detail. Einverstanden?
Viele Grüße,
Christian

welworx
Beiträge: 620
Registriert: 27.09.2010, 19:29:44

Re: a und img taglib

Beitrag von welworx » 11.06.2011, 15:44:43

Mir ist vorhin ein weiters Feature eingefallen, das meines Erachtens ganz praktisch wäre.

Konkret dachte ich mir wäre es sehr praktisch, wenn man in den Taglib die möglichkeit integrieren würde, dass man einen parameternamen und seinen wert übergeben kann, aus denen anschließend mit dem Linkgenerator der entsprechende Link generiert wird. (Vorteil: die gleichen wie beim Linkgenerator :D)


Bringt es eigentlich irgend einen Vorteil (vorallem verglichen zu <base href="http://example.com" />), wenn man bei den Links gleich die Domain dazu schreibt? (schneller, sicherer oder was auch immer?)

Das Thema Debug Mode find ich noch immer interessant. Die große frage ist halt wie man das ganze umsetzt. Was haltet ihr von der idee, dass bei aktiviertem Debug mode einfach alle Links in eine Log datei geschrieben werden und man so leichter auf alle zugriff hat um sie zu analysieren?

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast