Erweiterung der Klasse cCategoryHelper()

Ideen für neue Funktionen in CONTENIDO?
Antworten
Faar
Beiträge: 1460
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Erweiterung der Klasse cCategoryHelper()

Beitrag von Faar » Sa 4. Mai 2019, 11:06

Hallo, i bims.
Mir passt die cCategoryHelper-Klasse in manchen Dingen nicht.
https://api.contenido.org/con4911/class ... elper.html

1. Da wäre die Methode getSubCategories(), die außer subcategories noch jeden anderen Scheiß mit ins Array rauswirft, darunter so heikle Daten wie die Zugangsdaten der Datenbank. Die haben in einem Array für Unterkategorien nichts zu suchen.
Das Ergebnis ist viel zu aufgebläht ("Die Maus kreiste und gebar einen Berg").
Welche Möglichkeiten gäbe es da, dieses zu verändern?
Wie mir ein freundlicher Entwickler mal erklärte, kann man das nicht einfach ändern, aus Gründen der Kompatibilität.
Also bliebe nur eine neue Methode mit etwas anderem Namen.

2. Es gibt keine Möglichkeit, dass man für eine Navigation Levels übergeben kann. Bei der Methode getCategoryPath() gibt es den Parameter $startingLevel, aber nicht bei getSubCategories().
Die Tiefe $depth ist überall definiert aber kaum irgendwo der Anfang.
Was fehlt, ist der Parameter $startingLevel, der jedoch global für alle Kategoriehierachien gilt.
Es gibt verschiedene Module hier und Ansätze, wie man Menüs erst am einem bestimmten Level anzeigen lassen kann, aber so generell hatte das lediglich das "Kummer" Menü, das mit einer eigenen Klasse arbeitet (ja, es läuft auch jetzt noch mit PHP 7.x und Con 4.9 und sicher auch 4.10) und somit das "Wissen" in der Klasse hat, welcher Menübaum gerade geöffnet ist.
Das Kummer-Menü lässt sich splitten, die navigation_main nicht.

Nehme ich die navigation_main einfach zweimal, listet sie auch zweimal das gleiche Menü auf.
Theoretisch nicht grundsätzlich falsch, aber es fehlen die Einstellungen, wie man es splitten könnte und den Startlevel übergibt.
Hier wäre die categoryHelper Klasse wieder gefragt.
Diese hat in der Methode getsubcategories jedoch keinerlei Bezug zum Level.
Der wird erst durch eine extra Methode getCategoryLevel() geliefert, die nichts wesentlich anderes tut als den Level aus der Tabelle con_cat_tree auszulesen.

Sinnvoll wäre vielleicht eine interne Verknüpfung der beiden Methoden innerhalb der Klasse, oder?
Wegen der Kompatibilität sollte das eher gehen, wenn die Methode die bisherigen Daten weiter so ausliefert wie gehabt. Lediglich durch zusätzliche Parameter (die einen Default Wert bekommen könnten), sollte die Methode erweitert werden.

Vielleicht ist das alles zu umständlich und es wäre besser, eine neue Kategorie-Klasse aufzubauen?
:|
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

McHubi
Beiträge: 1080
Registriert: Do 18. Nov 2004, 23:06
Wohnort: Mettmann
Kontaktdaten:

Re: Erweiterung der Klasse cCategoryHelper()

Beitrag von McHubi » So 5. Mai 2019, 18:56

Nehme ich die navigation_main einfach zweimal, listet sie auch zweimal das gleiche Menü auf.
Theoretisch nicht grundsätzlich falsch, aber es fehlen die Einstellungen, wie man es splitten könnte und den Startlevel übergibt.
Hm. Nur so ein Gedanke ins Blaue, aber wenn Du das Modul ein zweites Mal anlegst und in der Modulausgabe direkt unterschiedliche Startpunkte definierst bzw. übergibst?

Code: Alles auswählen

// get client settings
$rootIdcat = getEffectiveSetting('navigation_main', 'idcat', 1);
$depth = getEffectiveSetting('navigation_main', 'depth', 3);
seamless-design.de
"Geht nicht!" wohnt in der "Will nicht!"-Strasse.

(NEU!) Das Handbuch zur Version 4.10: CONTENIDO für Einsteiger (4.10)

Das Handbuch zur Version 4.9: CONTENIDO für Einsteiger (4.9)

Faar
Beiträge: 1460
Registriert: Sa 8. Sep 2007, 16:23
Wohnort: Brandenburg
Kontaktdaten:

Re: Erweiterung der Klasse cCategoryHelper()

Beitrag von Faar » Mo 6. Mai 2019, 08:50

McHubi hat geschrieben:
So 5. Mai 2019, 18:56
Hm. Nur so ein Gedanke ins Blaue
Hallo, ich war nicht betrunken :shock:
aber wenn Du das Modul ein zweites Mal anlegst und in der Modulausgabe direkt unterschiedliche Startpunkte definierst bzw. übergibst?

Code: Alles auswählen

// get client settings
$rootIdcat = getEffectiveSetting('navigation_main', 'idcat', 1);
$depth = getEffectiveSetting('navigation_main', 'depth', 3);
Man kann schon ein zweites Modul aufbauen, aber dann haben wir das Problem der unterschiedlichen Startpunkte die man eingeben muss.
Oft ist bei einer sauberen Installation noch die catID =1 quasi das "home", also der Anfang des Kateogriebaumes.
Sowie ich mich aber in einem Baum in einem Ast befinde und von dort aus nur den Level 2 anzeigen lassen möchte, ist nicht der Startpunkt = 1 sondern irgendeine ID die sich zudem je nach Kategorieast verändert. Also mit EffektiveSetting ist da nicht mehr.
Ich müsste also als Modul je Baum und Je Ast heraus finden, wo ich mich befinde und in diesen Verknüpfungen aus ParentID und SubID auch noch Level 2 ermitteln können, um von da aus das Menü zu starten. Und das dynamisch, weil es soll ja für eine Standardvorlage nur genau ein solches Level-Menü geben. Sonst müsste ich für jeden Menüast und -Baum jeweils eine Vorlage mit eigenem Menümodul erstellen und hätte dann ein Problem, sowie jemand an den Kategorien arbeitet.
Das CMS soll ja flexibel und dynmisch bleiben.
Fliegt der Bauer übers Dach, ist der Wind weißgott nicht schwach.

Antworten