Blogpotato

xt:C und semantisch korrekter Code

16.11.2006 26 Kommentare

Zwei Welten prallen aufeinander. Definitiv. Aber bevor man sich an irgendwelche Erweiterungen für xt:Commerce macht sollte man erstmal den absolut grausigen Quellcode ausmisten.

Ein besonderes Übel stellt die Kategorien-Navigation dar. Verschachtelte Tabellen, über Non-Breaking-Spaces erreichte Einrückungen, Hover-Effekte mittels Javascript, Web-Design aus der Steinzeit quasi.

<table width="100%" border="0" cellspacing="0" cellpadding="2">
<tr>
<td class="infoBoxHeading">
<table width="100%" border="0" cellspacing="0" cellpadding="0" >
<tr>
<td class="infoBoxHeading">Kategorien</td>
<td width="10"></td>
</tr>
</table>
</td>
</tr>
<tr>
<td class="infoBox" align="right">
<table width="95%" border="0" cellspacing="0" cellpadding="2" >
<tr>
<td class="boxText">
<table width="100%">
<tr>
<td class="moduleRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)"><img src="templates/xtc4/img/icon_arrow.jpg"/> <b><a href="#"><b>Kategorie I</b></a></b><br />
 -   <a href="#">Unterkat I</a><br />
 -   <a href="#">Unterkat II</a><br />
</td>
</tr>
</table>
<table width="100%">
<tr>
<td class="moduleRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)"><img src="templates/xtc4/img/icon_arrow.jpg"/> <b><a href="#">Kategorie II</a></b><br />
</td>
</tr>
</table>
</td>
</tr>
</table>
</td>
</tr>
</table>

Zum Glück haben das auch schon andere erkannt und so musste ich nicht alles neu schreiben, bei gunnART findet sich dankenswerterweise bereits eine geänderte xtc_show_category.inc.php. Die hat nur einen Schönheitsfehler: Die Listen sind nicht ineinander verschachtelt, wenn es gilt, tiefere Ebenen darzustellen, wird das ganze lediglich durch CSS und damit nur optisch erreicht:

<ul>
   <li class="maincat submenue"><a class="gewaehlt" href="#">Kategorie I</a></li>
   <li class="subcat level1"><a href="#">Unterkat I</a></li>
   <li class="subcat level1"><a href="#">Unterkat II</a></li>
   <li class="maincat"><a href="#">Kategorie II</a></li>
</ul>

Sicherlich schon ein riesiger Fortschritt, wenn man sich es mit dem ursprünglichen Tabellenchaos vergleicht, aber noch nicht der Weisheit letzter Schluß. Das ist mein php-Code möglicherweise auch nicht, der auf der Version von gunnART basiert, aber er erzeugt das, was man haben will: Listen, die korrekt ineinander verschachtelt sind, um so auch denen, die ohne oder mit deaktivierten Stylesheets durch das Web surfen, die Möglichkeit zu geben, Unterkategorien problemlos zu erkennen.

<ul>
   <li><a href="#">Kategorie I</a>
    <ul>
         <li><a href="#">Unterkat I</a></li>
         <li><a href="#">Unterkat II</a></li>
      </ul>
   </li>
   <li><a href="#">Kategorie II</a></li>
</ul>

Die angepasste Version von xtc_show_category.inc.php gibt es zum Download:

xtc_show_category.inc.phps.

Speichern, in das Verzeichnis /source/inc/ des verwendeten Templates legen, nach xtc_show_category.inc.php umbenennen, fertig.

[tags]xtc, xt:commerce, xtcommerce, semantic code, css, html, unordered lists, nested[/tags]

