Mittwoch, 3. Dezember 2008 Druck-Ansicht
Altbekanntes Problem: Für alles hat man eine “Box”, mal mehr, mal weniger kompliziert - aber für die “dicksten Knöppe” vom Shop muss man im Template teilweise ziemlichen Aufstand betreiben. Damit sie a) gegebenenenfalls als “aktiv” markiert werden oder einen b) zumindest nicht wieder aus dem Shop rausschmeißen (Session-ID nicht mitgeschleift o.ä.)
Üblicherweise sind diese “dicken Knöppe” Funktionen wie “Neues Konto”, “Anmelden”, “Newsletter”, “Ihr Konto”, “Warenkorb”, “Kasse” und ähnliche, die man möglichst prominent und - getrennt von den anderen Links - meistens im Kopfbereich des Shops unterbringen möchte.
Für einige dieser Funktionen gibt’s in der “index.html” schon ein paar Smarty-Tags, leider aber ohne direkte Möglichkeit, den momentan aktiven Bereich besonders hervorzuheben.
Es kursieren ein paar putzige Lösungen, die sich z.B. “Current-Link-Hack” nennen, aber nichts weiter machen, als mit …
{php}
$cur_link = explode('/', $_SERVER['PHP_SELF']);
$cur_link = array_pop($cur_link);
if (strpos($cur_link, '?') === true ) {
$pos = strpos($cur_link, '?', 1);
if ($pos) {
$cur_link = substr($cur_link, 0, $pos);
}
}
{/php}
… genau das herauszufinden, was man ebensogut mit
$cur_link = basename($_SERVER['SCRIPT_NAME']); hätte hinbekommen können.
Dieser Aufstand bloß, damit man nachher in den HTML-Dateien wieder via eingebundenem PHP überprüfen darf, ob $cur_link grad aktiv ist oder nicht.
Tolle Idee.
Desweiteren müsste man auch nicht einmal darauf ausweichen, es gibt auch noch {$smarty.server.SCRIPT_NAME} - da steht das selbe drin. Nur mit Slash vornedran.
Dieser hier ist (dank xtc4-Standard-Template) wahrscheinlich am weitesten verbreitet:
{if $account}
{php} if (isset($_SESSION['customer_id'])) { {/php}
<a href="{$logoff}">{#link_logoff#}</a> |
{php} } {/php}
{/if}
{if $account}
<a href="{$account}">{#link_account#}</a> |
{/if}
…hä?
Sollte man gemerkt haben, dass $account eigentlich immer gefüllt ist und einmal ein bisschen in der Smarty-Doku gestöbert, reduziert sich der Aufwand zwar schon mal ein wenig …
{if $smarty.session.customer_id}
<a href="{$logoff}">{#link_logoff#}</a> |
{/if}
<a href="{$account}">{#link_account#}</a> |
… aber bei Klick auf “Ihr Konto” ist der Link immer noch nicht als “aktiv” gekennzeichnet.
Man wundert sich ja manchmal. Aber ab und zu staunt man nur noch. Aktuell räume ich ein Template auf, in dem die üblichen “Funktions-Links” (Original!!) so drin stehen …
<td><a href="shop_content.php?coID=4&XTCsid=83d9a3cc215249e97425ef02e5e1533f"><img src="{$tpl_path}buttons/{$language}/nav/header_bottom_nav_imprint.png" alt="Impressum" width="99" height="38" border="0" /></a></td>
<td><a href="http://www.lalalashopname.de/shop_content.php?coID=0&XTCsid=83d9a3cc215249e97425ef02e5e1533f"><img src="{$tpl_path}buttons/{$language}/nav/header_bottom_nav_contact.png" alt="Kontakt" width="99" height="38" border="0" /></a></td>
Och nö!
Und damit sich so etwas nicht laufend weiter verbreitet - als Abhilfe hier meine persönlichen “Fünf Freunde” für xt:Commerce-Links …
Freund 1) Modifier “link”
Eigentlich ein ganz banales Ding. Spart aber schon mal Tipp-Arbeit
Statt <a href="{$URL}">{$TEXT}</a> … schreibt man nur noch: {$TEXT|link:$URL}
Das funktioniert (Smarty ist manchmal echt praktisch) übrigens auch mit “Sprach-Fitzeln”: Konstruktionen à la {#link_account#|link:$account} machen keine Probleme.
Freund 2) Function “ScriptLink”
Diese Funktion macht Folgendes: “Tu Script-Adresse rein, kommt Script-Link raus.” Natürlich mit Session-ID.
Gibt man bei “text” keinen Wert an, wird als verlinkter Text der Name des Scripts angenommen. Gibt man bei “active” keinen Wert an, bekommt der Link (wenn “an”) die CSS-Klasse “Current”.
Ein Beispiel?
{ScriptLink script=$smarty.const.FILENAME_SPECIALS text=Sonderangebote active=BinAktiv}
Hier würde zur “specials.php” verlinkt werden. Text: “Sonderangebote”. Wenn Aktiv, dann hat der ausgegebene HTML-Link die CSS-Klasse “BinAktiv”
Freund 3) Function “AccountLink”
… verhält sich mit zwei Ausnahmen exakt so wie “ScriptLink”.
Freund 4) Function “CheckoutLink”
… ähnlich der “AccountLink” - nur eben für den “Bezahlprozess” zuständig
Freund 5) Function “ContentLink”
Diese Funktion ist für das “mittendrin einbauen” von ContentManager-Seiten.
Beispiel “Impressum” - In der Standard-Installation hat diese CM-Seite die “Sprachgruppe 4″. Um einen “Impressum”-Link zu erzeugen (funktioniert auch mehrsprachig) schreibt man im Template einfach {ContentLink id=4} - und erhält auf Deutsch ein verlinktes “Impressum”, auf Englisch ein verlinktes “Imprint” …
… Das hier {ContentLink id=4 text=#sprachvariable# active=Moin} würde demnach einen Link zum Impressum erzeugen, verlinkter Text wäre das, was in {#sprachvariable#} drin ist - und wenn man sich grad das Impressum anschaut, hätte der Link die CSS-Klasse “Moin”.
Alles soweit klar?
Als Anregung zum produktiven Einsatz hier zwei Screenshots-Schnippsel aus einem Shop, bei dem ich diese Funktionen benutzt habe.

Screenshot “Fünf Freunde”
So etwas mit den mitgelieferten Werkzeugen umzusetzen, kann schon mal in Fummelkram ausarten. Mit Ihren neuen “fünf Freunden” ist das aber alles gar nicht mehr so wild.
Der Code zum oberen Teil sieht so aus:
<ul id="TopFunctions">
<li class="Account">{AccountLink text=#link_account#}</li>
<li class="Cart">{ScriptLink script=$smarty.const.FILENAME_SHOPPING_CART text=#link_cart#}</li>
<li class="Checkout">{CheckoutLink text=#link_checkout#}</li>
</ul>
Der zum unteren so:
<ul id="ShopFunctions">
{if $smarty.session.customer_id}
<li>{ScriptLink script=$smarty.const.FILENAME_LOGOFF text=LOGOFF}</li>
{else}
<li>{ScriptLink script=$smarty.const.FILENAME_LOGIN text=LOGIN}</li>
{/if}
<li>{ContentLink id=4}</li>
<li>{ContentLink id=12}</li>
<li>{ContentLink id=3}</li>
</ul>
Ich wünsche viel Spaß beim Basteln
Ja, Richtig - “AccountLink”, “CheckoutLink” und “ScriptLink” hätte man eigentlich auch in einer einzigen function zusammenfassen können. Hatte ich sogar schon mal so. Aber ich wollte Tipparbeit und nicht Dateien sparen. Noch weitere Parameter à la type=Account type=Checkout etc. einzuführen, fand ich dann schließlich doch zu unübersichtlich.
Bookmarks, Feed und Links
Wenn Ihnen dieser Beitrag geholfen hat ...
Beiträge zu ähnlichen Themen:
24 Antworten zu Fünf Freunde - Smartys für xt:Commerce-”Funktions-Links”
Kommentar schreiben