Project

General

Profile

Actions

Config.php

Die config.php ist wichtig zur Installation eines Moduls. Diese enthält sämtliche Informationen über das Module, welche während der Installation in die Datenbank geschrieben werden.

Hier einmal ein Grundgerüst einer config.php.

<?php

namespace Modules\ModuleName\Config;

class Config extends \Ilch\Config\Install
{
    public $config = [];

    public function install()
    {

    }

    public function uninstall()
    {

    }

    public function getInstallSql()
    {

    }

    public function getUpdate($installedVersion)
    {

    }
}

Diese können wir mit sämtlichen Informationen über das Module füllen, welches zuerst mit dem $config Array anfängt.

Ereignisse

Ereignisse/Events müssen als Konstanten in der config-Klasse hinterlegt werden. Dies ermöglicht es anderen Modulen alle verfügbaren Ereignisse/Events zu sehen.

Die Konstanten werden in der Form "EVENT_AKTION_ZEITPUNKT" benannt. Für Zeitpunkt ist aktuell "BEFORE" oder "AFTER" vorgesehen.

Beispiele

EVENT_SAVETOPIC_BEFORE
EVENT_SAVETOPIC_AFTER
EVENT_ADDTOPIC_AFTER
EVENT_SAVEPOST_BEFORE

Das eigentliche Ereignis wird nach dem Schema "modul_aktion_zeitpunkt" benannt.

Beispiele

forum_saveTopic_before
forum_saveTopic_after
forum_addTopic_after
forum_savePost_before

Auszug aus der config.php eines Moduls:
<?php
/**
 * @copyright Ilch 2.0
 * @package ilch
 */

namespace Modules\Forum\Config;

