Menü-Abstraktion im PIP und CacheBuilder

    • Official Post
    App
    WoltLab Suite Core

    Hallo,


    ich fände es ganz praktisch, wenn es sowohl ein abstraktes Menü-PackageInstallationPlugin und einen abstrakten Menü-CacheBuilder gäbe, die sich um die bisher üblichen Attribute kümmern (packageID, menuItem, parentMenuItem, menuItemLink, menuItemIcon, showOrder, permissions, options).


    Nimmt man eines der bisherigen PackageInstallationPlugins, so ließe sich das eigentlich auch relativ einfach umsetzen, indem man konsequent das Attribut $tableName verwendet und analog zum RateableObjectPackageInstallationPlugin das Tabellenpräfix und die Tabellennummer dynamisch bestimmt (in diesem Fall aber direkt für den Namen der entsprechenden Tabelle und nicht als Inhalt einer Zeilenzelle).


    Somit müsste man, wenn man ein eigenes Menü erstellt, nur ein vom abstrakten Menü-PackageInstallationPlugin erbendes PackageInstallationPlugin erstellen, das nur noch $tagName und $tableName setzt.


    Analoges kann man auch mit den CacheBuildern machen, wo man dann einerseits ein Attribut für das Tabellenpräfix, die Tabellennummer und den Tabellennamen braucht.


    Dass das Ganze auch dem bereits bestehenden Framework zugute käme, sieht man leicht, wenn man den Quelltext der Dateien UserProfileMenuPackageInstallationPlugin.class.php, UserCPMenuPackageInstallationPlugin und ACPMenuPackageInstallationPlugin miteinander vergleicht ;).
    Schaut man sich die entsprechenden CacheBuilder an, sieht man, dass es vielleicht sinnvoll wäre, die einzelnen Datenbank-Abfragen in eigene Methoden auszulagern, da man die IDs der Menüelemente immer einliest, ebenso die Menüelemente anhand der IDs, aber beispielsweise beim CacheBuilderACPMenu noch weitere Aktionen stattfinden, die dann zum Beispiel in der spezifischen Menü-Klasse durch Überschreiben der readMenuItems-Methode (mit Aufruf der readMenuItems-Methode aus der (abstrakten Menü-)Elternklasse) stattfinden könnten.


    Sollte man das umsetzen, wäre es vielleicht auch nicht schlecht, wenn man direkt auch noch berücksichtigt, dass es noch weitere Einstellungsmöglichkeiten für das Menü geben könnte, so dass die abstrakte Implementierung leicht auch mit Menü-eigenen Eigenschaften zurecht kommt (beispielsweise durch den Aufruf einer Methode readAdditionalData beim Speichern jedes Menüpunktes im PackageInstallationPlugin, die dann vom speziellen PackageInstallationPlugin überschrieben werden kann).

Participate now!

Don’t have an account yet? Register yourself now and be a part of our community!