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.
Benutzeravatar
dr.e.
Administrator
Beiträge: 4555
Registriert: 04.11.2007, 16:13:53

Re: a und img taglib

Beitrag von dr.e. » 03.08.2011, 14:27:02

Das ist sicher auch möglich. Daher mein Vorchlag: Werner updated seinen Code und ich integriere das in's APF für 1.14.
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von welworx » 05.08.2011, 14:11:04

ok ich werd den "aufbau" schreiben ;)

Ist sicher die flexiblere Variante, vorallem auch schöner aufgeräumt ;)

EDIT: Wie gefällt euch das:

Code: Alles auswählen

import('tools::link::taglib', 'html_taglib_link');

/*
 * Taglib erzeugt einen html Link basierend auf den übermittelten Parametern und 
 * verwendet dazu den html_taglib_link.
 * 
 * @author: Werner Liemberger wpublicmail [at] gmail DOT com
 * @version 0.1, 6.8.2011
 */
class html_taglib_a extends html_taglib_link {

    protected $attributeWhiteList = array('id', 'style', 'class', 'onabort',
        'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover',
        'onmousemove', 'onmouseout', 'onkeypress', 'onkeydown', 'onkeyup',
        'tabindex', 'dir', 'accesskey', 'title', 'charset', 'coords',
        'href', 'hreflang', 'name', 'rel', 'rev', 'shape', 'target',
        'xml:lang', 'onblur');

    function onParseTime() {
        /*
         * Alle Attribute die auch in der whitelist sind dort eintragen und dann leeren,
         * damit sie nicht im url eingebaut werden.
         */

        foreach ($this->attributeWhiteList as $elem) {
            $attr = $this->getAttribute($elem, null);
            if ($attr != null) {
                $this->attributeWhiteList[$elem] = $attr;
                $this->setAttribute($attr, null);
            }
        }

        $this->attributeWhiteList['href'] = parent::transform();
        if ($this->attributeWhiteList['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() {
        /*
         * Wenn kein Content vorhanden ist, der den anzuklickenden Text darstellt,
         * wird versucht den title zu setzten. Wenn dieser ebenfalls fehlt, wird eine 
         * Fehlermeldung erzeugt.
         */
        if ($this->__Content == '') {
            $this->__Content = $this->attributeWhiteList['title'];
        }
        if ($this->__Content == null) {
            throw new Exception('Es ist kein Text vorhanden der angeklickt werden kann.');
        }

        /*
         * Fügt bei vorhandensein des aktuellen Links im Url die CSS Klasse active hinzu.
         */
        if (substr_count($_SERVER['REQUEST_URI'], $this->attributeWhiteList['href']) > 0) {
            $this->setAttribute('class', $this->attributeWhiteList['class'] . ' active');
        }
        return '<a ' . $this->getAttributesAsString($this->attributeWhiteList) . '>' . $this->__Content . '</a>';
    }
} 

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

Re: a und img taglib

Beitrag von welworx » 23.08.2011, 23:32:05

hab beim durchsehen der Beiträge gesehen dass ich da noch keine antwort hab ;)

daher: push push ;)

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

Re: a und img taglib

Beitrag von dr.e. » 23.08.2011, 23:54:28

Hi Werner,

die Änderungen sind unter http://adventurephpfra.svn.sourceforge. ... ml/taglib/ eingebaut. Kannst du bitte noch eine Übersetzung der deutschen Kommentare liefern? ;)
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von welworx » 25.08.2011, 11:26:54

bitteschön:

Code: Alles auswählen

<?php

import('tools::link::taglib', 'html_taglib_link');

/*
 * 
 * This taglib generates a html link tag based on the html_taglib_link taglib.
 * 
 * @author: Werner Liemberger wpublicmail [at] gmail DOT com
 * @version 0.1, 6.8.2011
 */
class html_taglib_a extends html_taglib_link {

