Runonce: Unterschied zwischen den Versionen

Aus Contao Community Documentation

K (Category entfernt)
K
 
(54 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
[[Category:Dev HOWTOS]]
 
[[Category:Dev Snippets]]
 
 
{{AppliesTo|TLVersion=ab 2.7|Version=ab 2.9}}
 
{{AppliesTo|TLVersion=ab 2.7|Version=ab 2.9}}
Live Update nutzt diese, die Extensions nutzen diese auch: die Datei <code>TL_ROOT/system/runonce.php</code>
+
Live Update nutzt diese, die Extensions nutzen diese auch: eine Datei <code>runonce.php</code>
  
Diese Datei tut genau das, was der Name schon vermuten lässt. Sie wird nur einmal ausgeführt und anschließend gelöscht.<br />
+
Diese Datei tut genau das, was der Name schon vermuten lässt. Sie wird nur einmal ausgeführt und anschließend gelöscht.
Bei jedem Seitenaufruf wird dazu geprüft, ob diese vorhanden ist und ggf. ausgeführt.
+
  
In der Extension legt man diese Datei dann ab im Pfad wie wie oben bereits angegeben.
+
Von Contao 2.9 zu 2.10 gab es eine Änderung diesbezüglich was Ort und Zeitpunkt des Aufrufes betrifft. Es ist möglich, für beide Arten gleichzeitg kompatibel zu sein und wird deshalb hier auch mit beschrieben.
 
+
[[Category:Dev HOWTOS]]
 
+
[[Category:Dev Snippets]]
==Anwendungsbeispiele==
+
== Verwendung ab Contao 2.10 ==
===Löschen einer Datei===
+
Ab Contao 2.10 ist die runonce Nutzung modulbasiert. Das heißt, jedes Modul bringt seine eigene runonce.php in der Verzeichnistruktur des Moduls mit. Nicht mehr wie in 2.9 im System Verzeichis.
<?php @error_reporting(0); @ini_set("display_errors", 0);
+
try {
+
    // Datei relativ zu TL_ROOT
+
    $file = 'system/modules/demo/delete_me.gif';
+
    $objFiles = Files::getInstance();
+
    $objFiles->delete($file);
+
} catch (Exception $e) { $errors[] = $e->getMessage(); }
+
?>
+
Die Fehlerausgaben, sollte es welche geben, werden in diesem Beispiel unterdrückt.
+
  
===Datenbank Insert / Update===
+
=== Ablageort ===
<?php @error_reporting(0); @ini_set("display_errors", 0);
+
Die runonce.php muss im config Verzeichnis des Moduls liegen. Beispiel:
$objDatabase = Database::getInstance();
+
<source lang="php">
//
+
/system/modules/banner/config/runonce.php
// Update database
+
</source>
try {
+
Der Ablageort /system/runonce.php funktioniert zwar auch noch, sollte aber nicht mehr verwendet werden, da es zu gegenseitigem Überschreiben kommen kann. (siehe dazu [[Runonce#Problemfall|Problemfall in 2.9]])
    $objDatabase->execute("UPDATE `tl_demo_table` SET `demo_counter`=0 WHERE `demo_browser`='Unknown'");
+
=== Aufruf durch Contao ===
} catch (Exception $e) { $errors[] = $e->getMessage(); }
+
Contao ruft die runonce.php Dateien aller aktiven Module auf (sofern vorhanden) direkt vor einem Datenbank Update bzw. dem Test ob dieser notwendig ist. Das passiert somit bei zwei Ereignissen:
//
+
* Installation oder Update oder Deinstallation einer Erweiterung über den Erweiterungskatalog bzw. die Erweiterungsverwaltung.
// Insert database
+
* Liveupdate von Contao
try {
+
Installiert man eine Erweiterung manuell oder macht ein manuelles Update von Contao, muss wie üblich die install.php aufgerufen werden, bzw. im Backend über Erweiterungsverwaltung - Datenbank aktualisieren, um den Vorgang auszulösen.
    $objDatabase->execute("INSERT INTO `tl_demo_table` (`id`, `demo_counter`) VALUES (0, '10')");
+
} catch (Exception $e) { $errors[] = $e->getMessage(); }
+
?>
+
  
===Datenbank Insert, OOP Variante===
+
=== Code Beispiele ===
Quelle: Forum.
+
Beispiele sind auf einer extra Seite zu finden: [[Runonce_Code_Beispiele|Runonce Code Beispiele]]
<?php
+
class RunonceJob extends Frontend
+
{
+
    public function __construct()
+
    {
+
        parent::__construct();
+
    }
+
    public function run()
+
    {
+
        $arrInsert=array(
+
            'action'    => 'runonce',
+
            'text'      => 'runonce'
+
        );
+
        $this->Database->prepare("INSERT INTO tl_log %s")->set($arrInsert)->execute();
+
    }
+
}
+
$objRunonceJob = new RunonceJob();
+
$objRunonceJob->run();
+
?>
+
  
==Hinweis==
+
== Verwendung in Contao 2.9 und älter ==
{{Achtung|Vorsicht damit bei Extensions mit Abhängigkeiten zu weiteren Extensions.<br />
+
In Contao 2.9 und älter gibt es für alle Module und das Liveupdate einen gemeinsamen Ort für das Ablegen der runonce.php. Dies führte in der Vergangenheit zu Problemen. (siehe dazu [[Runonce#Problemfall|Problemfall in 2.9]])
Bringen 2 Extensions jeweils eine runonce.php mit, wird nur eine ausgeführt!}}
+
=== Ablageort ===
''Hier ist der Author nicht sicher, ob die erste oder die letzte davon.''
+
Die runonce.php muss im /system Verzeichnis von Contao liegen. Beispiel:
 +
<source lang="php">
 +
/system/runonce.php
 +
</source>
 +
=== Aufruf durch Contao ===
 +
Contao ruft die runonce.php auf, wenn vorhanden, bei jedem Seitenaufruf. Dabei spielt es keine Rolle ob es ein Frontend oder Backend Aufruf ist.
 +
=== Problemfall ===
 +
Wie schon erwähnt, kann das zu Probleme führen, wenn gleichzeigt mehrere Module installiert werden, die jeweils eine runonce.php mitbringen.
  
 +
Eine Lösung für dieses Problem ist auf der Seite [[Runonce_Code_Beispiele#Code_Beispiel_Spezialfall|Runonce Code Beispiel Spezialfall]] zu finden.
 +
Diese Lösung funktioniert aber nur, wenn alle Entwickler sich dran halten.
  
===Modulbasierte runonce.php===
+
== Spezialfall: runonce.php für 2.9 und 2.10 ==
 +
Wenn ein Modul definiert ist für 2.9 und 2.10 zu funktionieren und bringt es eine runonce.php mit, muss diese beide Aufruforte unterstützen.
 +
Hier ist von der Idee, diese einfach an beiden Orten abzulegen und somit zweimal mitzubringen, dringend abzuraten. Grund ist der [[Runonce#Problemfall|Problemfall]] wie bei Contao 2.9 schon beschrieben.
 +
Eine Lösung dafür ist auf dieser Seite zu finden: [[Runonce_Code_Beispiele#Code_Beispiel_Spezialfall|Runonce Code Beispiele]]
  
Den nachfolgenden Code in die config.php des eigenen Modules einfuegen. Den Pfad anpassen und eine runonce.php im config Verzeichnis erstellen.
+
Dabei wird eine Universal-Runonce im /system Verzeichnis abgelegt, welche dann die runonce.php in den config Verzeichnissen der aktiven Module sucht und aufruft.
Diese runonce.php wird beim naechsten Ausfuehren einmalig ausgefuehrt, und danach geloescht.
+
Im Prinzip wird hier die Contao 2.10 Variante nachgeahmt.
  
$runonceFile = '/system/modules/MODULNAME/config/runonce.php';
+
----
if (file_exists(TL_ROOT . $runonceFile))
+
--[[Benutzer:BugBuster|BugBuster]] 22:19, 13. Nov. 2011 (CET)
{
+
  include(TL_ROOT . $runonceFile);
+
  $objFiles = Files::getInstance();
+
  $objFiles->delete($runonceFile);
+
}
+

Aktuelle Version vom 15. November 2011, 10:35 Uhr

betrifft
TYPOlight Version ab 2.7
Contao Version ab 2.9

Live Update nutzt diese, die Extensions nutzen diese auch: eine Datei runonce.php

Diese Datei tut genau das, was der Name schon vermuten lässt. Sie wird nur einmal ausgeführt und anschließend gelöscht.

Von Contao 2.9 zu 2.10 gab es eine Änderung diesbezüglich was Ort und Zeitpunkt des Aufrufes betrifft. Es ist möglich, für beide Arten gleichzeitg kompatibel zu sein und wird deshalb hier auch mit beschrieben.

Verwendung ab Contao 2.10

Ab Contao 2.10 ist die runonce Nutzung modulbasiert. Das heißt, jedes Modul bringt seine eigene runonce.php in der Verzeichnistruktur des Moduls mit. Nicht mehr wie in 2.9 im System Verzeichis.

Ablageort

Die runonce.php muss im config Verzeichnis des Moduls liegen. Beispiel:

/system/modules/banner/config/runonce.php

Der Ablageort /system/runonce.php funktioniert zwar auch noch, sollte aber nicht mehr verwendet werden, da es zu gegenseitigem Überschreiben kommen kann. (siehe dazu Problemfall in 2.9)

Aufruf durch Contao

Contao ruft die runonce.php Dateien aller aktiven Module auf (sofern vorhanden) direkt vor einem Datenbank Update bzw. dem Test ob dieser notwendig ist. Das passiert somit bei zwei Ereignissen:

  • Installation oder Update oder Deinstallation einer Erweiterung über den Erweiterungskatalog bzw. die Erweiterungsverwaltung.
  • Liveupdate von Contao

Installiert man eine Erweiterung manuell oder macht ein manuelles Update von Contao, muss wie üblich die install.php aufgerufen werden, bzw. im Backend über Erweiterungsverwaltung - Datenbank aktualisieren, um den Vorgang auszulösen.

Code Beispiele

Beispiele sind auf einer extra Seite zu finden: Runonce Code Beispiele

Verwendung in Contao 2.9 und älter

In Contao 2.9 und älter gibt es für alle Module und das Liveupdate einen gemeinsamen Ort für das Ablegen der runonce.php. Dies führte in der Vergangenheit zu Problemen. (siehe dazu Problemfall in 2.9)

Ablageort

Die runonce.php muss im /system Verzeichnis von Contao liegen. Beispiel:

/system/runonce.php

Aufruf durch Contao

Contao ruft die runonce.php auf, wenn vorhanden, bei jedem Seitenaufruf. Dabei spielt es keine Rolle ob es ein Frontend oder Backend Aufruf ist.

Problemfall

Wie schon erwähnt, kann das zu Probleme führen, wenn gleichzeigt mehrere Module installiert werden, die jeweils eine runonce.php mitbringen.

Eine Lösung für dieses Problem ist auf der Seite Runonce Code Beispiel Spezialfall zu finden. Diese Lösung funktioniert aber nur, wenn alle Entwickler sich dran halten.

Spezialfall: runonce.php für 2.9 und 2.10

Wenn ein Modul definiert ist für 2.9 und 2.10 zu funktionieren und bringt es eine runonce.php mit, muss diese beide Aufruforte unterstützen. Hier ist von der Idee, diese einfach an beiden Orten abzulegen und somit zweimal mitzubringen, dringend abzuraten. Grund ist der Problemfall wie bei Contao 2.9 schon beschrieben. Eine Lösung dafür ist auf dieser Seite zu finden: Runonce Code Beispiele

Dabei wird eine Universal-Runonce im /system Verzeichnis abgelegt, welche dann die runonce.php in den config Verzeichnissen der aktiven Module sucht und aufruft. Im Prinzip wird hier die Contao 2.10 Variante nachgeahmt.


--BugBuster 22:19, 13. Nov. 2011 (CET)

Ansichten
Meine Werkzeuge

Contao Community Documentation

<user> Kann es sein, dass sich SyncCto bei Sync->Client anders verhält als umgegekehrt also Sync->Server ?
<xtra> ja, da laufen die Daten in die andere Richtung *scnr*

Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge