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');

HTML Select mit Fluid erstellen

31. Mai 2011 in TYPO3 von Leo

Mithilfe von Fluid kann aus einem Array welches wir mit Extbase erstellt haben, ein einfaches HTML Select erstellt werden. Dies funktioniert so:

<f:form.select name="person" property="person" options="{allPersons}"
optionValueField="firstname" optionLabelField="firstname"/>

Kurz erklärt: Wir erstellen aus dem Array “allPersons” (mit geschweiften Klammern als Array gekennzeichnet) die Optionen für das Select. Das OptionValueField ist der Wert der Option welcher schlussendlich als value=”" im Option Tag stehen wird. Mit optionLabelField wird das Label des Option Tags gegeben, also was bei der Auswahl angezeigt wird.

Mit dem “name” und “property” Tag bestimmen wir schlussendlich noch wie das Select heisst, und in welcher Variable die Auswahl gespeichert wird, also im property = person. Diesen Wert würden wir dann mit getter/setter weiterverarbeiten erhalten.

Phing: Remote Tasks Loggen

25. Februar 2011 in Allgemein von Leo

Was in lokalen Phing Tasks abläuft wird bekanntlich in der Konsole angezeigt. So weiss man auch gleich den Grund falls ein Task scheitert.

Hat man nun aber einen Remote Task, läuft dieser auf dem Server ohne das wir etwas mitbekommen. Scheitert ein Task wüssten wir nicht gleich genau wieso. Um dies nun aber zu Loggen, bietet Phing hier einen Parameter der beim Aufrufen mitgegeben werden kann.
Nehmen wir an wir machen z.B. ein PHP exec():

exec("phing testTask -logfile log.txt");

Nun wird alles was auf dem Server passiert in das Logfile “log.txt” geschrieben. Dies geschieht natürlich auch auf dem Server.

Natürlich funktioniert dies auch mit dem Phing exec Task:

<exec dir="/home/" command="phing testTask -logfile LOG.txt"  />

Nachtrag:
Mittlerweile habe ich endlich herausgefunden wie Remote Logs geloggt werden können, welche jedoch nicht mit exec ausgeführt werden. D.h. Phing wird nur temporär auf dem Remote Server sein und per PHP gestartet.

So funktionierts:

// ...
Phing::startup();
Phing::fire(array('-logfile', 'LOG.txt'));
Phing::shutdown();
// ..

Dies ist nur ein kurzer Auszug aus dem Script welches wir aufrufen um Phing auf dem Remote Server zu starten. Wie man aber sehen kann, wird dem “fire” ein Array mitgegeben, in welchem man alle Anweisungen welche wir vom exec kennen mitgeben kann. Diese Optionen findet ihr hier.

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.

Fatal Error beim Anlegen eines Content Elements in TYPO3 mit TemplaVoila

6. November 2009 in TYPO3 von Leo

Als ich gestern TYPO3 auf meinem lokalen Apache Server auf meinem Computer installiert habe, und mir Zusammen mit TemplaVoila ein einfaches HTML Template zu einem TYPO3 Template bastelte, ist es mir zuerst nicht aufgefallen. Jedoch kam es, als ich ein neues Content Element auf einer Seite anlegen wollte, immer zu einem Error.