26 Kommentare Kommentieren

  1. pufaxx

    Korrekt verschachtelt? Prima, Deinen Code werd ich auf jeden Fall ausprobieren.

    Vielen Dank!


  2. pufaxx

    Ich hab noch etwas Feines gefunden: Wirf doch mal einen prüfenden Blick auf CubeCart.

    Meinen persönlichen ersten Eindruck hab ich vorhin auf meiner Website zusammengefasst: http://www.gunnart.de/?p=196 – mehr folgt nach intensiveren Tests. Ob das System im hiesigen eCommerce-Haifischbecken für den echten, “produktiven Einsatz” tauglich ist, kann ich noch nicht sagen, dazu habe ich noch nicht genügend damit herum experimentiert. Vermutlich hilft dann die ein oder andere Frage an den Support – und vermutlich muss man hier und da in Eigenregie ein wenig nachbessern. Aber wo ist das nicht so?

    Eine Test-Installation sollte CubeCart auf jeden Fall wert sein.

    Viele Grüße aus Fürth,

    Gunnar


  3. tommy

    Vielen vielen Dank für dieses Listing!

    Mir ist noch ein kleiner Fehler aufgefallen:

    Der Code

    $this->ul

    produziert bei mir (xt:C 3.04 SP 2) einen Fehler. Muss ich die Funktion noch in irgendeine Klasse packen? Ich habe aus diesem Konstrukt nun einfach überall eine normale Variable gemacht.

    Beste Grüße,
    tommy


  4. Matt

    Da sollte eigentlich auch eine normale Variable stehen, da die ausreichend ist.

    Trotzdem sollte es auch mit

    $this->ul

    statt

    $ul

    laufen, es tut es zumindest hier…


  5. geldi

    Diese
    xtc_show_category.inc.php

    funktioniert nicht bei mir mit XTCommerce 3.04 SP1.

    Fatal error: Call to undefined function xtc_show_category() in …/source/boxes/categories.php on line 117

    In Zeile 117 steht in der categories.php steht.

    xtc_show_category($first_element);

    Hm…


  6. Matt

    Die hier angebotene Datei enthält diesbezüglich keinen Fehler. Die bemängelte Funktion beginnt in Zeile 30.
    Also am besten mal bei der eigentlichen Installation prüfen, ob mit der Datei alles korrekt ist.


  7. zahni9999

    sehr schöne sache mit der geschlossenen listen anordnung, jedoch komme ich mit den css klassen noch nicht klar.
    es gibt haupt, unter und unterunter kategorien, jedoch wird eine “unter kat.” class mit “sub xxx” bezeichnet, und eine “unterunter kat.” auch mit “sub xxx” müßte dies nicht “subsup xxx” lauten?

    kann man dies noch dazu erweitern?

    classen:
    main normal = Haupt Kat. ohne Unterkat.
    main submenu = Haupt Kat. mit Unterkat.
    sub normal = Unter Kat. ohne UnterUnter Kat.
    sub submenu = Unter Kat. mit UnterUnter Kat.

    sub normal = UnterUnter Kat. ohne UnterUnterUnter Kat.
    sub submenu = UnterUnter Kat. mit UnterUnterUnter Kat.


  8. Matt

    Die letzten beiden zeilen sollen wohl
    supsub normal = UnterUnter Kat. ohne UnterUnterUnter Kat.
    supsub submenu = UnterUnter Kat. mit UnterUnterUnter Kat.
    lauten, sonst haben wir ja genau das, was wir derzeit haben.

    Aber andersrum wäre es eigentlich richtig, man könnte das noch verkürzen, die Unterscheidung nach main und sub ist durch die Verschachtelung gar nicht mir nötig.

    Angenommen, die Liste steht in einem Container mit der id #boxCategories:
    #boxCategories > ul wäre dann die Hauptkategorie.
    #boxCategories > ul > li > ul die zweite Ebene usw.

    Leider unterstützt der IE diesen Selektor erst ab Version 7. Daher macht es durchaus Sinn, der Hauptkategorie eine eigene Klasse zuzuweisen, um direkt auf diese zugreifen zu können.

    Auf die übrigen Ebenen kann man derzeit auch ohne >-Selektor mittels #boxCategories ul ul zugreifen. Dabei muss man aber beachten, dass das dann auch für die dritte Ebene usw. gilt, also immer, wenn sich innerhalb #boxCategories eine Liste innerhalb einer Liste befindet. Diesen Umstand kann man sich aber beispielsweise zunutze machen, um jeder Liste einen linken Einzug von 1em zu verpassen, wodurch diese immer weiter einrücken, ohne die genaue Verschachtelungstiefe kennen zu müssen. Dafür würde
    #boxCategories ul ul {
    margin-left: 1em;
    }
    genügen.


  9. michael

    hi, spitze das Teil, aber warum werden die Sublisten nicht gleich ausgegeben sondern erst auf Klick?
    Kann man das nicht so umbauen das die komplette Liste sofort ausgegeben wird, also mit Unterkategorien und Unterunterkategorien…

    Gruss
    Michael


  10. Steffan

    Hi ich habe auf shop.joundjos.de dein Script mal eingebaut. Leider sieht das jetzt aufgrund der langen Kategorienamen ziemlich schlecht aus, da der Abstand (tabstop) beim untermenü so extrem weit eingerückt wird. kann ich diesen Abstand irgendwo ändern?

    Ach und die Frage von michael (ob man die kategorieansicht so ändern kann, dass unterkategorien immer angezeigt werden) interessiert mich auch brennend.

    würde mich über eine antwort sehr freuen, denn aufgeräumter code gefällt mir besser *grins*

    danke!
    Steffan


  11. Matt

    Du kannst den Abstand über
    #boxCategories ul ul {
    margin-left: 1em;
    }
    beeinflussen. Das auf einen niedrigeren Wert (z.B. 0.2em) setzen, dann ist der linke Einzug auch nicht mehr so groß.

    Zur Anzeige auch der Unterkategorien kann ich nichts sagen. Aber man könnte sich beispielsweise mal den Code anschauen, der im Admintool das entsprechende Dropdown füllt und diesen adaptieren.


  12. Martin

    Wenn ich die datei xtc_show_category.inc.php mit deiner datei überschreibe . Bekomme ich beim Aufruf des Shops nur noch den Quelltext der xtc_show_category.inc.php zu sehen


  13. zahni9999

    wie kann man den gerade aktiven li punkt hervorheben?


  14. arne

    das ist nicht so einfach, meines erachtens :/

    vielleicht kann ja jemand dafür eine schleife schreiben;

    >Test

    list_a muss nun gesondert Formatiert werden (Block; anderer Hintergrund usw..)

    ?id=010 ist mein “link”, welcher oben in der adressleiste stehen muss, kann natürlich gegen irgendwas anderes getauscht werden…

    einfach mal testen, so habe ich es bei anderen projekten versucht zu lösen.

    mfg


  15. jason

    war gerade dabei die “old” Version von xtc zu verstehen, und bin nun hier im detail. Wie kann ich einstellen, dass nur subkategorien angezeigt werden, da ich eine topnavigation seperat habe.
    gibt mir einer einen hint ? wollte schon gleich eine if-schleife mit level==1 vor if(empty..) beginnen, kriegs aber nicht gebacken,… danke.


  16. Matt

    Die oberste Ebene hat level 0.

    if-Schleifen gibt es im übrigen nicht.


  17. Zfen

    Sehr großes Dankeschön für dieses großartige Script. Schön, dass es für XT noch kostenloses gibt.


  18. Emil

    Funktioniert nicht mit Version v3.0.4 SP2.1.
    Es wird nur der Quelltext angezeigt…

    Schade,

    Emil


  19. Matt

    Was dann aber eher an der Server-Config liegt und weniger an der Datei


  20. roberto

    hallo, wie programmiert man das als divmenu um so das jeder navigationspunkt ein eigenes layer erhält?

    tiefe und zustand soll über background-image in der css gestaltet werden der text wird dann quasi “eingerückt”


  21. Matt

    Roberto, es gibt keinen Grund, das auf irgendwelche DIV-Suppen umzubauen, schon gar nicht unter dem Gesichtspunkt der Zugänglichkeit.

    Alles, was du machen willst, lässt sich mit Listen wesentlich leichter erreichen. Jede Menge Anregungen dazu findest du hier: http://www.cssplay.co.uk/menus/


  22. Denis

    sag mal ist es auch möglich die subkategorien immer darzustellen, also praktisch auch schon auf der startseite?


  23. Matt

    Ja, aber aufgrund der Struktur der DB wird das etwas anstrengend, wenn du tief verschachtelte Unterkategorien hast.


Trackbacks/Pingbacks
  1. Advanced Show Category - Mehr Funktionen für xt:Commerce (gunnART - Grafik, Layout, Konzeption) - Saturday, 16. June 2007

    [...] “hierarchische” Variante kam bald darauf von Matt Slovig – Und auch Björn Teßmann der u.a. das YAML-Framework [...]

  2. Blogpotato » Blog Archive CSS-basiertes xt:Commerce-Template auf YAML-Basis » - Tuesday, 19. June 2007

    [...] arne zu xt:C und semantisch korrekter Code: das ist nicht so einfach, meines erachtens :/ vielleicht kann ja jemand… [...]

  3. xt:commerce - Symantische Kategorieliste | The Daily Workbook - Monday, 25. June 2007

    [...] das Rad ungern neu, doch waren mir die Ergebnisse, die ich bei Gunnar Tillmann1 und Matthias Slovig2 fand, noch nicht genug :). Es musste noch kürzer [...]

Kommentieren





zurücksetzen