Die “ZwoKommaNull” steht zum Testen bereit

… und enthält gegenüber der alten Version einige Erweiterungen. Zum Beispiel besteht ja manchmal der Wunsch, auch andere Links als Links zu Kategorien in die Navigation einfügen zu können, damit alles in einem Menü zugänglich ist. Oder aber bestimmte Kategorien standardmäßig “aufzuklappen”, während andere “eingeklappt” sind.

Den Download und eine “Mini”-Installations-Anleitung finden Sie » am Ende dieser Seite, falls Sie die ausführliche Anleitung überspringen möchten.

Die Neuerungen im Überblick

  1. NEU: “Marker”-System, um für einzelne Kategorien vorgeben zu können, ob sie “ein-” oder “ausgeklappt” sein sollen
  2. NEU: “Marker”-System, um z.B. ContentManager-Links im Kategorien-Baum anzeigen zu können
  3. NEU: Mit “Markern” können einzelnen Kategorien eigene CSS-Klassen (z.B. für besondere Farben o.ä.) zugeteilt werden
  4. NEU: Verbesserungen bei eingeschaltetem Smarty-Cache
  5. NEU: Die Zählung der Produkte (z.B. falls leere Kategorien versteckt werden sollen) berücksichtigt, ob die Artikel für die jeweilige Kundengruppe sichtbar sind
  6. NEU: Das gleiche gilt für die Feststellung, ob eine Kategorie weitere Unterkategorien hat oder nicht (z.B. falls Kategorien mit Unterkategorien besonders gestaltet werden sollen)

 

“Marker-System”

Das Prinzip ist einfach: Man schreibt spezielle Bezeichnungen in die Kategorien-Überschrift - und wenn diese “gefunden” werden, passiert “etwas besonderes”.

Das war’s schon fast - Jetzt muss man bloß noch verhindern, dass diese “Marker” nachher im Shop zu sehen sind - also müssen diese “Steuerzeichen” vor der HTML-Ausgabe wieder entfernt werden.

Dazu ist das Smarty-Plugin “outputfilter.note.php” geeignet, das in xt:Commerce auf allen Shop-Seiten zum Einsatz kommt. Nähere Infos und ein paar Anregungen, was man noch so mit “Markern” anstellen kann, finden Sie » hier

Wenn Sie keine “Marker” benutzen möchten, brauchen Sie am Outputfilter nichts zu ändern - Aber mit diesem Trick kann man recht lustige Dinge anstellen …

 

Welche “Marker”?

Schauen Sie mal in meinen » Testshop - Zur Demonstration lasse ich meine Marker dort (momentan) nicht filtern.

Sollte der Shop grad einmal nicht funktionieren, bitte ich um Verständnis - Das ganze ist mehr technische Spielwiese - und gewiss kein Show-Room …

1) CSS-Marker

Drei Kategorien haben eine andere Farbe. Dazu muss man einfach in die Überschrift einen Marker {#class:SpezielleKlasse#} schreiben - und in der Navigation bekommt der Link (oder der Listenpunkt bzw. beides) die CSS-Klasse “Spezielle Klasse”.

Welchem HTML-Element die gefundenen CSS-Marker zugeordnet werden, kann man in der “show_category_inc.php” einstellen, Siehe » ”Konfiguration”

2) Klapp-Marker

