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

Re: a und img taglib

Beitrag von welworx » 02.09.2011, 10:34:34

passt das so in der art?

Code: Alles auswählen

<h3 id="html:link"><a href="#html:link">html:link</a></h3>

<p>
    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.
</p>
<h4 id="Patameter-html-link"><a href="#Patameter-html-link">Patameter</a></h4>
<ul>
    <li>href - Sollte der Parameter href übermittelt worden sein, wird dieser als Ausgangsurl verwendet, ansonsten der aktuelle.</li>
    <li>queryoption=set|merge - Jener Parameter der entweder bestimmt ob die mergeQuery oder setQuery Option des Linkgenerators aufgerufen werden soll.</li>
</ul>
<p>
    Alle weiteren Parameter die übermittelt werden werden in den Link eingebaut.
</p>
<h4 id="Rueckgabewert"><a href="#Rueckgabewert">Rückgabewert</a></h4>
<p>Der Taglib liefert einen String mit dem aktuellen Link zurück.</p>

<h4 id="Anwendungsbeispiel-html-link"><a href="#Anwendungsbeispiel-html-link">Anwendungsbeispiel</a></h4>
<gen:highlight type="code">
    <html:link seite="test" class="big" />
<br />
    Aktuelle Domail: http://www.example.com 
    Aktuelles LinkSheme: DefaultLinkSheme 
<br />
    Rückgabewert: http://www.example.com?seite=test&class=big
</gen:highlight>





<h3 id="html:a"><a href="#html:a">html:a</a></h3>
<p>
    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.
</p>


<h4 id="Patameter-html-a"><a href="#Patameter-html-a">Patameter</a></h4>
<p>
    Der Inhalt folgender Parameter wird in den Tag eingebaut. Alle anderen werden an den Linkgenerator weitergereicht.
<ul>
    <li>queryoption=set|merge - Jener Parameter der entweder bestimmt ob die mergeQuery oder setQuery Option des Linkgenerators aufgerufen werden soll.</li>
    <li>href - Sollte der Parameter href übermittelt worden sein, wird dieser als Ausgangsurl verwendet, ansonsten der aktuelle.</li>
    <li>id</li>
    <li>style</li>
    <li>class</li>
    <li>onabort</li>
    <li>onclick</li>
    <li>ondblclick</li>
    <li>onmousedown</li>
    <li>onmouseup</li>
    <li>onmouseover</li>
    <li>onmousemove</li>
    <li>onmouseout</li>
    <li>onkeypress</li>
    <li>onkeydown</li>
    <li>onkeyup</li>
    <li>tabindex</li>
    <li>dir</li>
    <li>accesskey</li>
    <li>title</li>
    <li>charset</li>
    <li>coords</li>
    <li>hreflang</li>
    <li>name</li>
    <li>rel</li>
    <li>rev</li>
    <li>shape</li>
    <li>target</li>
    <li>xml:lang</li>
    <li>onblur</li>
</ul>
</p>

<gen:highlight type="code">
    <html:a seite="test" class="big">LINK</html:a>

    Aktuelle Domail: http://www.example.com 
    Aktuelles LinkSheme: DefaultLinkSheme 
<br />
    Rückgabewert:<a href="www.example.com?seite=test" class="big" >LINK</a>
<br />
    Sobald der Link angeklickt wurde (sprich man sich auf der Seite befindet) sieht das Ergebnis so aus (man beachte den Inhalt von class):
    Rückgabewert: <a href="www.example.com?seite=test" class="big active" >LINK</a>
</gen:highlight>
Ich dachte mir, dass man das gleich in der Seite Links 1.14 dazu einbaut.

LG Werner

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

Re: a und img taglib

Beitrag von dr.e. » 03.09.2011, 22:00:12

Hi Werner,

danke für deinen Input. Ich lege mir das Thema auf Wiedervorlage für die Doku in 1.15. Sollte ich dann noch Input brauchen, melde ich mich.
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von welworx » 13.09.2011, 15:30:33

Hi,

hab grad einen bug gefunden.

