TYPO3 MailForm Validierungs-Probleme wegen Komma

19. September 2011 in TYPO3 von Leo

Vor kurzem bin ich wieder über das Problem gestolpert. Hat man in der standard TYPO3 MailForm Kommas in den Labels angegeben, z.b. “Name, Vorname”, so funktioniert die ganze MailForm nicht mehr da die Validierung scheitert.
Grund dafür ist das JavaScript, welches durch das Komma ins stolpern kommt.

Die einzige mir bekannte Lösung ist entweder auf eine andere Extension umzusteigen, oder einfach keine Kommas zu nutzen.

Hier findet ihr auch noch kurz etwas dazu: Klick

TYPO3: Eigene Extension lokalisieren

16. August 2011 in TYPO3 von Leo

Um die eigene Extension Mehrsprachig zu machen und trotzdem so flexibel wie möglich zu halten, nutzt man die locallang. Früher handelte es sich hier um ein simples PHP-File mit einem Array, heute ist es ein XML-File mit einer besseren struktur und Übersicht, wo es auch keine Zeichensatz Probleme gibt.

Um für die eigene Extension eine locallang nutzen zu können, gehen wir folgendermassen vor:

Als erstes legen wir die locallang.xml an. Meist direkt im Extension Verzeichnis zu finden, sprich typo3conf/ext/meineExtension/locallang.xml. Falls wir jedoch mehrere pi’s in unserer Extension haben, können wir in jedem pi eine eigene locallang Anlegen welche dann jeweils genutzt wird.

In unsere so eben erstelle locallang.xml Datei kopieren wir nun folgenden XML-Code:

<?xml version="1.0" encoding="utf-8" standalone="yes" ?>
<T3locallang>
	<meta type="array">
		<type>module</type>
		<description>language Labels</description>
	</meta>
	<data type="array">
		<languageKey index="default" type="array">
			<label index="captchaErrorMessage">Captcha incorrect!</label>
		</languageKey>

		<languageKey index="de" type="array">
			<label index="captchaErrorMessage">Captcha nicht korrekt!</label>
		</languageKey>
	</data>
</T3locallang>

