Runonce: Unterschied zwischen den Versionen

Aus Contao Community Documentation

(Modulbasierte runonce.php)
(Modulbasierte runonce.php)
Zeile 67: Zeile 67:
 
===Modulbasierte runonce.php===
 
===Modulbasierte runonce.php===
  
Den nachfolgenden Code in die config.php des eigenen Modules einfuegen. Den Pfad anpassen und eine runonce.php im config Verzeichnis erstellen.
+
Den nachfolgenden Code in die config.php des eigenen Modules einfuegen. Den Pfad anpassen und eine runonce.php im config Verzeichnis erstellen.<br />
 
Diese runonce.php wird beim naechsten Ausfuehren einmalig ausgefuehrt, und danach geloescht.
 
Diese runonce.php wird beim naechsten Ausfuehren einmalig ausgefuehrt, und danach geloescht.
  
Zeile 78: Zeile 78:
 
  }
 
  }
  
Nachteil dieser Variante, die ER Verwaltung meckert, das Modul sei unvollständig, da nun eine Datei fehlt.
+
Nachteil dieser Variante, die ER Verwaltung meckert, das Modul sei unvollständig, da nun eine Datei fehlt.<br />
 
Idee: die Datei nicht löschen sondern überschreiben:
 
Idee: die Datei nicht löschen sondern überschreiben:
  

Version vom 14. Juni 2010, 14:55 Uhr


betrifft
TYPOlight Version ab 2.7
Contao Version ab 2.9

Live Update nutzt diese, die Extensions nutzen diese auch: die Datei TL_ROOT/system/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.
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.


Anwendungsbeispiele

Löschen einer Datei

<?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

<?php @error_reporting(0); @ini_set("display_errors", 0); 
$objDatabase = Database::getInstance();
//
// Update database
try { 
    $objDatabase->execute("UPDATE `tl_demo_table` SET `demo_counter`=0 WHERE `demo_browser`='Unknown'");
} catch (Exception $e) { $errors[] = $e->getMessage(); }
//
// Insert database
try { 
    $objDatabase->execute("INSERT INTO `tl_demo_table` (`id`, `demo_counter`) VALUES (0, '10')"); 
} catch (Exception $e) { $errors[] = $e->getMessage(); }
?>

Datenbank Insert, OOP Variante

Quelle: Forum.

<?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

Achtung.png Achtung: Vorsicht damit bei Extensions mit Abhängigkeiten zu weiteren Extensions.

Bringen 2 Extensions jeweils eine runonce.php mit, wird nur eine ausgeführt!

Hier ist der Author nicht sicher, ob die erste oder die letzte davon.


Modulbasierte runonce.php

Den nachfolgenden Code in die config.php des eigenen Modules einfuegen. Den Pfad anpassen und eine runonce.php im config Verzeichnis erstellen.
Diese runonce.php wird beim naechsten Ausfuehren einmalig ausgefuehrt, und danach geloescht.

$runonceFile = '/system/modules/MODULNAME/config/runonce.php';
if (file_exists(TL_ROOT . $runonceFile))
{
 include(TL_ROOT . $runonceFile);
 $objFiles = Files::getInstance();
 $objFiles->delete($runonceFile);
}

Nachteil dieser Variante, die ER Verwaltung meckert, das Modul sei unvollständig, da nun eine Datei fehlt.
Idee: die Datei nicht löschen sondern überschreiben:

$runonceFile = 'system/modules/MODULNAME/config/runonce.php';
if (file_exists(TL_ROOT . "/" . $runonceFile))
{
   $runonce_ready = false;
   include(TL_ROOT . "/" . $runonceFile);
   if ($runonce_ready === false) 
   {
       $objFiles = Files::getInstance();
       $objFiles->delete($runonceFile); // hier wird intern ein "TL_ROOT/" vorgesetzt
       //nun wieder neu anlegen mit neuem Inhalt
       $objFile = new File($runonceFile);
       $objFile->write("<?php $runonce_ready = true; ?>);
       $objFile->close();
   }
}
Ansichten
Meine Werkzeuge

Contao Community Documentation

Ich überlege gerade warum Contao Developer einen Hangout mit Bildübertragung machen... abgesehen von TheTril sind wir da alle relativ hässliche Typen wo Audio deutlich reichen würde. *g*

Leo Unglaub
Navigation
Verstehen
Verwenden
Entwickeln
Verschiedenes
Werkzeuge