TYPO3: Felder über PageTS entfernen

21. Juni 2011 in TYPO3 von Leo

Um für Kunden welche Backend-Zugriff für ihre TYPO3 Installation den Umgang mit TYPO3 möglichst einfach und Benutzerfreundlich zu gestalten, wird alles unnötige – was sie halt nicht benötigen – entfernt. So auch bei den Feldern. Verschiedene Plugins wie z.B. tt_news sind sehr Umfangreich und bieten Felder an die der Kunde nicht benötigt. Da es teilweise sehr viele Felder hat, könnte dies den Benutzer nur verwirren, als dass sie ihm was nutzen. Eine möglichkeit diese Felder zu entfernen, ist über die Zugriffsliste. Man bearbeitet eine Gruppe und kann dort bei den Rechten die Zugriffsliste einschränken, somit werden die ausgeschlossenen Felder ausgeblendet.
Was wenn jedoch einige Felder auf verschiedenen Seiten (oder z.B. SysFoldern mit Datensätzen für Plugins) benötigt werden und auf anderen wiederum nicht?

Eine simple Methode ist das auslagern des pageTS in eine oder mehrere Dateien. Diese Dateien können wir im pageTS einbinden.
Und so gehts:

Wir erstellen eine Datei im fileadmin Ordner, wo genau ist egal. Am besten nehmen wir die Endung .ts, auch wenn es sich eigentlich um eine Textdatei handelt, so wissen wir was es ist.
In dieser Datei können wir für jedes Feld das wir nicht haben wollen folgende Zeile einfügen:

TCEFORM.tt_news.author.disabled = 1

Somit wird das Autoren-Feld von tt_news nicht mehr angezeigt. Dies kann für alle Spalten in einer Tabelle gemacht werden, am besten öffnet man noch phpMyAdmin (oder ähnlich) und kopiert dort die Namen der Spalten.
Um ein Feld zu erlauben wird demnach einfach eine “0″ gesetzt.

Damit das ganze seine Wirkung zeigen kann, muss es noch im pageTS eingebunden werden:

<INCLUDE_TYPOSCRIPT: source="FILE:fileadmin/ts/setup/tt_news-fields.ts">

Fertig! Um Felder je nach Ort zu erlauben / verbieten, erstellt man am besten 2 Dateien (für zum erlauben / verbieten) und bindet diese je nach dem ein wo halt die Felder erlaubt oder verboten werden sollen.

pageTS: Seiten TypoScript, zu finden beim bearbeiten einer Hauptseite unter dem Tab “Resources” (Ressourcen).

Subqueries in TYPO3 mit TypoScript

20. Januar 2011 in TYPO3 von Leo

In TYPO3 lassen sich per TypoScripts normale Subqueries bilden, wie man sie aus MySQL kennt. Das ganze lernte ich im Zusammenhang mit einem RSS Feed, welchen ich für einen Kunden erstellte. So musste ich mit einer ID welche ich zu beginn über eine Variable von RealURL erhielt in grossen mm_Tables nach nach weiteren ID’s suchen, mit welchen ich dann zum Ziel kam.

Für solche grosse Sprünge in Tabellen nutzten wir dann Subqueries, sozusagen Queries in Queries, welche bis ins unendliche verschachtelt werden können (Achtung Ladezeiten!).

elementxy = CONTENT
elementxy {
        # Die Tabelle die durchsucht wird
        table = tx_extension_unsere_tabelle
        select {
            andWhere {
                # Optional: Eine Variable welche wir mitbekommen (get)
                data = GP:tx_extension_pi1|showUid
                insertData = 1
                wrap = uid IN (SELECT uid_local FROM tx_extension_unsere_tabelle_auth_mm WHERE uid_foreign IN (SELECT uid_foreign FROM tx_extension_unsere_tabelle_head_mm WHERE uid_local = |))
            }
            # Der Sysfolder mit den Datensätzen
            pidInList = 1234
            orderBy = crdate DESC
            max = 15
        }

        renderObj = COA
        renderObj {
            # Das Feld welches vom SELECT ausgewählt wird
            field = title
            # Das Resultat wird gewrappt
            wrap = <item>|</item>
       }
}

Was wird also gemacht?
Zuerst geben wir die Tabelle an welche wir mit dem normalen SELECT auswählen, also SELECT … FROM . Welche Spalte wir ins SELECT werfen wird weiter unten im renderObj.field bestimmt, unser normales SELECT würde also so aussehen:

SELECT title FROM tx_extension_unsere_tabelle ...

Das ist natürlich noch nicht alles. Nach dem normalen SELECT geht es weiter mit dem andWhere aus unserem TypoScript Code. Dieses andWhere Statement hängt eigentlich nur ein WHERE an unseren bisherigen Code und wird dann mit dem Rest was im andWhere steht weitergeführt. Deshalb steht im andWhere auch nicht noch ein SELECT oder ähnlich am Anfang.

