Shop Support News Archive - Shopbetreiber News -> Forum : Nur Menulevel Mit Produktinhalt Anzeigen?
Hallo,
ich stehe z.Zt. vor folgendem Problem:
Ich habe diesen Menuaufbau.
Hersteller
--Modell
----Modellvariante1
------Produkt1
------Produkt2
------Produkt3
------Produkt4...
----Modellvariante2
----Modellvariante3
Die z.Zt existieren nur Produkte für Modellvariante1 darum wäre es super, wenn bei Klick auf Modell der Menubutton "Modellvariante1" ausgeblendet werden könnte und die Produkte direkt angezeigt werden.
Hintergrund für dieses umständliche Vorgehen ist, das Erhalten der Url-Struktur wenn Modellvariante2&3 zur Verfügnung stehen.
Könnt ihr mir da weiterhelfen?
web-in-time
29.09.2007, 00:03
Hi nico65,
ich hab' mal eine Erweiterung programmiert, mit der Kategorien - und natürlich auch Unterkategorien - nur angezeigt werden, wenn sie mindestens ein "aktives" Produkt, das auch in einer Unterkategorie stehen kann, enthalten.
Ist das was für Dich? Kannst Dich gern bei mir melden. PM, email, was auch immer...
Ben
Hast Du das als "Kategorien" oder als "Optionen" angelegt?
Letzteres ist (je nachdem, wie "ordentlich" es reagieren soll) ein bisschen Fummelkram, da wäre dann auch die Frage "Filter" oder "Suche nach" ... Davon hängt es ab, an welcher Stelle man seinen Shop aufbohren muss. Hab ich schon eine fertige Liste, aber möchte aus den Ergebnissen nur die "roten" anzeigen und von denen dann alles in Größe 43? Oder soll eine Suche nach allem, was 43 ist ausgelöst werden? ...?
Wenn's Dir aber nur darum geht, keine leeren Kategorien ausgeben zu lassen - Gibt's bei mir ne Lösung kostenlos zum Download.
Hi,
ich danke euch schon mal für die Vorschläge. Woran ich dachte ist wohl in der Tat etwas schwierig zu realisieren, da ja sehr viele Funktionen von der Kategorisierung abhängen.
Meine Idee war es den Menupunkt bzw. die Kategorie "Modellvariante" nurgendwo erscheinen zu lassen außer in der url solange es nur eine Modellvariante gibt.
Das ist vermutlich ohne massive Änderung des ganzen Systems gar nicht zu realsieren oder?
Eine andere Idee ist die Produkte unter Modell abzulegen aber die URLs mittels mod_rewrite umzuschreiben. so dass in der URL vor dem /produkt.html ein /modellvariante1/ eingefügt wird.
Z.zt setze ich direkt url ein.
Ist das damit grundsätzlich überhaupt möglich.
... also
a) "leere" Unterkategorien ausblenden
b) alle Unterkategorien ausblenden, sofern es nur eine "gefüllte" Unterkategorie gibt
c) im Falle von b) von der Oberkategorie aus direkt in die erste "gefüllte" Unterkategorie weiterleiten ...?
... muss ich mal drüber nachdenken ... es könnte klappen, bei jeder Produkt-/Kategorien-Auflistung die ID der aktiven Kategorie festzustelln und zu prüfen, ob diese aktive Kategorie weitere Unterkategorien hat. Wenn ja - wie viele der enthaltenen Unterkategorien NICHT leer sind. Wenn's nur eine ist, xtc_redirect(); in die gefundene Kategorie ausführen ...
Hi Pufaxx,
Ja genau so hatte ich mir dass vorgestellt.
''>ZITAT(pufaxx @ Sep 30 2007, 0:36) 34606
a) "leere" Unterkategorien ausblenden
b) alle Unterkategorien ausblenden, sofern es nur eine "gefüllte" Unterkategorie gibt
c) im Falle von b) von der Oberkategorie aus direkt in die erste "gefüllte" Unterkategorie weiterleiten ...?
[/b]
Ich danke dir schon mal sehr für deine Mühe.
Wenn du das hinbekommst, kannst du mir gerne ne PM schreiben was du für die Programmierung haben möchtest.
Ich könnte mir vorstellen das dies auch für andere Interessant sein könnte die ihren Shop neu aufbauen und sich schon gedanken über die spätere Struktur machen.
Ein ähnliches Problem hab ich momentan ebenfalls zu lösen ...
Was natürlich auf jeden Fall (so als erste Notlösung) klappt, ist eine entsprechende Weiterleitung in der .htaccess (die im Hauptordner des Shops) ... Das klappt problemlos, und man muss nichts weiter an seinem System tun. Allerdings ist dann jedes Mal "Handarbeit" fällig, wenn sich etwas ändert bzw. wenn eine weitere, in gleicher Weise "unvollständige" Produktgruppe angelegt wird.
Da ich aber grad n paar andere Sachen zuerst erledigen muss, ist bei mir jetzt vorerst die "nicht-dynamische" Schnell-Lösung im Einsatz. Und weil nicht alle Tage die Kategorien- und Artikelstruktur umgebaut werden wird, taugt das auch erst einmal so. Bloß für den dauerhaften Einsatz wäre es natürlich schon sehr viel praktischer, wenn man das Ganze nach oben genannten "Regeln" automatisieren könnte.
Bei beiden Lösungen ("Produkt-Kategorien-Zählung und xtc_redirect" und der "Notlösung Redirect via .htaccess") landet man natürlich weiterhin de facto in einer Unter-Unterkategorie - man hat ja im Endeffekt nur "einen Klick übersprungen" - demnach würde sich das Kategorien-Menü entsprechend weiter aufklappen und die Breadcrumb-Navi würde auch so aussehen, als wäre man "ganz normal" mit "mehrfach-Klicks" in diese Kategorie gelangt ...
Aber ich schätze mal, dass es nur darum geht, diese "Leer-Klicks" zu sparen, damit die Besucher eben sofort die kaufbaren Produkte finden ... oder?
Wie dem auch sei - ich meld mich, wenn ich etwas Automatisches gebastelt hab.
:-)
''>ZITAT</div>
Aber ich schätze mal, dass es nur darum geht, diese "Leer-Klicks" zu sparen, damit die Besucher eben sofort die kaufbaren Produkte finden ... oder? [/b]
Ja genau und das Menu sollte auch nicht diese (solange nur eine) Unterkatetgorie anzeigen
''>ZITAT</div>
Wie dem auch sei - ich meld mich, wenn ich etwas Automatisches gebastelt hab.[/b]
das ist Klasse ich danke dir.
Wobei, ich halt plane den Shop in den nächsten zwei Wochen online zu stellen. und da ab dem Zeitpunkt dann auch mit der Suchmaschinenoptimierung begonnen wird, würde es für den Shop dann keinen Sinn mehr machen.
Aber interessant wäre der Hack auf jeden Fall, für evtl. spätere Projekte.
... ich denke, die Weiterleitung in die gewünschte Unterkategorie dürfte nicht allzu kompliziert umzusetzen sein. Aber es könnte eventuell "Fummelkram" werden, ein "Weiter-Aufklappen" der Kategorien-Navigation zu verhundertn ...
... ich glaub, ich hab's ...
Folgendes in die boxes.php Deines Templates einbauen (denn das ist so ziemlich das erste, was im Shop "ausgeführt" wird):
redirectToSubCats();
function get_CurrentCat() {
****$CategoryPath = explode('_',$GLOBALS['cPath']);
****$CurrentCat = array_pop($CategoryPath);
****if($CurrentCat != '')
********return $CurrentCat;
****else
********return 0;
}
function CountCatProducts($category_id=false) {
****if(!$category_id)
********$category_id=get_CurrentCat();
****$CountCatProductsQuery = ****"select count( ) as total
********************************from ****" . TABLE_PRODUCTS . " p,
********************************" . TABLE_PRODUCTS_TO_CATEGORIES . " p2c,
********************************" . TABLE_CATEGORIES . " c
********************************where ****p.products_id = p2c.products_id
********************************and ****p.products_status = '1'
********************************and ****p2c.categories_id = '" . $category_id . "'
********************************and********c.categ ories_id = '" . $category_id . "'
********************************and********c.categ ories_status = '1' ";
****$CountCatProductsQuery = xtDBquery($CountCatProductsQuery);
****$CountCatProducts = xtc_db_fetch_array($CountCatProductsQuery,true);
****return $CountCatProducts['total'];
}****
function redirectToSubCats($category_id=false) {
****if(!$category_id)
********$category_id=get_CurrentCat();
****$Counter = 0;
****$SubcatsFilled = false;
****$SubcatsQuery = "select categories_id
********************from " . TABLE_CATEGORIES . "
********************where parent_id = '" . $category_id . "'
********************and categories_status = '1'";
****$SubcatsQuery = xtDBquery($SubcatsQuery);
****while ($Subcats = xtc_db_fetch_array($SubcatsQuery,true)) {
********if(intval(CountCatProducts($Subcats['categories_id'])) > 0) {
************$SubcatsFilled[$Counter] = $Subcats['categories_id'];
************$Counter++;
********} else {
************redirectToSubCats($Subcats['categories_id']);
********}
****}
****if($SubcatsFilled) {
********if(count($SubcatsFilled)==1) {
************echo('Weiterleiten in Kategorie'.$SubcatsFilled[0]);
************//print_r($SubcatsFilled);
********} else {
************echo('Es gibt mehrerer Unterkategorien!');
************//print_r($SubcatsFilled);
********}
****}
}
- Statt redirects sind hier erstmal nur "Kontrollmeldungen" drin ...
- getCurrentCat = Findet die ID der aktuellen Kategorie heraus.
- CountCatProducts = Zählt alle "eingeschalteten" Produkte (aber nur innerhalb "eingeschalteter" Kategorien)
- redirectToSubCats = ist quasi die Hauptfunktion ...
redirectToSubCats: hat die ID der gewählten Kategorie als Startwert, denn nur von der müssen die Eigenschaften der untergeordneten Kategorien ermittelt werden.
Es werden alle direkt untergeordneten, "eingeschalteten" Kategorien ermittelt und die Anzahl der enthalteten Produkte gezählt. Bei "leer" - Rekursion, denn viellenicht hat die Unterkategorie ja wieder Produkte (das war ja das, was Du brauchtest, oder?)
Bei "gefüllt" (also mehr als Null) wird die ID der gefundenen Kategorie in $SubCatsFilled gewissermaßen als "Treffer" notiert und es gibt keinen "Selbstaufruf".
Am Ende wird schließlich nachgeguckt, wie viele und welche gefüllte Kategorien in $SubCatsFilled gefunden worden und - Wenn nur eine, dann Weiterleitung an die ID des einzigen "Treffers" wenn mehr, dann läuft alles wie gewohnt ...
... So die Rnichtung müsste das funktionieren - Allzu genau hab ich's nicht getestet - Denn wie's der Teufel so will: Ich muss DOCH nicht in Unterkategorien weiterleiten - Es gibt Kategorien mit nur einem einzigen Produkt (das dafür aber um die 100 Optionen hat) - und es soll im Falle einer "Ein-Produkte-Kategorie" direkt auf diese Einzel-Artikel weitergeleitet werden ...
:wacko:
Schiet - Muss ich also noch mal ran.
Ich muss das aber morgen nochmal in ruhe durchtesten grad fehlt mir die nötige Ruhe, im Moment bin ich mir nicht so sicher ob das funktionieren kann.
Wenn nämlich bei diesem aufbau:
Hersteller
--Modell1
----Modellvariante1
------Produkt1
------Produkt2
------Produkt3
------Produkt4...
----Modellvariante2
----Modellvariante3
--Modell2
--Modell3
--Modell4
.
.
.
auf Hersteller gezeigt wird, zeigt dein Script beide Meldungen an also "Weiterleiten in Kategorie302Es gibt mehrerer Unterkategorien!".
Auf der Startseite erscheint folgende Meldung:
Weiterleiten in Kategorie302Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Weiterleiten in Kategorie162Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Es gibt mehrerer Unterkategorien!Weiterleiten in Kategorie301
Und dann wäre natürlich noch interessant ob der Menu button bei erfolgreicher Weiterleitung auch tatsächlich unterdrückt werden kann.
Wie gesagt - da sind sicherlich ein paar Fehler drin sind - Einer hat sich bei mir z.B. vorhin bemerkbar gemacht - Die Art und Weise, wie die "CurrentCat" festgestellt wird, ist schonmal nicht ganz in Ordnung ...
Ich hab mich dadurch vorhin zumindest "ausgesperrt", die ganzen Anmelde-Seiten wurden nämlich ungewollterweise auch dauernd umgeleitet, so dass Anmelden nicht mehr möglich war. Allerdings ist bei mir ich ShopStat installiert - und ich bin ja grad dabei, die Geschnichte so umzuschreiben, dass zusätzlich "Einzelprodukte" zum "direkt-dorthin-Leiten" bemerkt werden ... Der Fehler kann auch woanders stecken ... Außerdem rappeln bei mir vor dem üblichen xt:C-Ablauf ohnehin schon etliche Funktionen und Prüfungen durch, die teilweise ebenfalls unter bestimmten Umständen redirects auslösen müssen ("Plus-Minus-Knöpfe für Warenkorb", "Sortier-Filter, die bei ausgefülltem Bla wieder auf Null gesetzt werden" etc.) ...
Was bei mir klappt, könnte bei Dir viellenicht für Schwierigkeiten sorgen - oder auch umgekehrt.
So vom Ansatz her passt die Sache aber schon fast ...
Ach ja - Der Aufruf von redirectToSubCats muss übrigens an den Anfang der boxes.php, sonst gibt's immer "Headers allready sent"-Fehler ...
:-)
Ja es gibt auch einige merkwürdige Templateveränderungen, die durch das efa modul (Schriftvergrößerung) ausgelöst wird.
..Shopstat und direct url unterscheiden sich vermutlich relativ stark.
Na ja, schauen wir mal.
vBulletin® v3.8.4, Copyright ©2000-2012, Jelsoft Enterprises Ltd.