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.
Well
Beiträge: 263
Registriert: 25.10.2009, 11:00:19
Wohnort: Beuren
Kontaktdaten:

Re: a und img taglib

Beitrag von Well » 12.06.2011, 00:42:21

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 )
Quasi eine Taglib die den LinkGenerator nutzt? Halte ich für sinnvoll. :)
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?)
Ich denke kaum. Und wenn ist es so minimal, dass es nicht relevant sein sollte.
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?
Halte ich für unnötig bzw. sehe keinen Sinn dahintert. Wenn ein Fehler auftritt wird dieser ja, mit entsprechendem ErrorHandler, mit Klasse, Methode und ggf. Stacktrace geloggt ... Mir reicht das zum Debuggen. :)

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

Re: a und img taglib

Beitrag von welworx » 12.06.2011, 02:27:33

Mir ist noch was eingefallen was ich sehr praktisch finden würde. Und zwar dass falls der anklickbare link im $_SERVER['REQUEST_URI'] vorhanden ist, dass dann automatisch die Klasse 'active' gesetzt wird. Damit kann man leichter mittels css darauf reagieren und das im design einbauen, was vorallem dann bei unterseiten sehr interessant sein kann, da man so die eltern Seiten in einem Baummenü auch als aktiv gesetzt werden.

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

Re: a und img taglib

Beitrag von Screeze » 12.06.2011, 11:53:14

Mir ist noch was eingefallen was ich sehr praktisch finden würde. Und zwar dass falls der anklickbare link im $_SERVER['REQUEST_URI'] vorhanden ist, dass dann automatisch die Klasse 'active' gesetzt wird. Damit kann man leichter mittels css darauf reagieren und das im design einbauen, was vorallem dann bei unterseiten sehr interessant sein kann, da man so die eltern Seiten in einem Baummenü auch als aktiv gesetzt werden.
Das wiederum könnte richtig umgesetzt durchaus Sinn machen...

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

Re: a und img taglib

Beitrag von Screeze » 27.07.2011, 18:28:20

Unabhängig von diesem Thema hatte ich gerade das Problem, dass ich wegen einer einzigen Url, welche abhängig vom aktivem Layout generiert werden musste, extra einen documentcontroller gebraucht habe.

Daher hab ich mal fix diese taglib geschrieben, welche mithilfe des LinkGenerators eine Url nach aktuellem Schema erzeugt. Ich halte es für sinnvoll eine derartige Taglib in tools::html::taglib oder tools::link::taglib einzufügen.

Code: Alles auswählen

<?php

/**
 * This taglib generates a url with the given parameters taking care of the 
 * current LinkScheme.
 *
 * @author Ralf Schubert <<a href="http://develovision.de">Develovision Webentwicklung</a>>
 */
class html_taglib_link extends Document {
    
    public function transform() {
        $Parameter = $this->getAttributes();
        
        if(isset($Parameter['href'])) {
            $Url = Url::fromString($Parameter['href']);
            unset($Parameter['href']);
        }
        else {
            $Url = Url::fromCurrent(true);
        }
        
        $Url->setQuery($Parameter);
        
        return LinkGenerator::generateUrl($Url);
    }
}

?>
Anwendung:

Code: Alles auswählen

<a href="
   <html:link
       cms = "admin"
        admin = "plugins"
   />
">Zurück zu den Plugins</a>

<a href="
   <html:link
       href="http://wherever.com/"
       foo = "bar"
   />
">Externer Link</a>
Die erste Variante erzeugt mir Beispielsweise, nach meinem speziellen LinkScheme, folgenden Link:

Code: Alles auswählen

http://localhost/APF/DevelovisionCMS/admin/plugins.html
Im Normalfall wird einfach jeder AttributName als key, und jeder Attributwert als value für einen parameter in der Url verwendet. Lediglich das href="" attribut wird gefiltert, und stattdessen als externe url verwendet, wenn angegeben. Ansonsten wird anhand der aktuellen Url eine absolute Adresse verwendet.

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

Re: a und img taglib

Beitrag von welworx » 28.07.2011, 01:56:26

ich hab das vor längeren mal für mich folgendermaßen umgesetzt. Funktioniert bestens und kann gerne ins apf integriert werden :)

Code: Alles auswählen

import('tools::link', 'LinkGenerator');
import('tools::request', 'RequestHandler');

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 && $this->getAttribute('params') !== null) {

            $params = array();
            $parameterpaar = explode("|", $this->getAttribute('params'));
            foreach ($parameterpaar as $param) {

                $teile = explode(",", $param);
                if (isset($teile[1])) {
                    if ($teile[1] == 'null') {
                        $teile[1] = null;
                    }
                    // wenn in url bereits vorhanden, dann entfernen
                    $value = RequestHandler::getValue($teile[0], null);
                    if ($value == null) {
                        $params[$teile[0]] = $teile[1];
                    } else {
                        $params[$teile[0]] = null;
                    }
                } else {
                    $params[$teile[0]] = null;
                }
            }
            $link = LinkGenerator::generateUrl(Url::fromCurrent()->mergeQuery($params));
            $this->setAttribute('href', $link);
        } elseif ($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);
        }

        // wenn der link im aktuellen vorhanden ist, dann wird die klasse active dazu gesetzt.
        if (substr_count($_SERVER['REQUEST_URI'], $this->getAttribute('href')) > 0) {
            $this->setAttribute('class', $this->getAttribute('class') . ' active');
        }

        // Leeren damit es nachher keine probleme bereitet
        $this->setAttribute('params', null);
        unset($this->__Attributes['params']);
    }

    function transform() {
        if ($this->__Content == '') {
            $this->__Content = $this->getAttribute('title');
        }
        if ($this->__Content == null) {
            throw new Exception('Es ist kein Text vorhanden der angeklickt werden kann.');
        }
        return '<a ' . $this->getAttributesAsString($this->getAttributes(), $this->attributeWhiteList) . '>' . $this->__Content . '</a>';
    }
} 

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

