Both sides previous revision Previous revision | |
de:entwickler:aenderungen_in_der_datenbank_einbauen [2015/05/30 23:10] – [Wo baue ich die Änderungen im Sourcecode ein ?] fasse | de:entwickler:aenderungen_in_der_datenbank_einbauen [2015/05/30 23:15] (current) – [Wie wird die XML-Datei bearbeitet ?] fasse |
---|
| |
==== Wie wird die XML-Datei bearbeitet ? ==== | ==== Wie wird die XML-Datei bearbeitet ? ==== |
Die XML-Datei wird auch in dem Ordner **adm_install/db_scripts** abgelegt und folgt dem Namenschema **update_//Hauptversion//_//Unterversion//.xml**. Für Version 3.0.0 wäre das //update_3_0.xml//. Der XML-Aufbau sieht dann folgendermaßen aus: <code xml><?xml version="1.0" encoding="UTF-8"?> | Die XML-Datei wird auch in dem Ordner **adm_program/installation/db_scripts** abgelegt und folgt dem Namenschema **update_//Hauptversion//_//Unterversion//.xml**. Für Version 3.0.0 wäre das //update_3_0.xml//. Der XML-Aufbau sieht dann folgendermaßen aus: <code xml><?xml version="1.0" encoding="UTF-8"?> |
<update> | <update> |
<step id="10">1. SQL-Statement</step> | <step id="10">1. SQL-Statement</step> |
<step id="30">usw...</step> | <step id="30">usw...</step> |
<step>stop</step> | <step>stop</step> |
</update></code>Hieran kann man schon erkennen, wie das Update funktioniert. Es werden mit aufsteigender ID einfach jeweils ein SQL-Befehl in einen **step** geschrieben. <code xml><step id="40">UPDATE %PREFIX%_organizations SET org_homepage = 'http://www.example.com' WHERE org_homepage IS NULL</step></code> Bei Tabellen muss immer hier der Platzhalter **%PREFIX%** genutzt werden, damit die installationsspezifischen Tabellenpräfixe berücksichtigt werden. Wichtig ist auch der letzte **step** mit dem Inhalt **stop**. Hieran erkennt das System das das gewünschte Ende erreicht wurde und das Script nicht irgendwo abgebrochen ist. | </update></code>Hieran kann man schon erkennen, wie das Update funktioniert. Es werden mit aufsteigender ID einfach jeweils ein Befehl in einen **step** geschrieben. <code xml><step id="40">UPDATE %PREFIX%_organizations SET org_homepage = 'http://www.example.com' WHERE org_homepage IS NULL</step></code> Bei Tabellen muss immer hier der Platzhalter **%PREFIX%** genutzt werden, damit die installationsspezifischen Tabellenpräfixe berücksichtigt werden. Wichtig ist auch der letzte **step** mit dem Inhalt **stop**. Hieran erkennt das System das das gewünschte Ende erreicht wurde und das Script nicht irgendwo abgebrochen ist. |
| |
Möchte man datenbankabhängige SQL-Befehle erstellen, welche nur auf einer bestimmten Datenbank ausgeführt werden sollen, so muss noch das Attribut **database** mit dem definierten Namen der Datenbank als Wert hinterlegt werden. <code xml><step id="50" database="mysql">ALTER TABLE %PREFIX%_organizations ADD COLUMN org_example varchar(255)</step></code> | Möchte man datenbankabhängige SQL-Befehle erstellen, welche nur auf einer bestimmten Datenbank ausgeführt werden sollen, so muss noch das Attribut **database** mit dem definierten Namen der Datenbank als Wert hinterlegt werden. <code xml><step id="50" database="mysql">ALTER TABLE %PREFIX%_organizations ADD COLUMN org_example varchar(255)</step></code> |
| |
| Zusätzlich zu den SQL-Befehlen ist es auch möglich PHP-Code ausführen zu lassen. Dies geschieht durch den Aufruf einer Methode aus der Klasse **ComponentUpdate**. Du kannst also dieser Klasse eine neue Methode hinzufügen, die einen Codeschnipsel enthält, der z.B. eine Schleife über alle Organisationen macht und dann ein SQL-Statement für jede Organisation ausführt. Aufrufen kann man diese Methode dann indem man in der XML-Datei im **step** diese Methode wie eine statische Methode aufruft <code xml><step id="550">ComponentUpdate::updateStepDeleteDateRoles</step></code> |