Page 1 of 1

Anpassungen eines Moduls für CMSms 1.6

Posted: Tue Jul 14, 2009 3:48 pm
by Andiministrator
Dieser Thread richtet sich an alle Modul-Entwickler, die Ihre Module an CMSms Version 1.6 anpassen müssen oder angepasst haben. Wie es scheint, gibt es noch einige Module da draußen, die gern unter CMSms 1.6 laufen würden, aber durch einige Veränderungen nicht können. Deshalb möchte ich hier den Anfang machen, das Wissen zusammenzutragen, was für eine Anpassung notwendig ist.

So wie ich die Sache sehe, ist das größte Problem, dass die alten Inhaltstypen nicht mehr funktionieren. In CMSms vor Version 1.6 konnte man ein Modul als Inhaltstyp registrieren, indem man in der Modul-Klasse in der Funktion "SetParameters" einen Aufruf startete wie:

Code: Select all

$this->RegisterContentType('GuestbookContent',cms_join_path(dirname(__FILE__),'class.GuestbookContent.php'),$this->GetFriendlyName());
Dies funktioniert so nicht mehr mit CMSms ab Version 1.6, deshalb schreiben wir diesen Aufruf etwas um, so dass es zukünftig nicht zu Fehlern kommen kann:

Code: Select all

if ($GLOBALS['CMS_VERSION'] < 1.6) {
    if (method_exists($this, 'registercontenttype')) {
        $this->RegisterContentType('GuestbookContent',cms_join_path(dirname(__FILE__),'class.GuestbookContent.php'),$this->GetFriendlyName());
    }
}
Dieses Beispiel ist aus dem Modul "Guestbook", der Modulname und die Pfade sind also anzupassen. Zur Verdeutlichung hier mal noch das selbe Beispiel in einer etwas anderen Art für das Modul "PageBlocks":

Code: Select all

if ($GLOBALS['CMS_VERSION'] < 1.6) {
    if (method_exists($this, 'registercontenttype')) {
        $this->RegisterContentType('PageBlocksContent', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classes'  . DIRECTORY_SEPARATOR . 'class.PageBlocksContent.php', $this->GetFriendlyName());
    }
}
Damit haben wir erst einmal den alten Aufruf abgesichert. Ab CMSms Version 1.6 muss der RegisterContent-Aufruf nun in den (PHP4-)Constructor der Modul-Klasse. Beim Modul "Guestbook" heißt die Constructor-Funktion logischerweise ebenfalls "Guestbook". Dort muss nun der RegisterContent-Aufruf einfach hinein kopiert werden (am besten wieder mit einer if-Abfrage abgesichert). Hier die verkürzte Funktion für das Modul "Guestbook":

Code: Select all

function Guestbook() {
    $this->CMSModule();
    $this->InstalledModules = array();
    if ($GLOBALS['CMS_VERSION'] >= 1.6) {
        parent::CMSModule();
        $this->RegisterContentType('GuestbookContent',cms_join_path(dirname(__FILE__),'class.GuestbookContent.php'),$this->GetFriendlyName());
    }
}
Und hier nocheinmal das gleiche für das Modul "PageBlocks":

Code: Select all

function PageBlocks() {
    $this->CMSModule();
    $this->InstalledModules = array();
    if ($GLOBALS['CMS_VERSION'] >= 1.6) {
        parent::CMSModule();
        $this->RegisterContentType('PageBlocksContent', dirname(__FILE__) . DIRECTORY_SEPARATOR . 'classes'  . DIRECTORY_SEPARATOR . 'class.PageBlocksContent.php', $this->GetFriendlyName());
    }
}
Das war es auch schon. Ab nun sollte das Modul wieder als Seitentyp erscheinen. Beim Guestbook lief alles andere soweit unter CMSms 1.6. Gibt es denn noch andere Sachen, was sich in Bezug auf die Module geändert hat?

Re: Anpassungen eines Moduls für CMSms 1.6

Posted: Tue Jul 14, 2009 4:56 pm
by NaN
Ah, besten Dank.
Genau die Sache mit dem Konstruktor, der ja nicht bei allen Modulen verwendet wird, hat mir gefehlt.

Wüsste nicht, was man sonst noch beachten sollte.
Außer, dass man evtl. den Quellcode des ContentTypes an den neuen Inhaltstyp anpassen sollte.
Aber das sollte recht einfach sein, die beiden Quellcodes zu vergleichen und ggf. anzupassen.

Re: Anpassungen eines Moduls für CMSms 1.6

Posted: Tue Jul 14, 2009 8:25 pm
by cyberman
Danke für die Dokumentation der Änderungen!