Benutzer-Werkzeuge

Webseiten-Werkzeuge


typo3:about:functions:current

current

Mit current kann auf Inhalte zugegriffen werden, die zuvor von einer anderen stdWrap-Funktion dynamisch generiert wurden. Ein typisches Beispiel ist split. Der jeweils aktuelle Wert des Elternelements wird mit current an ein Element oder einen Parameter übergeben.

Beispiel:
Der Wert des cObject 10, eins,zwei, wird mit split zu zwei dynamischen Werten aufgeteilt. Diese werden nacheinander dem cObj 1 innerhalb von split übergeben. Für jeden Wert werden die Funktionen des cObjects einmal angewendet, im Beispiel der Wrap.

page = PAGE
page {
  10 = TEXT
  10 { 
    value = eins,zwei
    split {
      token = ,
      cObjNum = 1
      1.current = 1
      1.wrap = <p>|</p>
    }
  }
}
# Ausgabe: <p>eins</p> <p>zwei</p>

Wer sich in diesem Beispiel mit 10.split.1.debugData = 1 den Inhalt aus $cObj→data als Tabelle ausgeben lässt, erhält zweimal exakt denselben Datensatz aus der Tabelle pages. Zusätzlich gibt es jedoch ein Feld currentValue_kidjls9dksoje, dass die unterschiedlichen Werte des cObjects 10 ausgibt: eins und zwei. Eben auf diese temporär verfügbaren Inhalte kann man mit current zugreifen.

Das Elternelement in diesem Beispiel ist nicht das cObject 10, sondern page! Das ist wichtig, wie in folgendem Beispiel klar wird:

10 = TEXT
10.current = 1
10.wrap = <p>|</p>
20 = TEXT
20 { 
  value = Hund,Katze,Maus
  split {
    token = ,
    cObjNum = 1|*|2|*|3
    1.current = 1
    1.wrap = <h1>|</h1>
  }
}
30 = TEXT
30.current = 1
30.wrap = <p>|</p>
40 = TEXT
40.current = 1
40.wrap = <p>|</p>
# Ausgabe: <p></p> <h1>Hund</h1> <p>Maus</p> <p>Maus</p>

Zwei Dinge fallen auf:

  1. Der current-Wert ist nicht nur innerhalb von split verfügbar, sondern kann auch in allen folgenden cObjects abgerufen werden. Für das cObj 10 gilt dies nicht, da zum Zeitpunkt des Renderns noch kein current-Wert zur Verfügung stand.
  2. Außerhalb von split steht immer der letzte (= der aktuelle, englisch: current) Wert zur Verfügung. Im Beispiel wird nur der erste Wert von split verarbeitet und ausgegeben (durch den Einsatz von optionSplit). Die beiden folgenden cObjects 30 und 40 sind keine Unterobjekte von split und erhalten über current daher jeweils den letzten Wert, der auf der Seite gespeichert ist.

setContentToCurrent

Überschreibt den aktuellen Wert des Elternelements mit dem vorher definierten Wert. Der neue Wert wird bei allen zugehörigen Elementen angewendet.

Im folgenden Beispiel wird der erste Wert eins im cObj 1.10 überschrieben, was sich auch auf 1.20 auswirkt. Das liegt daran, dass beides Unterelemente vom cObj 1 sind. Der Wert im cObj 2 bleibt davon ausgenommen, current lädt hier den Wert, den split diesem cObject zugeordnet hat.

10 = TEXT
10 {
  value = eins,zwei
  split {
    token = ,
    cObjNum = 1||2
 
    1.10 = TEXT
    1.10.value = Text
    1.10.setContentToCurrent = 1
    1.10.wrap = <p>|</p>
 
    1.20 = TEXT
    1.20.current = 1
 
    2.current = 1
    2.wrap = <p>|</p>
  }
}
Ausgabe: <p>Text</p>Text<p>zwei</p>

setCurrent

Ersetzt wie setContentToCurrent den aktuellen Wert des Elternelements, hier wird der Wert aber manuell als String angegeben. stdWrap-Funktionen sind anwendbar.

10 = TEXT
10 {
  value = eins,zwei
  split {
    token = ,
    cObjNum = 1||2
 
    1.10 = TEXT
    1.10.setCurrent = Text
    1.10.current = 1
    1.10.wrap = <p>|</p>
 
    1.20 = TEXT
    1.20.current = 1
 
    2.current = 1
    2.wrap = <p>|</p>
  }
}
# Ausgabe: <p>Text</p>Text<p>zwei</p>

current als Variable nutzen

Wie oben bereits erklärt, kann man mit setContentToCurrent und setCurrent selbst Werte übergeben. Hierzu muss kein Wert vorhanden sein, den man dann überschreibt - der Wert eines jeden cObjects kann auf diese Weise als Variable gespeichert werden.

In den folgenden Beispielen wird jeweils ein Wrap mit dynamischem Inhalt (aktuelle Seiten-ID) als current-Wert gespeichert und anschließend zwei verschiedenen cObjects als outerWrap übergeben.

Während der current-Wert im ersten Beispiel innerhalb von setCurrent erstellt wird, erfolgt im zweiten Fall die Zuweisung mittels setContentToCurrent, nachdem die gewünschten Angaben per COA generiert werden. Das Ergebnis ist in beiden Fällen dasselbe. Dennoch sollte man bei dynamischen Werten z.B. aus Datenbankfeldern setContentToCurrent verwenden, weil dies die Arbeit erleichtert und mehr Möglichkeiten bietet.

10 = TEXT
10 {
  setCurrent = <div class="{field:uid}">|</div>
  setCurrent.insertData = 1
  cObject = COA
  cObject {
    10 = TEXT
    10.field = title
    10.required = 1
    10.outerWrap.current = 1
    20 = TEXT
    20.field = description
    20.required = 1
    20.outerWrap.current = 1
  }
}
20 = COA
20 {
  10 = TEXT
  10.field = uid
  # Leerzeichen bei '<div' nur wegen Fehler im Syntax-Highlighting:
  10.wrap = < div class="|">
  20 = TEXT
  20.value = |</div>
 
  stdWrap.setContentToCurrent = 1
  stdWrap.cObject = COA
  stdWrap.cObject {
    10 = TEXT
    10.field = title
    10.required = 1
    10.outerWrap.current = 1
 
    20 = TEXT
    20.field = description
    20.required = 1
    20.outerWrap.current = 1
  }
}
<div class="65">Ebene 1</div>
<div class="65">Beschreibung</div>
typo3/about/functions/current.txt · Zuletzt geändert: 2017/12/14 20:10 von admin