Die Kategorie “Testkategorie 3″ ist nicht nur blau {#class:Blue#}, sondern auch von Anfang an “ausgeklappt”. Das funktioniert mit dem Marker {#expand#}. Analog dazu gibt’s auch einen Marker {#collapse#} - Den habe ich in meinem Testshop aber nicht drin, da bei mir ja sowieso alle Kategorien standardmäßig eingeklappt sind.

{#collapse#} könnte man z.B. einsetzen, wenn alle Kategorien z.B. bis zur zweiten Ebene ausgeklappt sind - aber eine “ganz besonders lange” Kategorie nicht gleich zu Anfang gezeigt werden soll …

3) Umleitungs-Marker

Wenn man “alles in einer Navi” haben möchte (also z.B. “Impressum”, “Kontakt”, “Angebote”, “Neue Artikel” etc.) geht das mit Markern auch. Man muss dazu bloß leere Kategorien mit dem gewünschten Namen anlegen - und in die Überschrift schreibt man, wo diese hinleiten sollen.

Beispiel in meinem Testshop sind u.a. die ersten beiden “Kategorien” sowie die Menüpunkte “Kontakt” und “Ihr Konto” in Kategorie “Testkategorie 3.4″ …

  • {#coid=7#} verlinkt zur ContentManager-Seite 7 (”Kontakt”)
  • {#account.php#} zur “Ihr Konto”-Seite
  • {#specials.php#} zu den Sonderangeboten
  • {#pid=123#} verlinkt zum Artikel mit der ID 123

Wenn man zu einem inaktiven oder für die Kundengruppe nicht zugelassenem Produkt verlinkt, wenn man zu einem Script namens “gibtsnich.php” (das es auch wirklich nicht gibt) verlinkt - oder zu einer inaktiven / nicht zugelassenen ContentManager-Seite - dann wird das erkannt und der “eigentliche” Kategorien-Link ausgegeben.

War ein bisschen Fummelkram, aber auch das funktioniert: Wenn man sich auf so einer “umgeleiteten” Kategorie befindet (bzw. in Wirklichkeit gar nicht in einer Kategorie, sondern z.B. auf der Kontakt-Seite), werden die entsprechenden Kategorien mitsamt Ober-Kategorien als “aktiv” markiert, der Baum also korrekt “ausgeklappt”

 

Weitere Verbesserungen

1) Produkt-Zählung

Die Funktion xtc_count_products_in_category() kümmert sich nicht um FSK-Status, Kundengruppenberechtigungen, Status aktiv/inaktiv - Ich habe zum Zählen daher eine neue Funktion geschrieben.

2) Unter-Kategorien

Wenn man Kategorien mit weiteren Unterkategorien gestalterisch von Kategorien ohne Unterkategorien absetzen möchte, arbeitet das jetzt ebenfalls sauberer. Vorher war dazu die Funktion xtc_has_category_subcategories() im Einsatz. Das Ganze ist jetzt anders gelöst und kommt zudem ohne weitere Datenbank-Abfragen aus …

3) Smarty-Caching

In der Standard Kategorien-Box von xt:Commerce (sowie auch in meiner vorherigen Version, muss ich ja zugeben) wird das Caching uneffektiv genutzt. Das heißt - Es finden lauter Datenbank-Abfragen statt, es rappeln etliche Funktionen durch - und erst dann wird geprüft, ob das überhaupt nötig gewesen ist (also ob schon eine gecachete HTML-Datei vorliegt).

Dieses Problem besteht übrigens in einigen Boxen, da kann man hier und da schon noch ein bisschen Geschwindigkeit herausholen.

4) erweiterte Konfiguration

Im Konfigurations-Bereich hat man jetzt deutlich mehr Einstellungs-Möglichkeiten, z.B. kann man festlegen, ob bei “aktiven Links” der Link selbst, der Listenpunkt oder beides mit einer speziellen CSS-Klasse markiert wird.

 

$CatConfig - Konfiguration

Zu finden ist der diesmal etwas längere Konfigurations-Bereich in der Datei “xtc_show_category.inc.php” und zwar ab ca. Zeile 20.

Die ersten drei Parameter 'MaxLevel', 'HideEmpty' und 'ShowAktSub' kennen Sie noch von der » Vorversion. Die restlichen Parameter sind neu und werden weiter unten (hoffentlich) schlüssig erklärt.


$CatConfig = array(

// Bis zu welcher Ebene soll der Kategorien-Baum standardmäßig
// aufgeklappt sein?
// false, wenn er komplett ausgeklappt sein soll.
'MaxLevel' 		=> 	1,

// Leere Kategorien verstecken? true: ja, false: nein
'HideEmpty' 		=> 	false,

// Dürfen aktive Kategorien weitere Unterkategorien aufklappen lassen?
'ShowAktSub' 		=> 	true,

// Kategorien-Tiefe: Wie soll die CSS-Klasse benannt werden?
'ListPrefix'		=>	'CatLevel',

// Aktive Kategorie: Soll der Link markiert werden?
'MarkAktivLink'		=> 	false,
'LinkCurrent'		=> 	'Current',
'LinkCurrentParent'	=> 	'CurrentParent',

// Aktive Kategorie: Soll der Listenpunkt markiert werden?
'MarkAktivList'		=> 	true,
'ListCurrent'		=>	'Current',
'ListCurrentParent'	=>	'CurrentParent',

// Sollen Kategorien mit weiteren Unterkategorien gekennzeichnet werden?
'MarkSubMenue'		=> 	true,
'SubMenueCss'		=> 	'SubMenue',

// Automatische Zuteilung einer CSS-ID (für den Listenpunkt)
'ShowCssIdList'		=> 	false,
'CssPrefixList'		=> 	'MyCat',

// Automatische Zuteilung einer CSS-ID (für den Link)
'ShowCssIdLink'		=> 	false,
'CssPrefixLink'		=> 	'MyCatLink',

// Darstellung Produktzählung, falls eingeschaltet
'CountPre'		=> 	'<em>(',
'CountAfter'		=>	')</em>',

// Tags außerhalb des Links?
'LinkPre'			=>	false,	// z.B. '<div>',
'LinkAfter'		=>	false,	// z.B. '</div>',

// Tags innerhalb des Links?
'NamePre'			=>	false,	// z.B. '<span>',
'NameAfter'		=>	false,	// z.B. '</span>',

// Soll die Überschrift nach Css-Markern à la {#class:EinName#}
// durchsucht werden? So kann man z.B. einzelne
// Links speziell gestalten.
'CssMarkersToList'		=>	false, 	// Gefundene Marker zur Liste?
'CssMarkersToLink'		=>	true	// Gefundene Marker zum Link?

);
	

3. Mai 2008: Nachtrag auf Grund einer Frage per E-Mail - false oder true bitte OHNE Anführungszeichen schreiben, Kommas nicht vergessen - und der letzte Eintrag des $CatConfig-Arrays braucht KEIN Komma hintendran! Und dann funktioniert datt auch.

Die neuen Parameter im Einzelnen:

  1. 'ListPrefix' - Je nach Kategorie-Ebene werden CSS-Klassen à la “CatLevel1″, “CatLevel2″ etc. vergeben, hier kann man den “Namen vor der Nummer” festlegen
  2. 'MarkAktivLink', 'LinkCurrent' und 'LinkCurrentParent' - Hier kann eingestellt werden, ob bei gewählten Kategorien (Current) oder Kategorien mit gewählten Unterkategorien (CurrentParent) der Link mit einer CSS-Klasse markiert werden und wie diese heißen soll
  3. 'MarkAktivList', 'ListCurrent' und 'ListCurrentParent' - siehe oben, diese Einstellungen gelten jedoch für den “Listenpunkt”
  4. 'MarkSubMenue', 'SubMenueCSS' - Wenn man Kategorien, die weitere Unterkategorien haben, gesondert kennzeichnen möchte, kann man hier die dazu gewünschte CSS-Klasse eintragen. Falls nicht, ‘MarkSubMenue’ auf false setzen
  5. 'ShowCssIdList', 'CssPrefixList' - Manche Benutzer haben sich gewünscht, dass die Menüpunkte automatisch eine CSS-ID zugewiesen bekommen, um sie individuell gestalten zu können. Die Einstellungen hier gelten für den “Listenpunkt”, man kann mit ‘ShowCssIdList’ auf true CSS-IDs ausgeben lassen, die sich aus der Kategorien-ID und dem ‘CssPrefixList’ zusammensetzen
  6. 'ShowCssIdLink', 'CssPrefixLink' - siehe oben, diese Einstellungen gelten jedoch für den “Link”
  7. 'CountPre', 'CountAfter' - Wenn die Produktzahl in der Navigation angezeigt wird, kann man hier die HTML-Tags und weitere Zeichen (z.B. runde oder eckige Klammern) bestimmen, die die Zählung umschließen sollen
  8. 'LinkPre', 'LinkAfter' - Manchmal ist es nötig, dass innerhalb der Links zusätzliche HTML-Tags gesetzt werden, um mehr Gestaltungs-Spielraum im Stylesheet zu haben. Hier kann man bestimmen, welche das sein sollen bzw. die Einstellung bei false lassen, wenn nichts dergleichen passieren soll
  9. 'NamePre', 'NameAfter' - siehe oben, diese Einstellungen bewirken jedoch Tags, die den Link zusätzlich umschließen
  10. 'CssMarkersToList', 'CssMarkersToLink' - Man kann hier festlegen, ob “CSS-Marker” (sofern vorhanden) zum “Listenpunkt” oder zum “Link” hinzugefügt werden. Beides ist natürlich auch möglich, meistens aber nicht sinnvoll

 

Download und Installation

Dateien-Set für xt:Commerce 3.04 SP 2.1

  1. Dieses Zip-Archiv herunterladen und entpacken:
    » xtc_ShowCategory_Advanced_20_BETA.zip
    » xtc_ShowCategory_Advanced_20_BETA2.zip (Kleiner BugFix)
    » xtc_ShowCategory_Advanced_20_BETA3.zip (Bugfix, Setzen der $cache_id)
  2. Die nötige Ordner-Struktur (ausgehend vom jeweils aktiven Template) ist im Archiv enthalten, überschreiben Sie ihre Datei “categories.php” (Ordner “source/boxes”) sowie die Datei “xtc_show_category.inc.php” (Ordner “source/inc”) und wie immer: Sicherheitskopie! Man weiß ja nie …
  3. Anpassung / Konfiguration: Ändern Sie in der Datei xtc_show_category.inc.php” die Werte ab ca. Zeile 20 (Angaben für Version 2.0 Beta). Kurze Erklärungen sind ebenfalls dabei …
  4. Wenn Sie die neuen “Marker”-Möglichkeiten nutzen möchten, bearbeiten Sie die Datei “outputfilter.note.php” (zu finden Im Ordner “includes/classes/Smarty_2.6.14/plugins”) und fügen Sie dort direkt vor
    return $tpl_output.$cop;
    Folgendes ein:
    $tpl_output=preg_replace("/({#[^#}]*#})/",'',$tpl_output);
    … damit die “Steuerzeichen” im Shop nachher auch unsichtbar sind …
  5. Beta-Version Daher wie immer der Hinweis, dass diese beiden Dateien nicht sofort in einem öffentlich zugänglichen Shop ausprobiert werden sollten. Wer testen möchte, ist natürlich herzlich eingeladen

 

Überarbeitung

Inzwischen gibt’s » hier eine weitere Version der Kategorien-Navi. Diese ist besonders für Shops geeignet, in denen geteilte Navigationen erwünscht sind