Joomla! - Eigenes Installationsscript

Aus THM-Wiki
Wechseln zu: Navigation, Suche

Problembeschreibung

Da die Konfiguration der Installationsroutine von Joomla! in der Regel ausschließlich über die XML-Datei erfolgt, sind die Möglichkeiten diese an die eigenen Bedürfnisse anzupassen relativ begrenzt.

Sollte mehr erforderlich sein um die Erweiterung korrekt zu installieren, z.B. das Modifizieren der Datenbanktabellen oder das Kopieren nur einzelner Dateien, bietet Joomla! die Möglichkeit ein eigenes Installationsskript einzubinden das nahezu keine Einschränkungen bietet.

Definition des Scripts

Damit das Script von Joomla korrekt angesprochen werden kann muss das Script in einer Klasse implementiert werden die nach dem üblichen Schema benannt ist. Die Klasse muss in diesem Fall auf „InstallerScript“ enden. Für die Komponente „com_example“ wäre daher die korrekte Benennung der Klasse „com_exampleInstallerScript“.

Innerhalb dieser Klasse können nun verschiedene Methoden implementiert werden innerhalb derer Skripte ausgeführt werden können. Die Methoden sind im einzelnen

  • function install($parent){}

Wird bei der Installation der Erweiterung aufgerufen insofern in der XML-Datei die Installationsmethode auch als „Install“ definiert ist.

  • function unistall($parent){}

Wird beim deinstallieren der Erweiterung aufgerufen.

  • function update($parent){}

Wird bei dem Update einer Erweiterung aufgerufen insofern in der XML auch das „Update“ flag gesetzt ist.

  • function prefligt($type, $parent){}

Wird aufgerufen vor dem Update- oder Installationsvorgang.

  • function postflight($type, $parent){}

Wird entsprechend nach der Installation oder dem Update ausgeführt.

Einbindung des Scripts

Die Einbindung des Scripts in die XML-Datei ist einfach. Im Idealfall wird das Script als „script.php“ im gleichen Ordner wie die XML-Datei der Erweiterung abgespeichert. Und mit dem Tag <scriptfile> eingebunden. Im vorliegenden Beispiel mit <scriptfile>script.php</scriptfile>.

Codebeispiel: Kopieren einzelner Dateien

Folgendes Codebeispiel stammt aus dem Projekt THM Multicategory. Ziel ist die erweiterung der Joomla Standardkomponente "com_content". Hierfür reicht es aus eine neue View-Datei und einen Ordner in die Komponente zu kopieren. Das folgende Script ermöglicht dies ohne das bestehende Dateien gelöscht werden wie es bei einer herkömmlichen Definition in der XML-Datei der Fall wäre.


defined('_JEXEC') or die ('Restricted access');
jimport('joomla.filesystem.folder');
jimport('joomla.filesystem.file');
jimport('joomla.installer.installer');
class com_ContentInstallerScript 
{
   function update($parent) 
   {
           // $parent is the class calling this method
           
           $installer = & JInstaller::getInstance();    
           $source = $installer->getPath('source');
           
           $viewfolder =     JPath::clean($source.DS.'site'.DS.'views'.DS.'multicategory');
           $modelfile =     JPath::clean($source.DS.'site'.DS.'models'.DS.'multicategory.php');
           
           
           if(is_dir($viewfolder))
           {
               //echo $viewfolder . " is a Folder!";
               if(JFolder::copy($viewfolder, JPATH_ROOT.DS.'components'.DS.'com_content'.DS.'views'.DS.'multicategory'.DS, null, true))
                   echo "View Update complete";
           }
           
           if(is_file($modelfile))
           {
               //echo $modelfile . " is a File!";
               if(JFile::copy($modelfile, JPATH_ROOT.DS.'components'.DS.'com_content'.DS.'models'.DS.'multicategory.php', null, true))
                   echo "File Update complete";
           }
   }
}
?>


Weitere Informationen können in der Joomla! Dokumenation abgerufen werden. http://docs.joomla.org/Developing_a_Model-View-Controller_%28MVC%29_Component_for_Joomla!1.6_-_Part_15