| Beide Seiten, vorherige ÜberarbeitungVorherige ÜberarbeitungNächste Überarbeitung | Vorherige Überarbeitung |
| typo3:about:functions:split [2014/03/06 21:34] – [Eigenschaften von split] admin | typo3:about:functions:split [2015/12/03 19:32] (aktuell) – Externe Bearbeitung 127.0.0.1 |
|---|
| Mit ''split'' lassen sich Strings anhand frei wählbarer Trennzeichen in ein Array umwandeln, dessen Werte anschließend mit optionSplit und stdWrap weiterverarbeitet werden können. Typisches Szenario ist eine kommaseparierte Liste. | Mit ''split'' lassen sich Strings anhand frei wählbarer Trennzeichen in ein Array umwandeln, dessen Werte anschließend mit optionSplit und stdWrap weiterverarbeitet werden können. Typisches Szenario ist eine kommaseparierte Liste. |
| |
| Die erhaltenen Werte werden mit ''cObjNum'' einem (oder mehreren) cObj zugewiesen. Mithilfe von ''current'' wird der aktuelle Wert übergeben. TYPO3 speichert die Ergebnisse von split im Register //SPLIT_COUNT//. | Die erhaltenen Werte werden mit ''cObjNum'' einem (oder mehreren) cObj zugewiesen. Mithilfe von ''current'' wird der aktuelle Wert übergeben, der für jedes cObject in //$this->data[$this->currentValKey]// hinterlegt ist. |
| | |
| | TYPO3 speichert die Ergebnisse von split zudem im Register //SPLIT_COUNT//. Weiter unten ist ein Anwendungsbeispiel für dieses Register erklärt. |
| |
| ===== Eigenschaften von split ===== | ===== Eigenschaften von split ===== |
| # Ausgabe: eins | # Ausgabe: eins |
| </code>| | </code>| |
| ^cObjNum|//cObjNum// +optionSplit / stdWrap| | | ^cObjNum|//cObjNum// +optionSplit / stdWrap|Dient als Pointer auf die zu definierenden cObjects (1,2, ...). Mit ''optionSplit'' lassen sich die eingehenden Werte beliebig aufteilen, um sie unterschiedlich verarbeiten zu können. <code typoscript> |
| ^1,2,3,4|CARRAY / stdWrap|Die Objekte, mit denen die Werte verarbeitet werden; müssen unter ''cObjNum'' definiert worden sein. Da sie vom Typ CARRAY sind, müssen sie __nicht__ noch einmal als cObject erzeugt werden (''1 = TEXT''), sondern können direkt mit stdWrap bearbeitet werden. Es ist möglich, Unterobjekte anzuwenden, die dann als cObject erzeugt werden müssen (''1.10 = TEXT''). <code typoscript> | cObjNum = 1||2 |*| 5||3 |*| 4||6 |
| | </code>| |
| | ^1,2,3,4|CARRAY / stdWrap|Die Objekte, mit denen die Werte verarbeitet werden; sie müssen unter ''cObjNum'' referenziert worden sein. Da sie vom Typ CARRAY sind, müssen sie __nicht__ noch einmal als cObject erzeugt werden (''1 = TEXT''), sondern können direkt mit stdWrap bearbeitet werden. Es ist möglich, Unterobjekte anzuwenden, die dann als cObject erzeugt werden müssen (''1.10 = TEXT'').\\ Die aktuellen Werte werden mit ''current = 1'' aus der Variable ins Array geladen. <code typoscript> |
| 10 = TEXT | 10 = TEXT |
| 10.value = eins,zwei,drei,vier | 10.value = eins,zwei,drei,vier |
| # Ausgabe: eins und zwei und drei und vier und | # Ausgabe: eins und zwei und drei und vier und |
| </code>| | </code>| |
| ^wrap|wrap +optionSplit / stdWrap|Umschließt die fertigen cObjects mit einem Wrap. Das Anwenden von ''optionSplit'' ist möglich. <code typoscript> | ^wrap|wrap +optionSplit / stdWrap|Umschließt die fertigen cObjects mit einem Wrap. Das Anwenden von ''optionSplit'' ist möglich, dieser muss natürlich nicht identisch sein mit dem ggf. unter cObjNum definierten ''optionSplit''. <code typoscript> |
| 10 = TEXT | 10 = TEXT |
| 10.value = eins,zwei,drei,vier | 10.value = eins,zwei,drei,vier |
| # Ausgabe: <h1>eins</h1><p>zwei</p><h1>drei</h1><p>vier</p> | # Ausgabe: <h1>eins</h1><p>zwei</p><h1>drei</h1><p>vier</p> |
| </code>| | </code>| |
| ===== Beispiele ===== | ===== Einfaches Beispiel ===== |
| |
| <code typoscript> | <code typoscript> |
| <span style="color:red;">eins,</span><span style="color:orange;">zwei,</span><span style="color:orange;">drei,</span><span style="color:orange;">vier,</span><span style="color:blue;">fünf,</span><span style="color:green">sechs</span> | <span style="color:red;">eins,</span><span style="color:orange;">zwei,</span><span style="color:orange;">drei,</span><span style="color:orange;">vier,</span><span style="color:blue;">fünf,</span><span style="color:green">sechs</span> |
| </html> | </html> |
| | |
| | ---- |
| | |
| | ===== register:SPLIT_COUNT ===== |
| | |
| | Die Ergebnisse von ''split'' werden im Register //SPLIT_COUNT// gespeichert. Mit den [[typo3:about:datentypen&s[]=gettext#gettext|getText]]-Funktionen kann hierauf zugegriffen werden. Im folgenden Beispiel wird mit diesem Register eine Aufzählung realisiert. |
| | |
| | Da immer bei Null angefangen wird zu zählen, müssen im ersten Schritt die Werte von //SPLIT_COUNT// um eins erhöht werden. Dazu wird mit LOAD_REGISTER das Register SPLIT_COUNT überschrieben: Mit stdWrap wird in einem cObject das aktuelle Register geladen, um dem jeweils aktuellen Wert mit einem Wrap die Angabe //+1// hinzuzufügen. Anschließend wird mit ''prioriCalc'' der jeweilige Wert berechnet.\\ |
| | Im zweiten Schritt werden die so berechneten Werte mit einem ''dataWrap'' ausgegeben. |
| | |
| | |
| | <code typoscript> |
| | 10 = TEXT |
| | 10.value = eins,zwei,drei,vier |
| | 10.split { |
| | token = , |
| | cObjNum = 1 |
| | 1.10 = LOAD_REGISTER |
| | 1.10.SPLIT_COUNT { |
| | cObject = TEXT |
| | cObject.data = register:SPLIT_COUNT |
| | cObject.wrap = |+1 |
| | prioriCalc = intval |
| | } |
| | 1.20 = TEXT |
| | 1.20.current = 1 |
| | 1.20.noTrimWrap = | || |
| | 1.20.dataWrap = <p>{register:SPLIT_COUNT} = |</p> |
| | } |
| | </code> |
| | |
| | Ausgabe: |
| | <code html> |
| | <p>1 = eins</p> |
| | <p>2 = zwei</p> |
| | <p>3 = drei</p> |
| | <p>4 = vier</p> |
| | </code> |
| | |
| | ---- |
| | |
| | ===== Inhalte aus der Datenbank mit split verarbeiten ===== |
| | |
| | Im folgenden Beispiel werden die Überschriften aller Inhaltselemente einer Seite nummeriert ausgegeben. Auf der Seite enthalten sind Inhaltselemente mit den Überschriften "Überschrift", "Headline mit Stop als Wert" und "Schlagzeile". |
| | |
| | |
| | * **temp.headlines:** |
| | - Aus der Datenbanktabelle //tt_content// wird ganz normal das Feld //header// ausgelesen. |
| | - Unter ''select'' wird Sortierung und Spalte angegeben. Mit ''pidInList'' kann eine bestimmte Seite angegeben werden. Fehlt die Angabe, bezieht sich die Ausgabe immer auf die aktuelle Seite. |
| | - Unter ''renderObj'' wird mit ''required'' festgelegt, dass eine Überschrift vorhanden sein muss; sonst würden auch Inhaltselemente mitgerechnet, die ein leeres //header//-Feld besitzen. Die Ausgabe wäre dann eine Nummerierung ohne weiteren Inhalt. |
| | - Außerdem wird im renderObj ein wrap hinzugefügt, falls ein Wert vorhanden ist. Hiermit wird der string //STOP// vor jede Überschrift gesetzt, was später als Trennzeichen von ''split'' dienen soll. |
| | - Mit ''stdWrap.substring = 4'' wird das Ergebnis der gesamten Abfrage um 4 Zeichen beschnitten, da sonst //STOP// auch am Beginn des Strings steht. |
| | - Das Gesamtergebnis des cObjects CONTENT wird als String in ''temp.headlines'' geladen. |
| | |
| | __Das Ergebnis bis hierhin:__ Überschrift**STOP**Headline mit Stop als Wert**STOP**Schlagzeile\\ |
| | (zur besseren Lesbarkeit sind die Trennzeichen fett gesetzt) |
| | |
| | * **page.10:** |
| | - Der Inhalt von ''temp.headlines'' wird ins cObject ''10'' geladen. |
| | - ''split'' wird mit dem Trennzeichen //STOP// angewendet. Dies passiert case-sensitive, das Wort //Stop// in der zweiten Überschrift wird also nicht als Trennzeichen behandelt! |
| | - Wie im oberen Beispiel wird der Wert von SPLIT_COUNT um eins erhöht und anschließend mit ''dataWrap'' dem aktuellen Wert hinzugefügt. |
| | - Mit ''1.20.required = 1'' wird sichergestellt, dass ein Wert vorhanden ist. Sind auf einer Seite keine Inhaltselemente mit Überschrift vorhanden, wird so auch die Ausgabe der ersten Nummerierung verhindert. |
| | |
| | <code typoscript> |
| | temp.headlines = TEXT |
| | temp.headlines.cObject = CONTENT |
| | temp.headlines.cObject { |
| | table = tt_content |
| | select { |
| | orderBy = sorting |
| | where = colPos=0 |
| | #pidInList = 28 |
| | } |
| | renderObj = TEXT |
| | renderObj { |
| | field = header |
| | required = 1 |
| | wrap = STOP| |
| | } |
| | stdWrap.substring = 4 |
| | } |
| | |
| | page = PAGE |
| | page.10 < temp.headlines |
| | page.10.split { |
| | token = STOP |
| | cObjNum = 1 |
| | 1.10 = LOAD_REGISTER |
| | 1.10.SPLIT_COUNT { |
| | cObject = TEXT |
| | cObject.data = register:SPLIT_COUNT |
| | cObject.wrap = |+1 |
| | prioriCalc = intval |
| | } |
| | 1.20 = TEXT |
| | 1.20.current = 1 |
| | 1.20.noTrimWrap = | || |
| | 1.20.dataWrap = <p>{register:SPLIT_COUNT} = |</p> |
| | 1.20.required = 1 |
| | } |
| | </code> |
| | |
| | Ausgabe: |
| | <code html> |
| | <p>1 = Überschrift</p> |
| | <p>2 = Headline mit Stop als Wert</p> |
| | <p>3 = Schlagzeile</p> |
| | </code> |