Verweis zu CMS-Seite als aktiv markieren

Tach allerseits

Zerbreche mir gerade den Kopf darüber, wie ich einen Verweis auf eine CMS-Seite als “aktiv” (zwecks CSS-Manpiulation) markieren kann.

Habe zwar ein paar Lösungsanssätze im Forum gefunden, jedoch sind die teilweise relativ alt bzw. empfinde ich die meisten eher als gebastel.
Gibt es da einen offiziellen “Nach Handbuch (wenn es denn drin stehen würde)”-Weg?

Idee:
Ich habe eine CMS Seite namens “Über uns” mit ident oxaboutus. Diese wird in einem eigens erstellten Menü im Template verlinkt. Ich möchte nun, dass wenn ich auf diesen LInk klicke, dass ich ihm per CSS eine Klasse zuweisen kann (z.B. active).
Wie mach ich das?
Optimalerweise sollte die Lösung möglichst SEO kompatibel und vor allem in ein, zwei Zeilen machbar sein.

Grüsse aus Basel
Marc

Hi,

versuchs mal damit:

[{assign var="currentPage" value="http://"|cat:$smarty.server.HTTP_HOST|cat:$smarty.server.REQUEST_URI}]
[{oxifcontent ident="oxaboutus" object="oCont"}]
    <li[{ if $currentPage|htmlspecialchars == $oCont->getLink() }] class="active"[{/if}]>
        <a href="[{ $oCont->getLink() }]">[{ $oCont->oxcontents__oxtitle->value }]</a>
    </li>
[{/oxifcontent}]

Erklärung:
zuerst wird die aktuelle URL herausgefunden:

[{assign var="currentPage" value="http://"|cat:$smarty.server.HTTP_HOST|cat:$smarty.server.REQUEST_URI}]

später wird dann getestet, ob die aktuelle URL die gleiche ist, auf die ich verlinken möchte um dann ggf die Klasse zu setzen:

[{ if $currentPage|htmlspecialchars == $oCont->getLink() }]

Das |htmlspecialchars verwandelt die Sonderzeichen in der $currentPage Variable in HTML-Entities, genauso wie es die getLink() Funktion im Prinzip auch macht.

[QUOTE=Benny;54476]
Erklärung:
zuerst wird die aktuelle URL herausgefunden:

[{assign var="currentPage" value="http://"|cat:$smarty.server.HTTP_HOST|cat:$smarty.server.REQUEST_URI}]

später wird dann getestet, ob die aktuelle URL die gleiche ist, auf die ich verlinken möchte um dann ggf die Klasse zu setzen:

[{ if $currentPage|htmlspecialchars == $oCont->getLink() }]

[/QUOTE]

Hi Benny.
Erst mal danke!

Hm… Dumme Frage, aber gibt es denn nicht schon eine Variable, welche von Haus aus die aktuelle, komplette Request-URI zur Verfüfung stellt?
Ich könnte mir vorstellen, dass diese Variable immer mal wieder Verwendung finden könnte. Klingt für mich nach einem No-Brainer, dass OXID so was zur Verfügung stellt. Oder überseh ich da etwas?
Ich könnte mir z.B. zwei Variabeln vorstellen, welche OXID zur Verfügung stellen könnte:

  1. komplette Request-URI unecaped
  2. komplette Request-URI escaped
    oder zuminest eine der beiden.

Alternativ, um Speicher/Rechenzeit zu sparen, könnte man auch eine Funktion einbauen, welche dies nur auf Anfrage macht.
z.B.$oView->isCurrentPage( $category->getLink())

Ich habe mir den aktuellen Link so gebaut:

[{if $oView->getActiveLangAbbr() == "en"}]
		[{assign var="link_current" value=$oxcmp_lang[1]->link}]
	[{else}]
		[{assign var="link_current" value=$oxcmp_lang[0]->link}]
	[{/if}]

In meinem Fall ist es ein Link auf eine eigene tpl. Den baue ich so:

[{capture assign=link_menuitem}][{oxgetseourl ident=$oViewConf->getSelfLink()|cat:"cl=tpl&tpl=customtpl.tpl"}][{/capture}]

Das vergleiche ich dann später:

[{if $link_menuitem == $link_current}] active[{/if}]

Ich empfinde das allerdings auch nicht als eine optimale Lösung, vor allem wegen der Sprachabfrage, aber immerhin funktioniert es. Hier wäre eine eingebaute Funktion sehr sinnvoll. Ich hab wirklich lange gesucht und nix dergleichen gefunden :confused: