TYPOlight: Hooks nutzen, um ZIP-Files automatisch zu entpacken

Ein Hook ist simpel: Von der bekannten Modulstruktur benötigt man nur die /config/config.php, in der man Klasse und Funktion an den gewünschten Hook hängt:

Sowie die Klasse als solche (direkt im Modulordner):

Das war’s im Wesentlichen. Der Vollständigkeit halber hier noch die Funkion zum Entpacken, sowie ein wenig Aufräumen der hochgeladenen Dateien:

HTH

TYPOlight: Eigene Content-Elemente

Direkt analog zur Erweiterung bestehender Content Elemente mit neuen Feldern funktioniert das Erstellen eigener Content Elemente. Man hängt sich nur in andere (bzw. weitere) Arrays. Ich orientiere mich im Folgenden an diesem Tutorial, sowie an dieser Erweiterung.

Also, gegeben sei dieselbe Dateistruktur wie für neue Felder, in einem eigenen Modul. In /config/config.php deklariert man sein neues Content-Element:

In /config/database.sql fügt man die gewünschten Datenbank-Felder hinzu:

In /dca/tl_content.php ergänzt man die neuen Felder und deklariert die Palette:

In languages/de/tl_content.php und analog in languages/en/tl_content.php ergänzt man die referenzierten Texte:

Nun kommt die neue Klasse IframeCustom:

Und schließlich das Template ce_iframe_custom.tpl:

Ein Selbstgänger 🙂

TYPOlight: Content-Elemente mit eigenen Feldern

[Disclaimer: Ja, TYPOlight heißt schon einige Zeit Contao – die Installation, die ich hier vor mir habe, heißt aber noch TYPOlight. Aktuell ist 3.3.3, Beta ist 4.0, ich habe 2.8.1. Eine Übersicht über alle Versionen gibt es hier.]

Es gibt eine Doku zum Hinzufügen von Feldern. Mein Problem damit: Die Anleitung bezieht sich auf die Mitgliederverwaltung. Die Mitgliederverwaltung hat aber eine eigene Tabelle (tl_member) in der Datenbank, sowie eine eigene Palette. Interessanter ist es, eine neues Feld bsplw. dem Content Element “Image” hinzuzufügen, den alle Content Elemente teilen sich die Tabelle tl_content, sowie eine gemeinsame Palette. Wie bekommt man ein Feld, das nur für Images angezeigt wird?

Analog zum oben verlinkten Beispiel: Über ein Modul, und zwar mit folgender Dateistruktur:

  • tl_content_custom/
    • config/
      • config.php
      • database.php
    • dca/
      • tl_content.php
    • languages/
      • de/
        • tl_content.php
      • en/
        • tl_content.php
    • templates/
      • ce_image_custom.tpl
    • ContentImageCustom.php

Im ersten Schritt hängt man sich in das CMS:

In config/config.php registriert man eine eigene Klasse für den Typ “Image”:

In config/database.sql definiert man die zusätzlich benötigten Felder der Tabelle tl_content – und man darf sich nicht daran stören, dass das in einem CREATE TABLE passiert:

Die Felder werden dann über http://mydomain.tld/typolight/install.php unter dem Punkt “Tabellen aktualisieren” aktualisiert; dort wird das CREATE in ein ALTER geändert.

In dca/tl_content.php deklariert man, wann das neue Feld angezeigt wird (“dca” steht für “Data Container Array“), also dass es nur für Images verwendet werden soll. Dazu ergänzt man “die Palette” und “die Felder”. Die Palette ist quasi ein Sub-Set aller für Content-Elemente verfügbaren Felder. Wenn wir also das Content Element “Image” nur um vorhandene Felder erweitern wollten, dann bräuchten wir die Felder nicht ergänzen. Das ist hier nicht der Fall (wir haben oben ein neues Feld in die Datenbank eingefügt), deshalb konfigurieren wir das neue Feld is_retina und hängen es (ja: per str_replace ^^) an die kommaseparierte Liste von erlaubten Feldern für den Typ “Image”. Dabei kann man sich an /system/modules/backend/dca/tl_content.php orientieren, dort sind die Original-Deklarationen der Felder und Paletten zu finden.

In languages/de/tl_content.php und analog in languages/en/tl_content.php kommen alle benötigten (=in der Feldkonfiguration referenzierten) Texte, das ist hier nur einer:

Im zweiten Schritt erstellt man dann endlich die eigene Logik. In config/config.php haben wir die Klasse ContentImageCustom referenziert (s.o.). Die wird jetzt direkt im Modulordner angelegt; von dort wird sie automatisch geladen. Der Einfachheit halber erweitern wir ContentImage, und der einzig nötige Code ist die Referenzierung unseres eigenen Templates, in dem wir dann auf das neue Feld reagieren:

Das genannte Template ist templates/ce_image_custom.tpl, und darin sieht’s dann so aus:

(Das ist natürlich nur ein Snippet; insgesamt habe ich den Code von /system/modules/frontend/templates/ce_image.tpl geklaut, und mit obigem Snippet erweitert.)

HTH