in der datei html_taglib_a muss die methode ein wenig modifiziert werden, damit die active class richtig gesetzt wird.

der code muss so lauten:

Code: Alles auswählen

 if ( substr_count($_SERVER['REQUEST_URI'], $this->attributeWhiteList['href']) > 0|| substr_count( $this->attributeWhiteList['href'],$_SERVER['REQUEST_URI']) > 0) {
            $this->attributeWhiteList['class']=$this->attributeWhiteList['class'].' active';
        } 

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

Re: a und img taglib

Beitrag von dr.e. » 13.09.2011, 23:23:02

Hi,

statt welcher Zeilen? Dieser hier:

Code: Alles auswählen

      if (substr_count($_SERVER['REQUEST_URI'], $this->attributeList['href']) > 0) {
         $this->setAttribute('class', $this->attributeList['class'] . ' active');
      } 
Viele Grüße,
Christian

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

Re: a und img taglib

Beitrag von welworx » 13.09.2011, 23:27:51

ja genau

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

Re: a und img taglib

Beitrag von dr.e. » 13.09.2011, 23:30:40

Ist integriert.
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 » 16.12.2011, 20:13:57

Ich mache die letzte Änderung mal rückgängig und überschreibe sie mit einem korrekten Bugfix, da die aktuelle Logik absolut nicht stimmt.

Beispiel:
Ich befinde mich auf der Hauptseite unter

Code: Alles auswählen

http://localhost/Clienten/redconcept/redconcept-event.com/page/
Jetzt werden alle Links als active markiert:

Code: Alles auswählen

                 <li>
                    <a class=" active" href="http://localhost/Clienten/redconcept/redconcept-event.com/page/?page=impressum">Impressum</a>
                </li>
                <li>
                    <a class=" active" href="http://localhost/Clienten/redconcept/redconcept-event.com/page/?page=acts">Acts</a>
                </li>
                <li>
                    <a class=" active" href="http://localhost/Clienten/redconcept/redconcept-event.com/page/?page=kontakt">Kontakt</a>
                </li>
Grund:
Der aktuelle Link ist natürlich in jedem der anderen Links enthalten, daher macht die Prüfung so rum wenig Sinn.

Allerdings ist das Verhalten danach immer noch buggy, denn dann wird garnichts mehr aktiv markiert. Der Grund:

Code: Alles auswählen

var_dump($_SERVER['REQUEST_URI']);
var_dump($this->attributeList['href']);

//ergibt:
//string(60) "/Clienten/redconcept/redconcept-event.com/page/?page=kontakt"
//string(63) "http://localhost/Clienten/redconcept/redconcept-event.com/page/"
 
Wenn dann sollte beide male auf die absolute URL geprüft werden. Daher werde ich

Code: Alles auswählen

$_SERVER['REQUEST_URI']
ersetzen durch

Code: Alles auswählen

Registry::retrieve('apf::core', 'CurrentRequestURL')
welches die korrekte URL enthält. Die neue Lösung heißt also:

Code: Alles auswählen

if (substr_count($this->attributeList['href'], Registry::retrieve('apf::core', 'CurrentRequestURL')) > 0) {
   $this->attributeList['class'] = $this->attributeList['class'] . ' active';
} 

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

Re: a und img taglib

Beitrag von Screeze » 16.12.2011, 21:21:27

Ach mist die Änderung ist immernoch Buggy.

Je nachdem wie mans macht gehts entweder nur auf der hauptseite, oder nur auf Unterseiten.... Da müssen wir nochmal ran, mir fehlt allerdings grad ne Idee, ich versuch das morgen noch mal wenn keiner von euch ne Idee hat.

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: a und img taglib

Beitrag von TipTop » 17.12.2011, 19:17:04

Code: Alles auswählen

<ul>
    <li><a href="http://address.tld/?page=link1">Link1</a></li>
    <li><a href="http://address.tld/?page=link2">Link2</a></li>
    <li><a href="http://address.tld/?page=link3">Link3</a></li>    
</ul> 

