Freitag, 4. August 2006 Druck-Ansicht
Wer schon einmal sein xt:Commerce-Template mit dem HTML-Validator überprüft hat, dürfte vermutlich ein erschreckendes Ergebnis zu Gesicht bekommen haben: Bei einer Standard-Installation von xt:Commerce werden nämlich im Regelfall so viele Fehler gefunden, dass man mit der (endlos langen) Ergebnis-Seite kaum noch etwas anfangen kann.
Dabei werden so ziemlich jeder Link, jeder Button und jedes Formular bemängelt: Das kaufmännische & ist daran “schuld”. Und jeder mit diesem & konstruierte Link oder Button erzeugt wiederum eine endlose Liste von Folgefehlern …
So etwas mag der Validator gar nicht:
... =&search_in_description=&categories_id=0& ...
Er hätte es gerne so:
... =&search_in_description=&categories_id=0& ...
In jedem Link (sowie in allen Formularen, Warenkorb-Buttons etc.) muss also & durch & ausgetauscht werden.
Zum Glück braucht man sich dazu nicht durch zig System-Dateien zu wühlen. Die kann man allesamt in Ruhe lassen - und sich stattdessen auf die HTML-Dateien in seinem Template beschränken: Denn mit Smarty kann man ganz einfach Zeichenketten durch andere ersetzen …
{$TEMPLATE_TAG|replace:"&":"&"}
… und bei Bedarf auch mehrere Regeln in eine Anweisung schreiben:
{$BOX_CONTENT|replace:"&reviews_id=":"&reviews_id="|replace:"&XTCsid=":"&XTCsid="}
Vermutlich würde es sogar reichen, lediglich die “index.html” des Templates zu bearbeiten - Auprobiert hab ich das allerdings nicht, denn ich befürchte Performance-Probleme, wenn bei jedem Seiten-Aufruf die gesamte Ausgabe nach bestimmten Zeichenketten durchkämmt wird. Daher hab ich mir lieber alle anderen Template-Dateien “vorgeknöpft”.
Das hört sich zwar nach viel Arbeit an, ist letztendlich aber halb so wild: Mit den üblichen “Suchen-Ersetzen”-Funktionen ist man sogar recht schnell damit durch.
Beispiel - Bei Produkt-Auflistungen wie “new_products.html”, “also_purchased.html” etc. sind nur zwei Schritte nötig:
… und auch die meisten anderen Template-Dateien brauchen nicht allzu viel Handarbeit.
Außerdem kann man bei etlichen Programmen die “Suchen-Ersetzen”-Funktion auch auf mehrere Dateien gleichzeitig anwenden. Vor solchen Aktionen sollte man aber natürlich unbedingt eine Sicherheitskopie seines kompletten Templates anfertigen.
Hinweis: Getestet hab ich das Ganze auf einem recht frisch installierten xt:Commerce 3.04 SP1 mit ShopStat-Erweiterung und aktivierten “Suchmaschinenfreundlichen URLs”.
Bitte beachten Sie unbedingt die allgemeinen Hinweise zu hier veröffentlichten Code-Beispielen!
2. September 2006
An einigen Stellen muss man beim Einsatz des Replace-Befehls ein bisschen genauer hinsehen: Denn jedes “&” durch “&” zu ersetzen, ist manchmal zu viel des Guten. “Gefährlich” sind alle Stellen im Template, an denen durch ein
{$irgendwas}
in der Ausgabe ein
<a href="http://xyz...">Linktext</a>
erzeugt wird. Um also im Linktext keine Umlaute oder Sonderzeichen zu verunzieren, gibt es mehrere Möglichkeiten.
1. Möglichkeit: Alles Austauschen - und danach “zurücktauschen”, was zu viel war.
Weiterhin alle “&” durch “&” ersetzen - und danach “&raquo;” durch “»”, “&auml;” durch “ä” und so weiter. Das ist natürlich mehr als unelegant und taugt allenfalls zum “Schnell mal ausprobieren” - Insgesamt kein wirklich ernstzunehmender Ratschlag.
2. Möglichkeit: Reihung - Mehrere Replace-Anweisungen schreiben
… um auch wirklich nur das auszutauschen, was in der Link-Adresse erzeugt wird. Das kann zum Beispiel so aussehen:
{$PRODUCTS_URL|replace:"product&id=":"product&id="|replace:"&XTCsid=":"&XTCsid="}
Meistens kommt man dabei mit zwei Anweisungen aus.
Bei {$navtrail} allerdings wird’s schwierig, weil dort sehr viele verschiedene “&irgendwas=”-Zeichenketten in den Links möglich sind - In dem Fall ist wahrscheinlich die dritte Möglichkeit die beste:
3. Möglichkeit: regex_replace - Austausch mit regulären Ausdrücken
Smarty kennt die Anweisung regex-replace - Die Funktion ist ähnlich preg_replace in PHP … Bei der Breadcrumb-Navigation {$navtrail} hab ich das “&”-Problem mit folgender Anweisung gelöst:
{$navtrail|regex_replace:"/&(?=[^<]*?>)/":"&"}
Damit werden nur die “&”s ausgetauscht, auf die ein “>” folgt, dem kein “<” vorausgeht. Gewissermaßen werden so die “&”s in sämtlichen HTML-Tags ersetzt, die von {$navtrail} erzeugt werden. Alles zwischen den Tags - also der lesbare Text - bleibt unangetastet.
Sauberer wäre zwar wohl eine Variante, die nur den Bereich innerhalb der Gänsefüßchen von href=”xyz” verändert, da arbeite ich noch dran. Aber xt:Commerce gibt an den “kritischen Stellen” ohnehin keine title-Attribute mit den Links zusammen aus - Da sollte also nichts Unangenehmes passieren.
Mit “mehr als nur ein paar” Änderungen weniger kommt man aus, wenn man die komplette HTML-Ausgabe des Shops durchsuchen und die “nicht-validen” Fundstellen korrigieren lässt. Dabei muss nur einer der “zentral wirksamen” Smarty Output-Filter bearbeitet werden.
Näheres dazu » in diesem Beitrag.
Bookmarks, Feed und Links
Wenn Ihnen dieser Beitrag geholfen hat ...
Beiträge zu ähnlichen Themen:
19 Antworten zu Valid XHTML - Links und Buttons mit xt:Commerce
Kommentar schreiben