Komponente THM-Groups Development 3.0

Aus THM-Wiki
Wechseln zu: Navigation, Suche

Beschreibung

Die Komponente com_thm_groups:development_3.0 ist ein Branch der Komponente_THM-Groups. Der Branch soll eine Umstellung von Joomla 2.5 auf Joomla 3.0 ermöglichen. Dafür mussten Code-Anpassungen im Quelltext des Backend und des Frontend vorgenommen werden. Nicht alle der Anpassungen sind notwendig, sondern bereinigen zum Teil "deprecated" Methoden die noch nicht entfernt wurden. Änderungen von Joomla 2.5 zu 3.0 können in den Joomla Docs [1] nachgesehen werden.


Anpassung

JController, JModel und JView werden in JControllerLegacy, JModelLegacy und JViewLegacy umbenannt. Die Funktion JRequest::getVar() ist deprecated und wird durch JFactory::getApplication()->input->get() ersetzt. Bei einem Post-Request wird dies nun nicht mehr als getVar()-Parameter übergeben sondern durch input->post->get(). Diese Änderung kann durch das häufige vorkommen von getVar() viel Zeit in Anspruch nehmen. Zu beachten ist auch das get() und getVar() nicht die gleiche Schnittstelle haben. Einen Mask type gibt es bei get() z.B nicht mehr dafür aber Filter.

Damit die Formulare funktionieren muss in den Views das Attribut Id zwingend gesetzt sein. Formulare mit name="adminForm" haben nun zusätzlich id="adminForm". Die Javascript Funktion um alle Elemente im Formular auszuwählen nutzt man nun durch Joomla.checkAll() statt checkAll(). Es braucht nurnoch "this" übergeben zu werden und kein Anzahl der Elemente. JHtmlBehavior::mootools() exitiert nicht mehr und muss entfernt bzw. durch JHtmlBehavior::framework() erstetzt werden.

In den Models ist bei SQL Abfragen zu beachten das die Funktion query() deprecated ist, diese kann einfach durch execute() erstetz werden. Entfernt wurde die Funktion getEscaped() und kann durch escape() ersetzt werden. Ebenfalls entfernt wurde queryBatch() für die es keinen Ersatz gibt. Hier wurde ebenfalls execute() eingesetzt.

Die Konstante DS gibt es nicht mehr, stattdessen kann man DIRECTORY_SEPARATOR nehmen. Alternativ kann auch durch define('DS', DIRECTORY_SEPARATOR) weiterhin DS genutzt werden.

Boostrap

Da Joomla 3 Boostrap benutzt müssen die Views mit ensprechenden Klassen angepasst werden. Den Tabellen wird die Klasse "table-stripped" hinzugefügt. Bestimmte Elemente sollen bei kleineren Auflösungen, in etwa auf Smartphones, ausgeblendet werden. Dafür wird die Klasse "hidden-phone" den zu Verbergenden Bereichen hinzugefügt. Das Attrbute align wird zu class geändert um die Bootstrapklasse zu benutzen.

Groupmanager Vollbild

THM-Groups Backend - Groupmanager

Da Joomla 3 Boostrap benutzt müssen die Views mit ensprechenden Klassen angepasst werden. Den Tabellen wird die Klasse "table-stripped" hinzugefügt. Bestimmte Elemente sollen bei kleineren Auflösungen, in etwa auf Smartphones, ausgeblendet werden. Dafür wird die Klasse "hidden-phone" den zu verbergenden Bereichen hinzugefügt.

Groupmanager Phone

THM-Groups Backend - Groupmanager

Das Attrbute align wird zu class geändert um die Bootstrapklasse für die Positionierung zu benutzen.

Schwierigkeiten

Größere Schwierigkeiten enstehen durch SQL-Fehler die in Joomla 2.5 nicht auftretten. Diese entstehen aber nur zum Teil durch tatsächliche Fehler im Code von com_thm_groups. So kam es z.B vor das ein Abfrage an die Tabelle #___thm_groups_groups_map gemacht wurde mit einer Abfrage "where id =". Allerdings besitzt die Tablelle nur die Felder uid, rid und gid. Ein anderes Problem mit Fehlerhaftem Code waren Abfragen über #__thm_groups_" . strtolower($type->type) . "_extra" und zwar wenn der type date ist, denn die Tabelle #__thm_groups_date_extra existiert nicht.

Oftmals tretten aber unerklärliche Fehler auf die in Joomla 2.5 einfach keine Fehler werfen in Joomla 3.0 aber schon. Wenn im Membermanager einem User ein zweites mal die selbe Rolle zugewiesen wurde, führte dies zu einem SQL Fehler wegen "duplicated entry". Hier muss entsprechend die SQL-Abfrage so geändert werden das bereits vorhandene Einträge "ignoriert" werden. Mit "where not exists" oder vorher eine Abfrage nach dem Eintrag zu machen und dann die Abfrage zum wiederholten eintragen garnicht erst auszuführen, beheben dieses Problem.