class Config extends \Ilch\Config\Install
{
    const EVENT_SAVETOPIC_BEFORE = 'forum_saveTopic_before';
    const EVENT_SAVETOPIC_AFTER = 'forum_saveTopic_after';
    const EVENT_ADDTOPIC_AFTER = 'forum_addTopic_after';
    const EVENT_SAVEPOST_BEFORE = 'forum_savePost_before';
    const EVENT_SAVEPOST_AFTER = 'forum_savePost_after';
    const EVENT_ADDPOST_AFTER = 'forum_addPost_after';
    const EVENT_DELETEPOST_BEFORE = 'forum_deletePost_before';
    const EVENT_DELETEPOST_AFTER = 'forum_deletePost_after';
    const EVENT_DELETETOPIC_BEFORE = 'forum_deleteTopic_before';
    const EVENT_DELETETOPIC_AFTER = 'forum_deleteTopic_after';
    [...]

Siehe auch: Arbeiten mit Ereignissen/Events

$config

key

Beim key gibt man den Key eines Moduls an mit welchem man dieses später auch aufruft "index.php/moduleKey"
Ein Beispiel anhand des Veranstaltungen (events) Module welches mit "index.php/events" aufgerufen wird.

public $config = [
    'key' => 'events',
];

version

Jedes Modul sollte dessen Versionsnummer durch "version" angeben.
Am Anfang fängt man meist mit der Version 1.0.0 an, um zu zeigen das es die erste Version des Moduls ist.

public $config = [
    'version' => '1.0.0',
];

icon_small

Um ein Modul ein kleines Icon im Backend zu geben, benötigt es das hinzufügen von icon_small.
Man kann jedes Icon von FontAwesome angeben oder natürlich auch ein eigenes Icon verwenden.

FontAwesome Icon

Wenn man ein Icon von FontAwesome verwenden möchte, kann man einfach den Icon Namen von FontAwesome dafür verwenden.
fa-ticket = fa-ticket

Bespiel anhand des Veranstaltungen (events) Module:

public $config = [
    'icon_small' => 'fa-ticket',
];

Hier wurde mit fa-ticket die FontAwesome Methode verwendet.

Eigenes Icon

Ein eigenes Icon legt man am besten im Ordner "application/modules/moduleName/config/" ab und gibt es mit iconName.png an.

public $config = [
    'icon_small' => 'iconName.png',
];

system_module

Hiermit kann ein Modul angeben, dass es ein System-Modul ist. Ein System-Modul ist fester Bestandteil von Ilch ohne dessen Ilch nicht funktioniert.
Bei einem optionalen Modul wird nicht "false" für "system_module" angegeben - der Eintrag für "system_module" wird in diesen Fall einfach weggelassen.

public $config = [
    'system_module' => 'true',
];

author

Hiermit wird der Autor bzw. Entwickler des Moduls angegeben.

public $config = [
    'author' => 'Mustermann, Max',
];

link

Wenn du dein author Namen verlinken möchtest, kannst du es durch das angeben von link machen.

public $config = [
    'link' => 'http://ilch.de',
];

official

Dieser Wert gibt an ob es sich um ein offizielles Modul handelt.

public $config = [
    'official' => true,
];

isLayout

Mit isLayout markierst du dein Modul damit es als Layout gezählt wird und dadurch gesondert in der Backend Navigation anzeigt wird.

public $config = [
    'isLayout' => true,
];

languages

Für die Übersetzung des Modul Namens und der Beschreibung selbst fügt man einfach ein language Array hinzu, welches wir mit ein languageKey Array befüllen.
Im languageKey Array fügt man mit name und description die Übersetzung für den Namen und der Beschreibung des Moduls hinzu.

public $config = [
    'languages' => [
        'languageKey' => [
            'name' => 'Bespiel Module',
            'description' => 'Dieses Module ist nur ein Beispiel',
        ]
    ]
];

Beispiel anhand des Veranstaltungen (events) Moduls.
public $config = [
    'languages' => [
        'de_DE' => [
            'name' => 'Veranstaltungen',
            'description' => 'Hier kannst du Veranstaltungen erstellen und bearbeiten.',
        ],
        'en_EN' => [
            'name' => 'Events',
            'description' => 'Here you can add and change events.',
        ]
    ]
];

depends

Module können Abhängigkeiten untereinander haben. Ein Modul funktioniert möglicherweise ohne ein anderes Modul nicht.
Es ist möglich die Abhängigkeiten des Moduls anzugeben. Die Update-Funktion wird diese Abhängigkeiten berücksichtigen.

Der Eintrag in der config.php könnte z.B. so aussehen:

public $config = [
    'depends' => [
        'key1' => 'version',
        'key2' => 'version'
    ]
];

Beispiel:
public $config = [
    'depends' => [
        'awards' => '>=,1.0.0',
        'key2' => '=,1.0.0'
    ]
];

Das Beispiel gibt an, dass das Modul von den Modulen "awards" und "key2" abhängig ist. Das "awards"-Modul muss in Version 1.0.0 oder neuer vorliegen. Das "key2"-Modul in Version 1.0.0.

hide_menu

Wenn "hide_menu" auf true gesetzt ist, steht das Modul im Admincenter unter Menüs nicht zur Auswahl.

public $config = [
    'hide_menu' => true,
];

ilchCore

Wenn das Modul Ilch in Version 2.0.0 voraussetzt, kann dies wie folgt angegeben werden:

public $config = [
    'ilchCore' => '2.0.0',
];

phpVersion

Ein Modul, welches beispielsweise mindestens PHP in Version 5.6 benötigt, kann dies voraussetzen.

public $config = [
    'phpVersion' => '5.6',
];

Hier einmal eine Beispiel config.php vom Veranstaltungen (events) Modul.

public $config = [
    'key' => 'events',
    'version' => '1.0.0',
    'icon_small' => 'fa-ticket',
    'author' => 'Veldscholten, Kevin',
    'link' => 'http://ilch.de',
    'languages' => [
        'de_DE' => [
            'name' => 'Veranstaltungen',
            'description' => 'Hier kannst du Veranstaltungen erstellen und bearbeiten.',
        ],
        'en_EN' => [
            'name' => 'Events',
            'description' => 'Here you can add and change events.',
        ],
    ],
    'boxes' => [
        'events' => [
            'de_DE' => [
                'name' => 'Veranstaltungen'
            ],
            'en_EN' => [
                'name' => 'Events'
            ]
        ]
    ],
    'ilchCore' => '2.0.0',
    'phpVersion' => '5.6'
];

install Funktion

Die install() Funktion der "config.php" kann genutzt werden um Tabellen und oder Spalten in der Datenbank hinzuzufügen.
Ein Beispiel anhand des Veranstaltungen (events) Module:

public function install()
{
    $this->db()->queryMulti($this->getInstallSql());

    $databaseConfig = new \Ilch\Config\Database($this->db());
    $databaseConfig->set('event_boxEventLimit', '5');
    $databaseConfig->set('event_uploadpath', 'application/modules/events/static/upload/image/');
    $databaseConfig->set('event_height', '150');
    $databaseConfig->set('event_width', '450');
    $databaseConfig->set('event_size', '102400');
    $databaseConfig->set('event_filetypes', 'jpg jpeg png gif');
    $databaseConfig->set('event_google_maps_api_key', '');
    $databaseConfig->set('event_google_maps_map_typ', 'ROADMAP');
    $databaseConfig->set('event_google_maps_zoom', '18');
}

In diesem Beispiel wird zuerst eine weitere Funktion aus der "config.php" aufgerufen nämlich die "getInstallSql" Funktion zu welche wir später kommen.
Anschließend wird die CMS Konfiguration der Datenbank mit "new \Ilch\Config\Database($this->db())" aufgerufen um dort Konfigurationen des Modules selbst abzulegen.

Hier wurde mit "$databaseConfig->set('event_boxEventLimit', '5');" zb. in der CMS Konfiguration geschrieben das der Key "event_boxEventLimit" einen Wert von "5" hat.
Dieser Wert wird im Module aufgerufen und weiter verarbeitet zb. für die Limitierung der angezeigten Einträge in der Box.

uninstall Funktion

Diese Funktion wird bei der Deinstallation des Moduls aufgerufen. Sie sollte z.B. genutzt werden um die Tabellen und hinterlegten Einstellungen des Moduls zu löschen,
wenn es deinstalliert wird.

public function uninstall()
{
    $this->db()->queryMulti('DROP TABLE `[prefix]_events`;
                             DROP TABLE `[prefix]_events_entrants`;
                             DROP TABLE `[prefix]_events_currencies`');
    $this->db()->queryMulti("DELETE FROM `[prefix]_config` WHERE `key` = 'event_boxEventLimit';
                             DELETE FROM `[prefix]_config` WHERE `key` = 'event_uploadpath';
                             DELETE FROM `[prefix]_config` WHERE `key` = 'event_height';
                             DELETE FROM `[prefix]_config` WHERE `key` = 'event_width';
                             DELETE FROM `[prefix]_config` WHERE `key` = 'event_size';
                             DELETE FROM `[prefix]_config` WHERE `key` = 'event_filetypes';
                             DELETE FROM `[prefix]_config` WHERE `key` = 'event_google_maps_api_key';
                             DELETE FROM `[prefix]_config` WHERE `key` = 'event_google_maps_map_typ';
                             DELETE FROM `[prefix]_config` WHERE `key` = 'event_google_maps_zoom';
                             DELETE FROM `[prefix]_modules_folderrights` WHERE `key` = 'events';");
    if ($this->db()->ifTableExists('[prefix]_calendar_events')) {
        $this->db()->queryMulti("DELETE FROM `[prefix]_calendar_events` WHERE `url` = 'events/events/index/';");
    }
}

getInstallSql Funktion

getUpdate Funktion

Sie wird aufgerufen, wenn z.B. ein Modul aktualisiert wird. Innerhalb dieser Funktion können z.B. notwendige Änderungen an der Datenbank durchgeführt werden oder Dateien gelöscht werden,
die in der aktuellen Version des Moduls nicht mehr benötigt werden.

Argument "installedVersion"
Das Argument "installedVersion" enthält die aktuelle Version des Moduls, Layouts oder auch von Ilch selber.
Sie kann z.B. genutzt werden um Anweisungen abhängig von der aktuellen Version auszuführen.
public function getUpdate($installedVersion)
{
    switch ($installedVersion) {
        case "1.0.0":
            // Anweisungen
        case "1.1.0":
            // Anweisungen
        case "1.2.0":
            // Anweisungen
    }
}

Beispiele:
  1. Modul wird in Version 1.0.0 installiert.
  2. Modul wird in Version 1.1.0 veröffentlicht.
  3. Update wird angestoßen. Switch-Anweisung landet bei Fall 1.0.0 und führt die Anweisungen aus.
  4. Version des Moduls wird auf Version 1.1.0 gesetzt.
  1. Modul wird in Version 1.0.0 installiert.
  2. Modul wird in Version 1.1.0, 1.2.0 und 1.3.0 veröffentlicht.
  3. Update wird bei 1.3.0 angestoßen. Switch-Anweisung landet bei Fall "1.0.0" und führt die Anweisungen aus. Außerdem werden dann alle nachfolgenden Fälle (1.1.0 und 1.2.0) auch ausgeführt.
  4. Version des Moduls wird auf Version 1.3.0 gesetzt.
  1. Modul wird in Version 1.2.0 installiert.
  2. Modul wird in Version 1.3.0 veröffentlicht.
  3. Update wird angestoßen. Switch-Anweisung landet bei Fall "1.2.0" und führt die Anweisungen aus.
  4. Version des Moduls wird auf Version 1.3.0 gesetzt.
  1. Modul wird in Version 1.2.0 installiert.
  2. Modul wird in Version 1.3.0 veröffentlicht.
  3. Update wird angestoßen. Switch-Anweisung landet bei Fall "1.2.0" und führt die Anweisungen aus.
  4. Version des Moduls wird auf Version 1.3.0 gesetzt.
  5. Modul wird deinstalliert. uninstall() wird ausgeführt.
  6. Modul wird in Version 1.4.0 veröffentlicht.
  7. Modul wird vom Ilch-Server in Version 1.4.0 installiert. install() und getInstallSql() wird ausgeführt.
  8. Modul wird in Version 1.5.0 veröffentlicht.
  9. Update wird angestoßen. Switch-Anweisung landet bei Fall "1.4.0" und führt die Anweisungen aus.
  10. Version des Moduls wird auf Version 1.5.0 gesetzt.

Es ist wichtig, dass keine Versionen in der getUpdate() "übersprungen" werden. Siehe Beispiel:

Beispiel:
  1. Modul wird in Version 1.0.0 installiert.
  2. Modul wird in Version 1.1.0 veröffentlicht. Switch-Anweisung enthält entsprechenden Fall (Argument "installedVersion" gleich "1.0.0").
  3. Update wird angestoßen. Switch-Anweisung landet bei Fall "1.0.0" und führt die Anweisungen aus.
  4. Modul wird in Version 1.2.0 veröffentlicht. Es wurde kein entsprechender Fall angelegt!
  5. Modul wird in Version 1.3.0 veröffentlicht. Es wurde der Fall für das Update von Version 1.2.0 auf 1.3.0 angelegt (Argument "installedVersion" gleich "1.2.0").
  6. Update wird angestoßen. Argument "installedVersion" enthält den Wert "1.1.0". Es gibt keinen Fall "1.1.0" in der Switch-Anweisung. Kein Fall trifft zu. Nötige Änderungen von Version 1.2.0 auf 1.3.0 nicht durchgeführt!

Richtig:

public function getUpdate($installedVersion)
{
    switch ($installedVersion) {
        case "1.0.0":
            // Anweisungen
        case "1.1.0":
            // Anweisungen
        case "1.2.0":
            // Anweisungen
    }
}

Falsch:

public function getUpdate($installedVersion)
{
    switch ($installedVersion) {
        case "1.0.0":
            // Anweisungen
        case "1.2.0":
            // Anweisungen
    }
}

Rückgabewert
Updates von Ilch können hier Meldungen zurückgeben, die im Protokoll der Update-Installation ausgegeben werden. Für Module und Layouts wird der Rückgabewert nicht verwendet.

Löschen einer Datei

public function getUpdate($installedVersion)
{
    unlink(ROOT_PATH.'/9YXvSpjbga.txt');
}

Diverse andere Aktionen

public function getUpdate($installedVersion)
{
    $messages = '';

    // Tabelle anlegen
    $this->db()->queryMulti('CREATE TABLE IF NOT EXISTS `[prefix]_9YXvSpjbga` (
              `key` VARCHAR(255) NOT NULL,
              `value` TEXT NOT NULL,
              `autoload` TINYINT(1) NOT NULL,
              UNIQUE KEY `key` (`key`)
            ) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;');
    if ($this->db()->ifTableExists('[prefix]_9YXvSpjbga')) {
        $messages .= 'Success: Table created.<br>';
    } else {
        $messages .= 'Fail: Creating table [prefix]_9YXvSpjbga failed.<br>';
    }

    // Datentyp ändern
    $this->db()->query('ALTER TABLE `[prefix]_9YXvSpjbga` MODIFY `autoload` INTEGER NOT NULL;');

    // Spalte umbenennen
    $this->db()->query('ALTER TABLE `[prefix]_9YXvSpjbga` CHANGE `autoload` `newname` INTEGER NOT NULL;');

    // Zeile hinzufügen
    $this->db()->query('INSERT INTO `[prefix]_9YXvSpjbga` (`key`, `value`, `newname`) VALUES ("akey", "EUR (€)", 99);');
    if ($this->db()->query('Select * FROM `[prefix]_9YXvSpjbga`;')) {
        $messages .= 'Success: Changed datatype of column.<br>';
        $messages .= 'Success: Renamed column.<br>';
        $messages .= 'Success: Inserted row.<br>';
    } else {
        $messages .= 'Possible fail: Changed datatype of column.<br>';
        $messages .= 'Fail: Renaming column failed.<br>';
        $messages .= 'Fail: Inserting row failed.<br>';
    }

    // Spalte löschen
    $this->db()->query('ALTER TABLE `[prefix]_9YXvSpjbga` DROP COLUMN `newname`;');

    // Tabelle löschen
    $this->db()->drop('[prefix]_9YXvSpjbga');
    if ($this->db()->ifTableExists('[prefix]_9YXvSpjbga')) {
        $messages .= 'Fail: Table [prefix]_9YXvSpjbga could not be deleted.';
    } else {
        $messages .= 'Success: Table deleted.';
    }

    return $messages;
}

Updated by -, blackcoder 4 months ago · 19 revisions