Hier haben wir 2 Sprachen. Die default Sprache (englisch) und “de” für Deutsch. Die Übersetzungen werden als Phrasen gemacht, welche jeweils in labels abgespeichert werden. Die labels erhalten einen namen (index=”") und werden im languageKey Array eingefügt. Oben anhand des Beispiels zu sehen.

In unserer PHP-Class der Extension (falls mehrere muss es in jeder gemacht werden), müssen noch folgende Variabeln angegeben werden, was falls ihr mit dem Extension Kickstarter arbeitet eigentlich erledigt sein sollte. Direkt in der Class gebt ihr folgendes an:

public $scriptRelPath = 'class.ux_tx_tipafriend.php'; // Path to this script relative to the extension dir.
public $extKey = 'x4etipafriendrecap'; // The extension key.

So kann TYPO3 die korrekte localconf holen. Wäre unsere Datei in einem pi Verzeichnis, wäre der $scriptRelPath demnach z.B. pi1/class.ux_tx_tipafriend.php.

Damit die Sprachen nun noch geladen werden, müssen in der Main-Funktion noch folgendes gemacht werden:
Zuerst muss die conf in $this->conf geschrieben werden:

$this->conf = $conf;

Danach (muss danach sein!) muss die locallang selbst noch geladen werden:

$this->pi_loadLL();

Fertig!

Um jetzt auf die Phrasen zuzugreifen, nutzen wir folgende Zeile:

$error = $this->pi_getLL('captchaErrorMessage');

TYPO3: Problem mit Image-Links nach Update auf 4.5

21. Juni 2011 in TYPO3 von Leo

Nach dem Update auf TYPO3 funktionierten die Image-Links nicht mehr, sofern mehrere Bilder in einem Inhaltselement waren, welche je Einzeln verlinkt werden sollten. Angegeben werden die Links undereinander (je eine Zeile) in einem Textfeld, und sollten dann gesplittet werden. Kurze Zeit später bin ich auf folgendes gestossen: [Klick], welches mich auf die richtige Spur brachte.
Jedoch war es in meinem Fall die Extension SlimBox die das Problem verursacht. Also bearbeitete ich kurz das TypoScript-Setup der genannten Extension, und fügte folgende 2 Zeilen ein:

tt_content.image.20.1.imageLinkWrap.enable.ifEmpty.typolink.parameter.listNum.splitChar = 10
tt_content.image.20.1.imageLinkWrap.typolink.parameter.override.listNum.splitChar = 10

Danach funktionierte alles wieder wunderbar.

Womöglich funktioniert es auch lediglich mit einem Update der SlimBox. Auf der Seite welche dieses Problem existierte war noch eine alte Version installiert (2.1.0), zurzeit ist Version 3.1.0 die aktuellste.

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.

Indexed Search installation und konfiguration

5. November 2010 in TYPO3 von Leo

Viele haben anscheinend Probleme mit Indexed Search, der TYPO3 Sucherweiterung. Hier nun ein einfach erklärtes Tutorial für die Installation und Konfiguration von Indexed Search, Schritt für Schritt.
1. Installieren der Extension über den Extension-Manager (da es sich hier um eine System Extension handelt ist sie bereits vorhanden).
2. Kopieren des Templates aus dem Verzeichnis “typo3/sysext/indexed_search/pi/indexed_search.tmpl” nach “fileadmin/templates/ext/indexed_search.tmpl” (Pfad kann aber auch frei gewählt werden, jedoch sollte das Template nicht im typo3/ Verzeichnis sein da es ansonsten bei einem Update überschrieben wird!).
3. Nun auf der obersten Seite ins TypoScript Setup folgenden Code einfügen:

#################################
# Indexed Search aktivieren
#################################
config.index_enable = 1

Dieser Code aktiviert Indexed Search und würde gleich mit dem caching beginnen. Wir benötigen jedoch noch zwei Marker in unserem Template (eigentlich freiwillig, aber empfohlen), welche den zu cachenden Bereich begrenzen, also den Bereich den die Suche dann auch durchsucht und in den Suchergebnissen widerspiegelt.
4. Also fügen wir folgende zwei Marker ein, welche unseren Inhalt umschliessen:

<!--TYPO3SEARCH_begin-->
...
<!--TYPO3SEARCH_end-->

5. Nun sollten die Seiten beim ersten Aufruf für indexed search gecacht werden. Dies kann man im Modul “Info” im Backend überprüfen. Beim Dropdown oben “Indexed Search” auswählen und links im Seitenbaum auf die oberste Seite klicken. Ist nach einem Seitenaufruf über das Frontend nun die Seite gecacht worden sieht man nun eingen kurzen Ausschnitt des gecachten Inhalts.
6. Nun wird im TS Template noch folgender Code im Setup benötigt, welcher noch etwas abgeändert werden muss:

config.language = de
config.locale_all = de_DE
config.sys_language_uid = 0

config.index_externals = 1
# Anzahl der anzuzeigenden Resultate pro Seite
plugin.tx_indexedsearch._DEFAULT_PI_VARS.results = 10
plugin.tx_indexedsearch {
  # ID der obersten Seite
  search.rootPidList = 2
  show.rules = 0
  show.advancedSearchLink = 0
  show.L1sections = 0
  templateFile = fileadmin/templates/ext/indexed_search.tmpl
  _DEFAULT_PI_VARS.lang = 0
  browseBoxWrap = <div class="browsebox">|</div>
  pageWrap = <span>|</span>
}

So weit so gut, Indexed Search wurde nun eingerichtet und läuft hoffentlich!

Pagebrowser (umblättern) funktioniert nicht:

Falls der Pagebrowser (also das Umblättern von Seiten bei Suchergebnissen) nicht funktioniert, rate ich jedem mal die Extension “accessible_is_browse_results” anzusehen, welche das ganze sehr wahrscheinlich wieder funktionstüchtig machen wird. Man kann das ganze jedoch auch ohne zusätzliche Extension gerade biegen, der Fehler wird durch das Umblättern per JavaScript ausgelöst, aber mehr dazu vielleicht mal später.

Eigene Flexform in Extension einbauen

1. Oktober 2010 in TYPO3 von Leo

Eine Flexform kann in einer Extension benutzt werden, um eingaben und weiteres übers Backend an der Extension vorzunehmen.
Um solch eine Flexform in der eigenen Extension hinzuzufügen geht man folgendermassen vor:

1. Man legt in der eigenen Extension eine XML Datei an, am besten flexform.xml oder wie oft üblich flexform_ds.xml.

2. Nun fügt man folgende Zeilen in seine XML Datei ein:

<T3DataStructure>
  <sheets>
    <sDEF>
      <ROOT>
        <TCEforms>
          <sheetTitle>Optionen</sheetTitle>
        </TCEforms>
        <type>array</type>
        <el>
           <eine_option>
              <TCEforms>
              <label>Modus</label>
              <config>
              <items type="array">
                 <numIndex index="0" type="array">
                    <numIndex index="0">Listen Ansicht</numIndex>
                    <numIndex index="1">Detail Ansicht</numIndex>
                 </numIndex>
              </items>
              </config>
            </TCEforms>
           </eine_option>
        </el>
      </ROOT>
    </sDEF>
  </sheets>
</T3DataStructure>

Dies wäre ein Beispiel für eine Einstellung, welche natürlich so alleine nicht funktioniert.

3. Als nächstes müssen wir die Flexform in unserer Extension sozusagen registrieren, bzw. einbinden. Folgender Code kommt in die Datei “ext_tables.php” unserer Extension:

$TCA['tt_content']['types']['list']['subtypes_addlist'][$_EXTKEY.'_pi1'] ='pi_flexform';
t3lib_extMgm::addPiFlexFormValue($_EXTKEY.'_pi1', 'FILE:EXT:'.$_EXTKEY . 'pi1/flexform_ds.xml');

Der Pfad in Zeile 2 muss je nachdem wo eure Flexform liegt und heisst noch angepasst werden.

4. Um nun auf die Einstellungen als Variabeln, welche wir über die Flexform eingegeben haben im Code der Extension zugreifen zu können, benötigen wir folgenden Code am Anfang (Main):

$this->pi_initPIflexForm();

Und um wirklich auf die Variabeln zugreifen zu können folgendes:

$this->code = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'eine_option', 'sDEF');

Übrigens, ab TYPO3 4.2.1 soll folgender Code reichen um auf die Einstellungen zuzugreifen:

$this->code = $this->pi_getFFvalue($this->cObj->data['pi_flexform'], 'eine_option');

Eine Ausführliche Beschreibung zu Flexformen gibt es in der TYPO3 Wiki.

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 {

}

?>

TYPO3: Caretaker vorgestellt + Installation

11. Februar 2010 in Tutorials, TYPO3 von Leo

In letzter Zeit beschäftigte ich mich sehr mit der TYPO3 Extension ‘Caretaker‘, welche, meiner Meinung nach sehr hilfreich ist. Zur Geschichte:
Markus gab mir als Davide hier schnupperte den Auftrag, ich soll Caretaker auf den TYPO3 Installationen unserer Kunden installieren. Also setzte ich mich an die Aufgabe, und installierte Caretaker. Bei einigen Installationen ging dies Problemlos, bei anderen erschienen PHP Fehler, welche wegen dem Hoster verursacht wurden. Die ganze Aufgabe ging mehrere Tage, da alles recht Zeitaufwändig war.

Doch was genau ist Caretaker?
Wie der Name schon sagt, kann man mit dieser Extension seine TYPO3 Installationen pflegen. Die externen (Kunden-) Installationen kommunizieren mit der eigenen TYPO3 Installation, welche sozusagen als Hauptquartier von Caretaker dient. All die TYPO3 Installationen geben nun verschiedene Dinge bekannt, wie z.B. die aktuelle installierte TYPO3 Version, unsichere Extensions und viele weitere hilfreiche Informationen. Das ganze wird dann wie gesagt in der Zentrale (dem Hauptquartier) aufgelistet, in einer grossen Liste, sortiert nach den Installationen.

Was bringt Caretaker?
Dank Caretaker haben wir stets eine Übersicht über die TYPO3-Installationen unserer Kunden, und können so schnell handeln, falls ein TYPO3 Update oder etwas sonstiges benötigt wird. Ausserdem trägt Caretaker auch zur Sicherheit der Webseiten unserer Kunden bei.

Installation von Caretaker

Ich erkläre euch nun wie Caretaker sinngemäss installiert wird. Zuerst müsst ihr euch die Extension herunterladen. Da das Plugin noch in Entwicklung ist, findet man es noch nicht direkt in der Extension Datenbank von typo3.org, sondern muss es in der TYPO3 “Schmiede” herunterladen: Klick.

1. Installiert Caretaker (caretaker) und Caretaker Instance (caretaker_instance) auf eurer eigenen TYPO3 Installation.

2. Unter Caretaker Instance solltet ihr, wenn ihr alles richtig gemacht habt, nun einen Public Key sehen, welcher ihr benötigt um fortzufahren (nach der Installation im Ext. Manager in Caretaker Instance noch unter “UPDATE!”).

3. Installiert Caretaker Instance nun auf einer externen TYPO3-Installation, und lasst euch auch einen Key Generieren. Kopiert den internen Public Key nun in die externe Installation und umgekehrt (nicht Key überschreiben, sondern in das leere Feld einfügen!).

4. Erstellt nun in der internen Installation im Listen-Modul einen neuen Eintrag  und weist ihn in eine Gruppe (Standard-Tests).

5. Geht nun auf den backend Punkt “Caretaker Overview”. Dort klickt ihr auf die gerade eingetragene Seite und klickt auf den “refresh forced” Button.

Nun sollte zumindest der “HTTP-Test” grün erscheinen, da dieser bekannt gibt, ob die beiden Installationen miteinander Kommunizieren können.

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 :-)