    protected $attributeWhiteList = array('id', 'style', 'class', 'onabort',
        'onclick', 'ondblclick', 'onmousedown', 'onmouseup', 'onmouseover',
        'onmousemove', 'onmouseout', 'onkeypress', 'onkeydown', 'onkeyup',
        'tabindex', 'dir', 'accesskey', 'title', 'charset', 'coords',
        'href', 'hreflang', 'name', 'rel', 'rev', 'shape', 'target',
        'xml:lang', 'onblur');

    function onParseTime() {
        /*
         * Move all vales from parameters which are in the whitelist into this array
         * and remove them from the attribute array, because they should not be part oft the url.
         */

        foreach ($this->attributeWhiteList as $elem) {
            $attr = $this->getAttribute($elem, null);
            if ($attr != null) {
                $this->attributeWhiteList[$elem] = $attr;
                $this->setAttribute($attr, null);
            }
        }

        $this->attributeWhiteList['href'] = parent::transform();
        if ($this->attributeWhiteList['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() {
        /*
         * If no Content is set, this taglib tries to set the title as content. 
         * If this is also missing it throws an Exception. This exception is needed,
         * because otherwise you will get an invalid html.
         */
        if ($this->__Content == '') {
            $this->__Content = $this->attributeWhiteList['title'];
        }
        if ($this->__Content == null) {
            throw new Exception('Es ist kein Text vorhanden der angeklickt werden kann.');
        }

        /*
         * if the current link is active, this taglib adds the css class active.
         */
        if (substr_count($_SERVER['REQUEST_URI'], $this->attributeWhiteList['href']) > 0) {
            $this->setAttribute('class', $this->attributeWhiteList['class'] . ' active');
        }
        return '<a ' . $this->getAttributesAsString($this->attributeWhiteList) . '>' . $this->__Content . '</a>';
    }
}
?>
Mir würde es persönlich besser gefallen wenn der taglib aber unter tools::link::taglib liegen würde, da ich das irgendwie logischer finde. Schließlich verwendet er ja auch den dort liegenden Linkmanager.

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

Re: a und img taglib

Beitrag von dr.e. » 25.08.2011, 22:38:52

Hallo Werner,

habe den Code in 1.15 integriert und dabei noch ein wenig optimiert. Bitte um Test und Feedback. Den Namespace habe ich auftools::link::taglib geändert.
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von welworx » 26.08.2011, 01:23:32

hab grad nen fehler entdeckt.

und zwar müsseln die ganzen bezeichnungen in der whitelist als indices vorliegen.

Code: Alles auswählen

  protected $attributeWhiteList = array('id'=>null, 'style'=>null, 'class'=>null, 'onabort'=>null,
        'onclick'=>null, 'ondblclick'=>null, 'onmousedown'=>null, 'onmouseup'=>null, 'onmouseover'=>null,
        'onmousemove'=>null, 'onmouseout'=>null, 'onkeypress'=>null, 'onkeydown'=>null, 'onkeyup'=>null,
        'tabindex'=>null, 'dir'=>null, 'accesskey'=>null, 'title'=>null, 'charset'=>null, 'coords'=>null,
        'href'=>null, 'hreflang'=>null, 'name'=>null, 'rel'=>null, 'rev'=>null, 'shape'=>null, 'target'=>null,
        'xml:lang'=>null, 'onblur'=>null);
dann muss man die erste schleife im onParseTime
in folgendes ändern:

Code: Alles auswählen

  foreach ($this->attributeWhiteList as $key=>$elem) {
            $attr = $this->getAttribute($key, null);
            if ($attr != null) {
                $this->attributeWhiteList[$key] = $attr;
                $this->setAttribute($key, null);
            }
        }
und zu guter letzt hab ich noch

Code: Alles auswählen

foreach($this->attributeWhiteList as $key=>$elem){
            if($elem===null){
                unset($this->attributeWhiteList[$key]);
            }
        } 
eingebettet, damit die leeren attribute nicht den tag verunstalten.

alles in allem:

Code: Alles auswählen

<?php

import('tools::link::taglib', 'html_taglib_link');

/*
 * 
 * This taglib generates a html link tag based on the html_taglib_link taglib.
 * 
 * @author: Werner Liemberger wpublicmail [at] gmail DOT com
 * @version 0.1, 6.8.2011
 */

class html_taglib_a extends html_taglib_link {

    protected $attributeWhiteList = array('id'=>null, 'style'=>null, 'class'=>null, 'onabort'=>null,
        'onclick'=>null, 'ondblclick'=>null, 'onmousedown'=>null, 'onmouseup'=>null, 'onmouseover'=>null,
        'onmousemove'=>null, 'onmouseout'=>null, 'onkeypress'=>null, 'onkeydown'=>null, 'onkeyup'=>null,
        'tabindex'=>null, 'dir'=>null, 'accesskey'=>null, 'title'=>null, 'charset'=>null, 'coords'=>null,
        'href'=>null, 'hreflang'=>null, 'name'=>null, 'rel'=>null, 'rev'=>null, 'shape'=>null, 'target'=>null,
        'xml:lang'=>null, 'onblur'=>null);

    function onParseTime() {
        /*
         * Move all vales from parameters which are in the whitelist into this array
         * and remove them from the attribute array, because they should not be part oft the url.
         */

        foreach ($this->attributeWhiteList as $key=>$elem) {
            $attr = $this->getAttribute($key, null);
            if ($attr != null) {
                $this->attributeWhiteList[$key] = $attr;
                $this->setAttribute($key, null);
            }
        }

        $this->attributeWhiteList['href'] = parent::transform();
        if ($this->attributeWhiteList['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() {
        /*
         * If no Content is set, this taglib tries to set the title as content. 
         * If this is also missing it throws an Exception. This exception is needed,
         * because otherwise you will get an invalid html.
         */
        if ($this->__Content == '') {
            $this->__Content = $this->attributeWhiteList['title'];
        }
        if ($this->__Content == null) {
            throw new Exception('Es ist kein Text vorhanden der angeklickt werden kann.');
        }

        /*
         * if the current link is active, this taglib adds the css class active.
         */
        if (!isset($this->attributeWhiteList['href'])) {
            return '';
        }
        if ( substr_count($_SERVER['REQUEST_URI'], $this->attributeWhiteList['href']) > 0) {
            $this->setAttribute('class', $this->attributeWhiteList['class'] . ' active');
        }
        foreach($this->attributeWhiteList as $key=>$elem){
            if($elem===null){
                unset($this->attributeWhiteList[$key]);
            }
        }
        
        return '<a ' . $this->getAttributesAsString($this->attributeWhiteList) . '>' . $this->__Content . '</a>';
    }

}

?>

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

Re: a und img taglib

Beitrag von dr.e. » 26.08.2011, 17:39:38

Vielen Dank. Integriere ich am Wochenende.
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von dr.e. » 27.08.2011, 11:15:52

Hallo Werner,

der Code ist in 1.15 aktualisiert. Ich habe meine Änderungen nachgezogen, da dein Code-Block noch den alten Stand enthielt.

Was nun noch fehlt ist ein Text für die Dokumentation. Ich denke, hier bietet sich ein eigenes Kapitel für die Link-Generierung in Templates an. In diesem sollte auf die von dir und Ralf erstellen Taglibs eingegangen werden und die Möglichkeit, im Controller LInks zu generieren und per Platzhalter in ein Template zu packen. Kannst du dir vorstellen hierfür nach Vorlage eine Dokumentation zu schreiben?
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von welworx » 27.08.2011, 15:10:54

danke fürs einfügen.

Kann gerne mal damit anfangen, werd das aber am besten im wiki machen.

Würde vorschlagen das ganze mal im deutschen zu schreiben und bei zeit zu übersetzten. .. bzw kann das auch gern wer anderer machen.

LG

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

Re: a und img taglib

Beitrag von dr.e. » 27.08.2011, 18:44:13

Alles klar! Sag Bescheid, wenn du fertig bist, dann integriere ich das in die aktuelle Doku und übersetzte den Text.
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von welworx » 29.08.2011, 15:00:29

ok hab mich umentschieden und das doch nicht im wiki gemacht ..

was sagst du zu dem? Passt das so?
Der Taglib html:link wurde geschaffen um in einem Template möglichst einfach einen Link basierend auf dem aktuellen Link Schema erstellen zu können.

Patameter:

href - Sollte der Parameter href übermittelt worden sein, wird dieser als Ausgangsurl verwendet, ansonsten der aktuelle.
queryoption=set|merge - Jener Parameter der entweder bestimmt ob die mergeQuery oder setQuery Option des Linkgenerators aufgerufen werden soll.

Alle weiteren Parameter die übermittelt werden werden in den Link eingebaut.

Der Taglib liefert einen String mit dem aktuellen Link zurück.


Der Taglib html:a ist einer Erweiterung des html:link und ermöglicht das Erstellen eines html link Tag. All jene Parameter die nicht als Standartattribute für den HTML Tag vorgesehen sind (zb id, class, title usw) werden an den html:link Tag weitergereicht. Die übrigen werden direkt in den auszugebenden String eingesetzt. Als besonderes Feature wurde auch implementiert, dass die klasse active gesetzt wird, sobald der gesetzte Link im aktuellen URL enthalten ist.
Im Normalfall wird der Content des Taglibs als Content des a Tags eingebaut. Sollte dieser jedoch nicht vorhanden sein, wird versucht den title zu verwenden. Ist dieser ebenfalls nicht vorhanden, wird eine Fehlermeldung erzeugt um keine leeren unvollständigen a Tags zu produzieren.

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

Re: a und img taglib

Beitrag von dr.e. » 29.08.2011, 17:02:23

Hi,

der Text ist schon mal gut. Wichtig sind jedoch noch
  • Tag-Definition (optionale und benötigte Attribute)
  • Anwendungs-Beispiel mit erzeugetr Ausgabe.
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von welworx » 29.08.2011, 17:56:01

sowas in der art?

html:link
Anwendungsbeispiel:
<html:link seite="test" class="big" />

Wenn der Taglib unter der Domain: http://www.example.com und mit dem DefaultLinkSheme verwendet wird, dann liefert er folgendes:
http://www.example.com?seite=test&class=big
html:a
Anwendungsbeispiel:
<html:a seite="test" class="big">LINK</html:a>

Wenn der Taglib unter der Domain: http://www.example.com und mit dem DefaultLinkSheme verwendet wird, dann liefert er folgendes:
<a href="www.example.com?seite=test" class="big" >LINK</a>

Sobald der Link angeklickt wurde (sprich man sich auf der Seite befindet) sieht das Ergebnis so aus (man beachte den Inhalt von class):
<a href="www.example.com?seite=test" class="big active" >LINK</a>
Parameter:
Der Inhalt folgender Parameter wird in den Tag eingebaut. Alle anderen werden an den Linkgenerator weitergereicht.
  • queryoption=set|merge - Jener Parameter der entweder bestimmt ob die mergeQuery oder setQuery Option des Linkgenerators aufgerufen werden soll.
  • href - Sollte der Parameter href übermittelt worden sein, wird dieser als Ausgangsurl verwendet, ansonsten der aktuelle.
  • id
  • style
  • class
  • onabort
  • onclick
  • ondblclick
  • onmousedown
  • onmouseup
  • onmouseover
  • onmousemove
  • onmouseout
  • onkeypress
  • onkeydown
  • onkeyup
  • tabindex
  • dir
  • accesskey
  • title
  • charset
  • coords
  • hreflang
  • name
  • rel
  • rev
  • shape
  • target
  • xml:lang
  • onblur

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

Re: a und img taglib

Beitrag von dr.e. » 30.08.2011, 00:15:25

Schon mal nicht schlecht. :) Nun brauchen wir das ganze noch als formatierten HTML-Quelltext mit APF-Doku-Seiten-Markup. Ein Beispiel findest du unter http://adventurephpfra.svn.sourceforge. ... iew=markup.
Viele Grüße,
Christian

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast