Google Analytics einfach in Typo3 einbinden

Am einfachsten und ohne Erweiterung geht das natürlich mit Typoscript:

page.100 = HTML
page.100.value (
  <script type="text/javascript">
   var _gaq = _gaq || [];
   _gaq.push(['_setAccount', 'UA-XXXXX-X']);
   _gaq.push(['_trackPageview']);
  (function() {
    var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
  })();
  </script>
)

Einen eigenen Data Container in Contao

Nehmen wir mal an, wir wollen im Contao Backend eine Auswertung aus verschiedenen Datentabellen darstellen oder noch etwas ausgefallener: die Daten sollen über eine Rest oder Soap-Schnittstelle abgerufen werden. Jetzt haben wir das Problem, dass Contao von Haus aus drei Typen für einen dataContainer unterstützt: DC_Table, DC_File und DC_Folder. Alle diese Klassen sind für unseren Anwendungsfall nicht geeignet, da wir weder eine Datentabelle, Datei vorliegen haben und auch nicht mit dem Dateisystem arbeiten wollen. Wir können leider nicht wie unter “Contao Autoloader erweitern” beschrieben, einen eigenen DataContainer über den Autoloader laden, da Contao an der betreffenden Stelle mit einem require arbeitet:

$dataContainer = 'DC_' . $GLOBALS['TL_DCA'][$strTable]['config']['dataContainer'];
require(sprintf('%s/system/drivers/%s.php', TL_ROOT, $dataContainer));

Wir müssen somit (leider) unseren neuen DataContainer im Ordner system/drivers erstellen.

Continue reading

Contao Autoloader erweitern

Leider gibt es momentan keine schöne Lösung den Autoloader von Contao zu erweitern. Der Autoloader in Contao 2.9.4 findet sich unter system/functions.php. Er wird dort mittels der __autoload Funktion von PHP implementiert. Ich vermutete, dass dies aus Gründen der Kompatibilität auf diese Weise gelöst wurde. In der Tat gibt es ein Feature-Ticket, welches eine Überarbeitung des Autoloaders vorsieht und sogar anerkannt wurde. Leider ist jedoch seit ca. elf Monaten nichts passiert.

Um updatesicher den Autoloader zu erweitern, kann man folgendermaßen vorgehen:

In der initconfig.php kann eine eigene Klasse eingebunden werden, die über spl_autoload einen Autoloader registriert. Das könnte beispielsweise so aussehen:

require_once(dirname(__FILE__).'/../../myclasses/myautoloader.php');

In dieser Datei wird der eigene Autoloader implementiert. Ein ganz rudimentärer Code als Beispiel:

class Autoloader
{
  /**
   * @param string $class_
   */
  public static function autoload($class_)
  {
    $file=dirname(__FILE__).'/'.strtolower($class_).'.php';
    if(file_exists($file))
    {
      require_once $file;
      return;
    }
      __autoload($class_);
  }
}
// Register autoloader
spl_autoload_register(array('Autoloader', 'autoload'));

Der Trick an der Sache ist, die normalerweise magisch aufgerufene Methode __autoload explizit am Ende des eigenen Autoloaders aufzurufen. Ich habe das nicht in aller Ausführlichkeit getestet, also ohne Garantie.

Buchbewertung “Websites erstellen mit Contao” von Peter Müller

Das Buch “Websites erstellen mit Contao” ist im Galileo Computing Verlag in der 1. Auflage am 28. September 2010 erschienen. Das Buch wendet sich an Contao-Anwender und Administratoren. Für diese Zielgruppe ist das Buch eine gelungene und hervorragend aufbereitete Lektüre. Praktisch alle relevanten Bereiche von der Installation über den Aufbau einer Webseite bis zu Optimierung sind abgedeckt. Wer eine einfache Webseite mit Contao erstellen will und sich nicht mit dem System auskennt, für den ist das Buch genau das richtige. Über die Contao Module Entwicklung ist in diesem Buch nichts zu finden.

Fakten über MyISAM

- Ist die MySQL Standard-Speicher-Engine
- Jede MyISAM-Tabelle wird in drei Dateien auf der Festplatte gespeichert (.frm, .MYD, .MYI).
- Alle Daten werden mit dem niederwertigen Byte zuerst gespeichert. Somit können die Datendateien zwischen verschiedenen Plattformen kopiert werden. Für Embedded-Systeme gilt das nicht immer.
- Numerischen Schlüsselwerte werden mit dem höchstwertigen Byte zuerst gespeichert (bessere Indexkompression).
- Große Dateien werden unterstützt, sofern es keine Betriebssystembedingte Einschränkung gibt, sind das bis zu 256TB
- Keine Transaktionen
- Standardmäßig kann eine MyISAM-Tabelle maximal 64 Indizes haben. Jeder Indize kann bis zu 16 Spalten besitzen.
- Die Höchstlänge für Schlüssel beträgt standardmäßig 1000 Bytes
- Standardmäßig maximal 2^32 (~4.295E+09) Zeilen pro Tabelle.
- Eine AUTO_INCREMENT Spalte pro Tabelle
- Indizierung von BLOB und TEXT-Spalten (Full-text search index)
- Jede Zeichenspalte kann einen anderen Zeichensatz haben
- Die Summe der Längen der VARCHAR- und CHAR-Spalten in einer Tabelle kann bis zu 64KB betragen.
- Kein Clustering
- Locking ist auf Tabellenebene möglich
- Daten- und Indexdateien können in unterschiedliche Verzeichnisse/Festplatten gelegt werden, um mehr Geschwindigkeit zu erzielen.

Quelle: MySQL 5.1 Reference Manual :: 13 Storage Engines :: 13.5 The MyISAM Storage Engine

Eine Konvertierung zu InnoDB ist unter bestimmten Voraussetzungen möglich.

Contao Module erstellen – DCA

Nun kommen wir zum Data Container Array, kurz DCA. Wie bereits im letzten Artikel “Contao Module erstellen – Backend” beschrieben, geht es vorerst um den Backend-Teil. Wir haben dort eine Tabelle tl_customers definiert und nun müßen wir Contao noch die DCA dazu liefern. Unter $GLOBALS['TL_DCA'] sind diese Tabellen-Metadaten hinterlegt. Wir erstellen also im Ordner shop/dca eine Datei tl_customers.php. Dort können wir die globalen Variablen $GLOBALS respektive unter dem Schlüssel $GLOBALS['TL_DCA']['tl_customers'] mit der Definition beginnen.

Continue reading