Kategorien Level 3

Hallo,

ich paße einen PE 4.7.5 an und habe folgendes Problem. Ich wollte im Menü links rekursiv immer alle vorhandene Kategorien bis Level 3 anzeigen. Also egal, ob die Kategorie Level 2 aktiv ist oder nicht.

Bezogen auf den Demoshop soll es so aussehen, wenn man sich in der Kategorie “Bekleidung” befindet:
> Bekleidung
>> Sportswear
>>> Neopren
>>> Sonstiges
>> Fashion
>>> Für Sie
>>> Für Ihn
>>> Accessoires
Also alle Kategorien bis Level 3 sollen immer sichtbar sein.

getSubCats() liefert aber nur dann die vorhandenen Subkategorien, wenn die Parent Kategorie aktiv ist. Sprich nur wenn “Sportswear” ausgewählt wurde liefert getSubCats() die Kategorien “Neopren” und “Sonstiges”.

In früheren Versionen war dies nicht der Fall und man erhielt mit getSubCats() immer alle Subkategorien unabhängig davon welche Kategorie aktiv war.

Vielleicht hat mir jemand bitte einen Tipp!?

Vielen Dank und viele Grüße,
Frank

hab nochmal ein bisschen rumprobiert und /application/models/oxcategorylist.php mit der Version aus 4.7.2 ersetzt. Jetzt funktioniert es bzw. ich kann mir von beliebigen nicht ausgewählten Kategorien die Subkategorien besorgen.
Ich weiß jetzt nicht ob das ein Bug oder ein neues Feature ist :)!? Im Admin gibt es ja aber auch keine Einstellung von wegen “Lade nur die Subkategorien > Level 2 der selektierten Kategorie”…

Viele Grüße,
Frank

sollte damit zusammenhängen, vermute ich

https://bugs.oxid-esales.com/view.php?id=4980

Die Datei komplett zu ersetzen war keine gute Idee, weil dann andere Dinge nicht mehr funktionieren :).
Es wird default wohl nur noch bis Level 2 geladen. blLoadFullTree ist als Config Wert auch nicht mehr vorhanden bei mir. Funktionieren tut es jetzt, wenn ich die Funktion buildTree($sActCat) von /application/models/oxcategorylist.php überschreibe und da $this->_blForceFull = true; setze. Ein anderer Weg wäre wohl den Parameter blLoadFullTree wieder in die Tabelle oxconfig einzufügen.
Wäre schön, wenn das eine Einstellung unter Performance wäre. Also bis zu welchem Level geladen wird. Ich bin ja vielleicht nicht der einzige der mehr Kategorien auf einmal anzeigen will!?

Viele Grüße,
Frank

Bug wieder aufgemacht und kommentar dazugepackt:

https://bugs.oxid-esales.com/view.php?id=4980#c8716

Hallo und vielen Dank!

Anmerken möchte ich noch, daß durch das neue Verhalten (nur bis Level 2 laden) hier http://demoshop.oxid-esales.com/professional-edition/Bekleidung/ bei den Icons “Sportswear” und “Fashion” im Contentbereich auch nicht mehr die vorhandenen Unterkategorien (unterhalb der Icons) angezeigt werden, obwohl dies ja in tpl/page/list.tpl vorgesehen ist.

[{if $category->getHasVisibleSubCats()}]

[{foreach from=$category->getSubCats() item=subcategory}]

[{/foreach}]

[{/if}]

Viele Grüße,
Frank

Danke, hab ich ergänzt.

Du kannst übrigens auch selbst Kommentare reinschreiben bzw. einen gefunden Bug dort eintragen.

Der Useraccount ist in 30 Sekunden angelegt: https://bugs.oxid-esales.com/

Kommentar aus der Entwicklung:
https://bugs.oxid-esales.com/view.php?id=4980#c8719

Vielen Dank - hatte ich gesehen.
Ich überschreibe jetzt den Konstuktor von oxcategorylist.php:
public function __construct($sObjectsInListName = ‘oxcategory’)
{
// $this->setLoadLevel(3);
$this->setLoadFull(true);

parent::__construct($sObjectsInListName);

}
Dann lädt er den ganzen Baum. $this->setLoadLevel(3) ging leider nicht, weil die Funktion kein Level > 2 zuläßt!?
Ganz ideal ist das leider nicht - zumal man es nicht im Admin einstellen kann und die Funktion setLoadLevel nicht das macht was sie soll. Vielleicht habe ich sie aber auch an der falschen Stelle aufgerufen!?

Viele Grüße,
Frank

Ah, so läuft der Hase! Unglaublich, mir fiel seit 2 Tagen in einem Kundenprojekt nur auf, dass diese Pfeile (categorysprite) vor den Hauptkategorien nicht mehr angezeigt werden, auch nicht :hover. Und ich suchte mich halbtot, um den Fehler im CSS zu finden… :frowning: Durch Zufall fand ich dann heraus, dass es wieder ging, wenn man im Admin “blDontShowEmptyCategories” aktivierte. Zuerst war ich noch verwirrter, aber dann hatte ich das letzte OXID-Update geprüft, und siehe da:

Richtig, von 4.7.4 auf 4.7.5 wurden “setLoadFull()” und “getLoadFull()” eingeführt (oxcategorylist), aber aus meiner Sicht fehlt es einmal innerhalb buildTree(), dort wo vorher halt “$this->_blForceFull = true;” stand. Ich habe es also dort wieder ergänzt:

public function buildTree( $sActCat  )
    {
        startProfile("buildTree");

        $this->_sActCat = $sActCat;
        $this->setLoadFull(true);
        $this->load();
        ...

und das Menü wird wieder mit Pfeilen angezeigt (d.h. eben vollständig geladen)! :slight_smile:
Mir ist dabei klar, dass die Thematik dahinter komplexer ist und sich hauptsächlich um Performance dreht. Aber in einigen Shops gibt es nicht mal 20 Kategorien, da spielt das eher keine Rolle, wichtiger ist erstmal ein funktionierendes Menü! Nur wie wäre denn nun die beste Lösung für die Zukunft?

[QUOTE=loki_;124989]Vielen Dank - hatte ich gesehen.
Ich überschreibe jetzt den Konstuktor von oxcategorylist.php:
public function __construct($sObjectsInListName = ‘oxcategory’)
{
// $this->setLoadLevel(3);
$this->setLoadFull(true);

parent::__construct($sObjectsInListName);

}
Dann lädt er den ganzen Baum. $this->setLoadLevel(3) ging leider nicht, weil die Funktion kein Level > 2 zuläßt!?
Ganz ideal ist das leider nicht - zumal man es nicht im Admin einstellen kann und die Funktion setLoadLevel nicht das macht was sie soll. Vielleicht habe ich sie aber auch an der falschen Stelle aufgerufen!?

Viele Grüße,
Frank[/QUOTE]

Dumme Frage: was meintest Du mit Überschreiben? Classe erweitern? Wenn ja, dann welche Classe? :slight_smile:
Wie ich verstehe, wird dann sowas nicht gehen:

class oxFullCategoryList extends oxCategoryList {

}

da oxFullCategoryList nirgendwo aufgerufen wird.

Funktioniert so:

class oxFullCategoryList extends oxFullCategoryList_parent{
...
}

und dann wird über die metadata.php die neue Klasse registriert:


    'extend'      => array(
       'oxcategorylist' => 'mymodule/oxfullcategorylist',
    ),

und fortan wird an allen Stellen die folgendes verwenden:

oxnew('oxcategorylist')

deine Klasse verwendet und deine Klasse erbt von oxcategorylist. Ich nehme an dass das in diesem Buch http://www.marmalade.de/shop/unsere-Lieblinge/OXID-eShop-Kochbuch.html gut erklärt wird, du kannst dir auch von https://github.com/OXIDprojects Beispiele laden und anschauen.