Nachdem unser Query mit den Subqueries gebildet wurde, wird mit pidInList die ID unseres Sysfolders angegeben, also der Sysfolder wo die Datensätze gespeichert sind, welche wir hier benötigen. OrderBy und Max sind normale SQL Statements, welche sicherlich jedem bekannt sind.

Danach wird unser Resultat gerendert und in den Wrap geschrieben (dort wo die Pipe “|” ist), wir können das ganze noch z.B. mit HTML Code wrappen.

TYPO3: Immer HTML E-Mails bei Newsletter Anmeldung (sr_email_subscribe)

20. Dezember 2010 in TYPO3 von Leo

Da HTML E-Mails eigentlich mittlerweile sowieso der Standard sind und es nur mehr Aufwand ist einen Newsletter in zwei Formaten zu versenden, gibt es eine sehr simple Möglichkeit immer HTML E-Mails in TYPO3 zu aktivieren, wenn man die Newsletter Anmeldungs Extension sr_email_subscribe (oder irgend eine andere welche auf tt_address aufbaut) nutzt.

Um also HTML E-Mails als Standard zu setzen, gehen wir in unsere Datenbank und suchen die Tabelle “tt_address”. Dort wechseln wir zur Struktur und bearbeiten die Spalte “module_sys_dmail_html”. Dort setzen wir einen Benutzerdefinierten Standardwert, nämlich “1″.

Nun muss lediglich noch im HTML Template die Auswahl entfernt werden sowie im TypoScript das Feld aus den Required Fields nehmen.

Neues Design und weitere Änderungen

1. Oktober 2010 in Allgemein von Leo

Die kleine “Schreibpause” hier auf dem Lehrlingsblog ist vorbei und es wird wieder fleissig geschrieben! Doch nicht nur das ändert sich nun (bzw. wieder), sondern es gibt auch ein komplett neues Design, welches bestimmt länger bleiben wird als die bisherigen :)
Noch kurz etwas zum Design: Ja das Design soll von den Farben her auf TYPO3 andeuten, da es ja auch das Hauptthema hier ist.

Ausserdem wurde etwas aufgeräumt, z.B. wurden die Kategorien neu angeordnet und neue erstellt.
Kommende Artikel werden sich vor allem um TYPO3 und PHP drehen, wovon die ersten neuen Artikel schon bald folgen werden.

Ich freue mich jederzeit auf Feedback ;)

Leo

TYPO3 und PHPUnit: Code Testen (+ Hello World)

5. August 2010 in TYPO3 von Leo

Das automatisierte Testen von Code wird immer wie beliebter. Deshalb habe ich diese Woche bei 4eyes die Aufgabe erhalten, mir das ganze mal anzusehen und gleich Tests in TYPO3 zu schreiben um eine Extension zu testen.

Anders als mit Selenium, wird hier jedoch direkt der (PHP) Code getestet, also bevor schon die fertigen Resultate da sind, testet man was zwischen Start und ende passiert. So kann man mit PHPUnit z.B. testen ob eine bestimmte Funktion im Code ein bestimmtes Resultat zurück liefert.

Nachdem ich die Funktionsweise dann auch verstanden habe und das Testen möglich war (nach ein paar Startschwierigkeiten), schrieb ich zuerst mal einen kleinen Hello World Test. Doch bevor wir zum Test kommen, zeige ich euch wie ihr alles richtig einrichtet.

Installation

Die Extension PHPUnit (extkey: phpunit) herunterladen und installieren. Hier findet ihr die Extension auf Typo3.org, klick.

Nach der Installation erstellt ihr in einer eurer Extensions einen Ordner namens “Tests”. Der Pfad wäre also:

typo3conf/ext/deineExtension/Tests

Nun erstellt ihr im gerade erstellten Ordner ein neues PHP File mit folgendem Namensschema:

tx-extKey_HelloWorld_testcase.php

Wichtig ist hierbei eigentlich nur das “_testcase” am ende, da dies PHPUnit sagt, dass es sich hier im ein Test File handelt (PHPUnit scannt alle ext Verzeichnise automatisch).

Nun füllen wir das PHP File mit dem standardmässig benötigten Code:

<?php
require_once 'PHPUnit/Framework.php';

class tx_extKey_HelloWorld_testcase extends tx_phpunit_testcase {

}

?>

Lösung: RTE lädt nach Update auf TYPO3 4.4 nicht mehr

in TYPO3 von Leo

Als ich kürzlich die TYPO3 Installation eines Kunden von TYPO3 4.3.3 auf 4.4.1 geupdated habe, merkte ich beim standardmässigen Testen der Seite, dass der RTE (Rich-Text Editor) im Backend nicht mehr geladen wurde.

Nach einer kurzen Google suche fand ich auch schon die Ursache dieses eigentlich kleinen Problems. Und zwar tritt dieser Fehler auf, wenn die Extension ‘date2calendar‘ installiert ist.

Der RTE wurde nämlich in der neuen Version 4.4 komplett überarbeitet und mit ExtJS umgesetzt. Ausserdem wird die genannte Extension gar nicht mehr benötigt, da sie schon im voraus im Core eingebaut ist.

Extension deinstallieren und der RTE funktioniert wieder! :)

Mit PHP chmod Rechte setzen (Dateien und Ordner)

30. April 2010 in PHP von Leo

Als ich kürzlich mit einem Freund an einem Projekt arbeitete, auf welchem später TYPO3 laufen wird, hatten wir mal wieder das Problem, dass ein Ordner welcher auch noch Dateien enthält nicht mehr vom FTP Server gelöscht werden konnte. Als das Problem erstmals vor einer Woche auftrat, konnten wir es lösen indem wir einfach einen anderen FTP Client (ich glaube es war SmartFTP) anstatt Filezilla nahmen. Dieser konnte alles löschen.

Doch nun lässt sich gar nichts mehr löschen. Die Rechte waren wenn ich mich besinne auf chmod 755, trotzdem machte weder eine Datei noch der Ordner einen wank.

Also schreib ich kurz ein kleines PHP Script, in welchem ich das ganze per PHP lösen versuchte (nein es funktionierte sogar!) :)

Das Script sah dann so aus:

<?php

chmod ("ordnerxy/.htaccess", 777);
chmod ("ordnerxy/.htaccess", "drwxrwxrwx");
chmod ("ordnerxy/.htaccess", 0777);

chmod ("ordnerxy", 777);
chmod ("ordnerxy", "drwxrwxrwx");
chmod ("ordnerxy", 0777);

echo 'ok';

?>

Im ersten abschnitt werden der Datei “.htaccess”, welche im Ordner “ordnerxy” liegt die rechte 777 gegeben. Im zweiten abschnitt werden die selben Rechte auch noch dem Ordner “ordnerxy” gegeben, da sich dieser ja auch nicht löschen liess. Eventuell reicht es sogar wenn man nur dem Ordner die nötigen Rechte gibt.
Um das Script zum laufen zu bringen müssen natürlich jeweils die Pfade angepasst werden, stets vom Script ausgegangen.
In unserem Beispiel hier würde das in etwa so aussehen:

/ordner1/ordnerxy/...

Dabei wäre das Script im Ordner “ordner1″.

Als Datei können übrigens auch andere Dateien mit anderen Dateiendungen angegeben werden.

Das Script muss einfach kurz im Browser aufgerufen werden. Mit dem “echo” am Schluss wird noch bestätigt dass man wirklich das Script geöffnet hat.

Meine erste richtige TYPO3 Extension

4. Januar 2010 in TYPO3 von Leo

Nach meiner kleinen, aller ersten “Extension”  (Klick), habe ich vor kurzem nun eine richtige Extension erstellt. Und zwar habe ich in einem kürzlichen Projekt mit meinem Lehrmeister und teilweise der Hilfe von anderen eine erste “wirkliche” Extension erstellt. Die Extension nennt sich Testimonials und kann hier aufgefunden werden (siehe rechte Seite).
Die Extension zeigt zufällig eine der im backend ausgewählten Personen aus und zeigt sie an. Dabei wird der Name, Titel, sowie das Bild etc. aus der Personen Datenbank genommen.
Geschrieben ist die Extension extra für dieses Projekt und befindet sich bisher nur dort im Einsatz.

Angefangen haben wir wieder mit Kickstarter, um die einfachen Felder für die Eingabe im Backend zu erstellen. Danach mussten wir jedoch noch einiges mit PHP, HTML, sowie CSS anpassen, damit die Extension schlussendlich so aussah, wie es sich der Kunde gewünscht hat.
Die Extension ist in 2 Sprachen verfügbar, deutsch und englisch. Hierbei wird einfach jeweils die englische Übersetzung des Feldes aus einem XML File genommen, in welchem dies alles abgespeichert ist.

Nach dem Break erfahrt ihr noch alles im Detail.

TYPO3: Einfache Extensions erstellen mit Kickstarter

13. November 2009 in Allgemein von Leo

Diese Woche habe ich mit meinem Lehrmeister Markus meine erste TYPO3 Extension erstellt. In dieser Extension musste zwar etwas Code angepasst werden, jedoch kann man mit der Extension Kickstarter auch so schon einige kleine Extensions erstellen, ohne grosse “Programmierkenntnisse”.Ihr könnt mit Kickstarter sozusagen eure kleine Extension zusammenklicken.

Hier könnt ihr Kickstarter herunterladen: http://typo3.org/extensions/repository/view/kickstarter/current/

Eure erste kleine Extension könnt ihr dann mit folgendem Tutorial erstellen: http://typo3.org/documentation/document-library/tutorials/player_profile_basic/current/

Viel Erfolg :-)