Beispiel - Aktuelle URL: http://address.tld/?page=link1
Somit ergibt $_SERVER['REQUEST_URI']: /?page=link1

int substr_count ( string $haystack , string $needle [, int $offset = 0 [, int $length ]] )


Demnach muss die if-Bedingung doch folgendermaßen aussehen:

Code: Alles auswählen

if (substr_count($this->attributeWhiteList['href'], $_SERVER['REQUEST_URI']) > 0) {
    $this->setAttribute('class', $this->attributeWhiteList['class'] . ' active');
} 

Das Kaufmännische-Und im href-Attribut sollte vor dem parsen noch durch das Entity (&) ersetzt werden, damit das HTM valide bleibt.

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

Re: a und img taglib

Beitrag von Screeze » 18.12.2011, 13:57:35

Da hast du aber wieder das Problem:

Beispiel - Aktuelle URL: http://address.tld/
Somit ergibt $_SERVER['REQUEST_URI']: /
Matcht aber auch auf: http://address.tld/?page=link1 was nicht gewollt ist.

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: a und img taglib

Beitrag von TipTop » 18.12.2011, 14:08:07

Anstatt _SERVER['REQUEST_URI'] _SERVER['QUERY_STRING'] verwenden.

Code: Alles auswählen

<?php
$qs = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : '';

if (substr_count($this->attributeWhiteList['href'], $qs) > 0) {
    $this->setAttribute('class', $this->attributeWhiteList['class'] . ' active');
} 
?>


TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: a und img taglib

Beitrag von TipTop » 18.12.2011, 18:16:21

Screeze hat geschrieben:Da hast du aber wieder das Problem:

Beispiel - Aktuelle URL: http://address.tld/
Somit ergibt $_SERVER['REQUEST_URI']: /
Matcht aber auch auf: http://address.tld/?page=link1 was nicht gewollt ist.
Screeze hat geschrieben:Das dürfte aber nichts am Problem ändern, oder?
Bei dem von dir genannten Beispiel wäre jeder Anchor mit der class active versehen worden, der einen Slash im href-Attribut hat. QUERY_STRING liefert im Gegensatz zu REQUEST_URI erst alles ab /? - bei...

http://address.tld/

...beinhaltet QUERY_STRING einen leerern String - bzw. wird erst gar nicht gesetzt (deswegen der Ternary).

Oder meintest Du ein anderes Problem?

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

Re: a und img taglib

Beitrag von Screeze » 19.12.2011, 19:33:47

Zum einen hat deine Lösung nicht ganz funktioniert von der Bezeichnung der Variablen und arrays, und zum andern ist anschließend ein Fehler geflogen, wenn man nach nem leeren string gesucht hat.
Aber folgende Lösung hab ich jetzt korrekt getestet, ausgehend von deiner. Hab sie in 1.15 committed.

Code: Alles auswählen

      $qs = (isset($_SERVER['QUERY_STRING'])) ? $_SERVER['QUERY_STRING'] : '';
      $href = strstr($this->attributeList['href'], '#', true);
      if(!$href) {
          $href = $this->attributeList['href'];
      }
      if($qs !== '') {
         if (substr_count($href, $qs) > 0) {
             $this->attributeList['class'] = $this->attributeList['class'] . ' active';
         } 
      }
      elseif(substr($href, -1) === '/') {
           $this->attributeList['class'] = $this->attributeList['class'] . ' active';
      }
 

TipTop
Beiträge: 193
Registriert: 25.08.2011, 22:37:08
Wohnort: Klagenfurt, Österreich
Kontaktdaten:

Re: a und img taglib

Beitrag von TipTop » 31.12.2011, 13:57:31

Ich könnte diese TagLib schon gut gebrauchen, nur wie ich gerade bemerke, hab ich ein zu "altes" APF-Package, nämlich das, welches man auf der APF-Startseite downloaden kann. Gibt es bereits i-wo einen Download zu 1.15 bzw. wo find ich den Code zur a- und link-TagLib?

Grüße,
Nico

Gesperrt

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast