Willkommen Gast. Bitte anmelden oder registrieren.

Autor Thema: ACL und Kategorien  (Gelesen 1946 mal)

0 Mitglieder und 1 Gast betrachten dieses Thema.

bembelimen

  • moderatives Dielektrikum
  • Beiträge: 227
  • Ich kam, sah und zensierte...
    • Joomla! Vereinsverwaltung
ACL und Kategorien
« am: 06. Juli 2012, 01:21:29 »
Hallo, hier eine kleine Märchenstunde zur Joomla!programmierung.

Letztens wollte ich in einer Komponente das Joomla! ACL System (com_config) und die Kategorien (com_categories) benutzen. Im Prinzip bieten beide Komponenten genau das was ich für meine Komponente brauche. Hier nun die Geschichte:

Legende:
Komponente: com_examples
Views, die eine Kategorie benötigen: member, field
Übergeordneter View: memberadministration

Geschichte:
So als erstes wollte ich das ACL angehen. Ich brauchte folgende vier Bereiche:
  • die Komponente selbst
  • Der View "memberadministration", der die Berechtigungen von der Komponente vererbt bekommen soll
  • Die Views "member" und "field", die ihre Berechtigungen von "memberadministration" vererbt bekommen sollen
  • Die Kategorien "member.category" und "field.category"

Für alle Bereiche sollen die ganz normalen core.create/edit/delete/etc. gelten. Also wurden diese Bereiche entsprechend in der access.xml angelegt, kein Problem bisher. Mit com_config kann man nun seine eigene Konfigdatei parsen und schön in einem Modalpopup aufrufen. Clever wie ich bin, dachte ich mir, baue ich doch mehrere "Rules"-Felder in die config.xml ein um gleich alle Rechteeinstellungen mit einer Datei zu erschlagen. Alles wird schön angezeigt...außer dass das Speichern nicht funktioniert. Was ist passiert? Anstatt das Joomla! jede Rechteeinstellung gekapselt betrachtet wird einmal global(!!) der Bereich als versteckter Parameter gesetzt, der dann für alle anderen Bereiche auch gilt.

Ok, halb so schlimm dachte ich mir. Lade ich halt für jeden View eine eigene config.xml mit der entsprechenden Section als Feldparameter. Als erstes kann man hier im JToolbar-Button einen Pfad setzen, in dem Joomla! nach alternativen XML-Dateien sucht. Perfekt! Also alles neu, für einen View eine zweite config.xml Datei nehmen, diese in den Viewordner legen und dann entsprechend den Pfad angeben. Hat einigermaßen funktioniert (gab glaub auch irgend ein Problem, aber das fällt mir gerade nicht ein, dürfte irgendwas gewesen damit zu tun haben, dass Joomla! nochmals Hardcode nach den Helpter-Triggern zeugs überschreibt).

Nunja, jetzt soll das ganze ACL Zeugs ja verschachtelt sein...aber dazu später mehr. Auf jedenfall speichere ich nun das ganze und was passiert? Der Pfadparameter wird nicht mit übergeben, das heißt, danach wird wieder die Haupt-config.xml geladen :( Da wurde ich schon langsam leicht angepisst. Fazit: Um das umzusetzen muss ich mir das ganze selbst bauen  >:( Hab ich dann auch getan.

Das ganze war schon mal ein schlechter Beginn, aber nun frischen Mutes ran an die Kategorien. Bei den Kategorien kann man als Parameter einen "extension"-Wert mitgeben, mit dem man die Kategorien in einer eigenen Komponente nutzen kann, echt praktisch. Erster Aufruf: com_example.memberadministration.member => funktioniert. Ich erstelle die erste Kategorie ohne Probleme. Ich erstelle eine zweite Kategorie darunter...XAMPP knallt mir um die Ohren. Neu gestartet, neuer Versuch, gleiches Ergebnis. Habe ich einen Bekannten gefragt, ob er das mal testen könnte. Er hat dann Fehlermeldungen bekommen (wohl längere Scriptlaufzeit). Und was war das Problem? Eigentlich ganz simpel: com_example.memberadministration.member.category.137 sind 53 Zeichen....und irgend ein Witzbold hat gemeint, er müsse das "name" auf varchar(50) setzen...ich mein: "was zur Hölle geht in so einem Kopf vor?" man setzt doch kein varchar(!!!) Feld auf 50 Zeichen.

Ok, habe ich halt die ganzen Dinger abgekürzt. nun heißen meine extension: com_example.ma.member.category und entsprechend com_example.ma.field.category. Kann ich ja (schwer) noch mit leben. Also alle nicht mehr benötigten (=kaputten) Kategorien gelöscht und das ganze neu gestartet.

So, meine Kategorien brauchen eigene Parameterfelder, praktischerweise läd Joomla! automatisch (falls vorhanden) spezielle XML-Dateien aus der Fremdkomponente. Dooferweise wird der "extension"-Parameter aufgeteilt und nur der erste part wird genutzt. Das heißt mein com_example.ma.member versucht die category.ma.xml zu laden und die com_example.ma.field versucht die category.ma.xml zu laden...Glücklicherweise gibt es da noch einen Hook, mit dem ich dann selbst manuell das gewünschte laden kann. Auch wenn es da wohl nicht vorgesehen war. (Das Problem mit dem ignorierten Zusatzpunkt tritt u.a. auch beim "addSubmenu" etc. auf, sehr ärgerlich)

Speichern funktioniert ohne Probleme...doch was ist das? Die Kategorien werden völlig falsch an den globalen Root-Eintrag gehangen, anstatt an den View. Nach ein bisschen im Code wühlen habe ich entdeckt, dass, wenn der View nicht da ist, nicht etwa rekursiv gesucht wird, sondern direkt eine 1 (hardcode natürlich) zurück geliefert wird. Es wird nicht mal versucht das ganze an die Komponente zu hängen. Also baute ich mein ACL Konstrukt um und sorgte dafür, dass immer ein passender Ankerpunkt vorhanden ist damit es sich reinhängen kann.

Nun habe ich mir wieder 2-3 Kategorien erstellt und verschachtelt. Dann habe ich eine editiert und...keine Speicher/Apply-Buttons da...als ich nun in den Code geschaut habe und feststellen musste, dass Joomla! dafür nicht etwa com_example.ma.member.category testet oder com_example.ma.category sondern direkt com_example.category (was genau 0 mit dem ganzen zu tun hat), da hats mich verlassen und ich habs selbst gebaut.

Ich frag mich ja in solchen Momenten immer, ob ich der einzige bin, der solche Probleme hat? Nutzt niemand sonst die Corefunktionen? Wie machen es die anderen? So gut die Platform von Joomla! auch ist, das CMS ist doch aus Codersicht der größte sch***. Überall Zeugs, wo einfach nicht weiter gedacht wurde. Beschränkungen, Denkfehler (don't try to code smart) und und und. Habt ihr auch solche Erfahrungen machen müssen? Baut ihr prinzipiell alles selbst oder wie sieht das bei euch aus? Oder mache ich einfach etwas falsch?
Joomla! ist auch nur ein Mensch...

Firstlady

  • Pink Berserk (Mod)
  • Beiträge: 190
    • www.chmst.de
Antw: ACL und Kategorien
« Antwort #1 am: 25. August 2012, 15:09:29 »
Zitat
Ich frag mich ja in solchen Momenten immer, ob ich der einzige bin, der solche Probleme hat? Nutzt niemand sonst die Corefunktionen? Wie machen es die anderen? So gut die Platform von Joomla! auch ist, das CMS ist doch aus Codersicht der größte sch***. Überall Zeugs, wo einfach nicht weiter gedacht wurde. Beschränkungen, Denkfehler (don't try to code smart) und und und. Habt ihr auch solche Erfahrungen machen müssen? Baut ihr prinzipiell alles selbst oder wie sieht das bei euch aus? Oder mache ich einfach etwas falsch?

Aha! Gut zu wissen. Ich dachte immer, ICH mache alles falsch! Dass im CMS Vieles angedacht aber niemals richtig durchdacht wurde habe ich in den letzten Monaten ausgiebigst kennen gelernt und diese Themen haben mich einiges gekostet. Ich bin nicht so tief in die Materie eingedrungen wie du. Hätte ich deine Probleme gehabt, ich hätte wohl aufgegeben oder einen Kollegen engagiert :)
Ich vernmute mal, dass die meisten einfach aufgeben und das Problem der (nicht vorhandenen) Lösung anpassen.
Vor allem, weil diese wundervollen selbst geschriebenen Lösungen möglicherweise bei dem wahnsinnigen Versionskonzept schon bald nicht mehr funktionieren.
Aber wenn es dich gelüstet - im user-Bereich gibt es auch ein paar Stellen, an denen man sich aufregen kann.

Und schreib deine Märchen unter einer Lizenz!
Grüße, Christiane

addi

  • Bestätigter Nutzer
  • Beiträge: 26
Antw: ACL und Kategorien
« Antwort #2 am: 04. September 2012, 22:31:14 »
G oo gle
J oo mla
B oo strap

Kleiner Scherz.

Joomla-Hilfe

  • Oberwetterfrosch (Mod)
  • Beiträge: 155
Antw: ACL und Kategorien
« Antwort #3 am: 05. September 2012, 16:11:08 »
Da fehlt ein t, wenn der Scherz funktionieren soll ;)
Dietmar

Die Realität ist eine Halluzination, die durch akuten Alkoholmangel hervorgerufen wird.