Re: a und img taglib

Beitrag von Screeze » 28.07.2011, 08:38:25

deine lösung setzt aber vorraus, dass ich immer ein a-tag will. Will ich das aber nicht (z.b. Für js) ist deine lösung zu unflexibel. Weiterhin scheint mir deine lösung recht umständlich, wenn man die quellcodelänge vergleicht ;)

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: a und img taglib

Beitrag von Megger » 28.07.2011, 09:12:25

@Screeze:
Bei deiner Lösung könnte man vielleicht noch irgendwie berücksichtigen ob man die Parameter per setQuery oder per mergeQuery übernehmen will, dann wäre die Taglib noch flexibler
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

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

Re: a und img taglib

Beitrag von Screeze » 28.07.2011, 10:58:13

So meinst du?

Code: Alles auswählen

<?php

/**
 * This taglib generates a url with the given parameters taking care of the 
 * current LinkScheme.
 *
 * @author Ralf Schubert <<a href="http://develovision.de">Develovision Webentwicklung</a>>
 */
class html_taglib_link extends Document {
    
    public function transform() {
        $Parameter = $this->getAttributes();
        
        if(isset($Parameter['href'])) {
            $Url = Url::fromString($Parameter['href']);
            unset($Parameter['href']);
        }
        else {
            $Url = Url::fromCurrent(true);
        }
        
        $QueryOption = 'set';
        if(isset($Parameter['queryoption'])){
            $QueryOption = $Parameter['queryoption'];
            unset($Parameter['queryoption']);
        }
        if($QueryOption === 'merge'){
            $Url->mergeQuery($Parameter);
        }
        else {
            $Url->setQuery($Parameter);
        }
        
        return LinkGenerator::generateUrl($Url);
    }
}

?>

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: a und img taglib

Beitrag von Megger » 28.07.2011, 11:35:47

Genau, dadurch verliert man keine Parameter die man vielleicht schon gesetzt hat
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

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

Re: a und img taglib

Beitrag von welworx » 28.07.2011, 12:28:26

ok dass man das für js verwenden will hab ich nicht bedacht.

man kann da gerne deinen tag als grundtag verwenden und dann eine ableitung daraus machen die den a tag erstellt. Sehr praktisch find ich die möglichkeit, dass der link als active gekennzeichnet wird, wenn er ausgewählt ist.

Weiters find ich die Möglichkeit gleich mehrere Parameter setzten zu können auch sehr wichtig.

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

Re: a und img taglib

Beitrag von Screeze » 28.07.2011, 12:58:28

Weiters find ich die Möglichkeit gleich mehrere Parameter setzten zu können auch sehr wichtig.
Du kannst mit meiner Möglichkeit jeden beliebigen Parameter setzen, wenn du magst auch 100.000.000 Stück ;) Jedes Attribut wird als 1 Parameter übersetzt.

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

Re: a und img taglib

Beitrag von welworx » 29.07.2011, 19:03:09

ahh ok verstehe .. hab mir den code nicht genau genug angesehen ;)

Was hältst du davon, einen schalte anzubieten der im falls von true gleich einen a tag liefert? ansonsten nur den link?

LG

Megger
Beiträge: 1233
Registriert: 04.11.2008, 10:57:37

Re: a und img taglib

Beitrag von Megger » 29.07.2011, 21:12:13

Da würde ich eher eine weitere taglib schreiben, die auf die bisherige aufbaut, also das a tag baut und als href parent::transform() setzt
Tutorial: Browsergame mit dem APF (Die ersten Parts handeln von Installation und Inbetriebnahme des APFs, deswegen sicherlich auch für alle Nicht-Browsergame-Programmierer interessant)

APF-Version
  • Entwicklung: 2.0
  • Produktiv: 1.15

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

Re: a und img taglib

Beitrag von dr.e. » 03.08.2011, 14:05:52

Ich persönlich finde beide Umsetzungen sinnvoll. Generischer und für ein Framework relevant ist IMHO Ralf's Impleemntierung, da sie hinsichtlich der Parameter nicht eingeschränkt ist und über einen Document-Controller sogar noch manipuliert werden kann.

Was sie nicht kann ist Werner's Unetrscheidung zwischen "echten" Parametern in der URL und Tag-Attributen (z.B. onmouseover). Vielleicht könnt ihr einen Merge vornehmen, dann haben wir eine Taglib, die für's APF sinnvoll ist.
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von Screeze » 03.08.2011, 14:09:45

Was sie nicht kann ist Werner's Unetrscheidung zwischen "echten" Parametern in der URL und Tag-Attributen (z.B. onmouseover). Vielleicht könnt ihr einen Merge vornehmen, dann haben wir eine Taglib, die für's APF sinnvoll ist.
Was hälst du von beiden, wobei die von Werne einfach auf meiner Aufsetzt und diese erweitert?

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast