Iterator (SP-Code): Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
K (Hob den Schutz von „Iterator (SP-Code)“ auf)
 
(3 dazwischenliegende Versionen von 2 Benutzern werden nicht angezeigt)
Zeile 10: Zeile 10:
  
 
==Beschreibung==
 
==Beschreibung==
Der Iterator-Tag erzeugt Wiederholfelder für Eingabemasken. Alle Eingabefelder innerhalb von <code>sp:iterator</code>, die mit sp- und spt- Tags erzeugt wurden, bilden einen [[List|Listen-Eintrag]]. Die Eingabefelder werden wiederholt und bilden so eine [[List|Liste]]. <code>sp:iterator</code>-Tags können weitere <code>sp:iterator</code>-Tags enthalten, um verschachtelte Listen zu erzeugen. Auf die Liste können mit Hilfe von Http-Request-Parametern Aktionen ausgeführt werden. Welche Aktion ausgeführt werden soll, wird mit <code>[[InformationHandler#SYS_INFE_listAction|SYS_INFE_listAction]]</code> angegeben. Mit <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> wird das Element bestimmt für das die Aktion gilt. Ein gütiger Wert für <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> ist Beispielsweise <code>sp_mainIterator[2]</code>. Für ein in mehreren <code>sp:iterator</code> verschachteltes Element ist ein gültiger Wert beispielsweise <code>sp_mainIterator[3].sp_subIterator[2]</code>.
+
Der Iterator-Tag erzeugt Wiederholfelder für Eingabemasken. Alle Eingabefelder innerhalb von <code>sp:iterator</code>, die mit sp- und spt- Tags erzeugt wurden, bilden einen [[List|Listen-Eintrag]]. Die Eingabefelder werden wiederholt und bilden so eine [[List|Liste]]. <code>sp:iterator</code>-Tags können weitere <code>sp:iterator</code>-Tags enthalten, um verschachtelte Listen zu erzeugen. Auf die Liste können mit Hilfe von Http-Request-Parametern Aktionen ausgeführt werden. Welche Aktion ausgeführt werden soll, wird mit <code>[[InformationHandler#SYS_INFE_listAction|SYS_INFE_listAction]]</code> angegeben. Mit <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> wird das Element bestimmt für das die Aktion gilt. Ein gültiger Wert für <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> ist beispielsweise <code>sp_mainIterator[2]</code>. Für ein in mehreren <code>sp:iterator</code> verschachteltes Element wäre zum Beispiel <code>sp_mainIterator[3].sp_subIterator[2]</code> ein gültiger Wert.
 +
 
 +
Diese Aktionen funktionieren nur mit dem Window-Scope. Dies bedeutet, das eine mit sp:login erzeugte Session nicht das <code>scope</code>-Attribut verwenden darf. Bei Verwendung des LoginHandlers muss immer der Parameter <code>SYS_window=new</code> beim Login mitgesendet werden.
  
 
Folgende Aktionen sind möglich:
 
Folgende Aktionen sind möglich:
  
 
;swapList
 
;swapList
:Vertauscht die Reihfolge der Listen-Elemente. Das erste Element wird zum letzten das zweite Element zum zweitletzten, usw., das letzte Element wird zum ersten. Für diese Aktion wird <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> nicht benötigt.
+
:Vertauscht die Reihenfolge der Listen-Elemente. Das erste Element wird zum letzten das zweite Element zum zweitletzten, ..., das letzte Element wird zum ersten. Für diese Aktion wird <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> nicht benötigt.
  
 
;addItem
 
;addItem
:Fügt ein leeres Element an das Ende der Liste. Für diese Aktion wird <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> nicht benötigt.
+
:Fügt ein leeres Element am Ende der Liste ein. Für diese Aktion wird <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> nicht benötigt.
  
 
;moveItemDown
 
;moveItemDown
:Verschiebt das mit <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> angegebene Elemente um eine Position nach unten. Ist das Element das letzte der Liste, so wird es an die erste Stelle der Liste verschoben.
+
:Verschiebt das mit <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> angegebene Elemente um eine Position nach unten. Ist das Element das letzte der Liste, wird es an die erste Stelle der Liste verschoben.
  
 
;moveItemUp
 
;moveItemUp
:Verschiebt das mit <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> angegebene Element um eine Position nach oben. Ist das Element das erste der Liste, so wird es an die letzt Stelle der Liste verschoben.
+
:Verschiebt das mit <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> angegebene Element um eine Position nach oben. Ist das Element das erste der Liste, wird es an die letzt Stelle der Liste verschoben.
  
 
;removeItem
 
;removeItem
Zeile 30: Zeile 32:
  
 
;insertItem
 
;insertItem
:Fügt ein leeres Element an die mit <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> angegebene Stelle ein. Das uhrsprüngliche Element an dieser Stelle wird um eine Position nach unten verschoben.
+
:Fügt ein leeres Element an die mit <code>[[InformationHandler#SYS_INFE_listID|SYS_INFE_listID]]</code> angegebene Stelle ein. Das ursprüngliche Element an dieser Stelle wird um eine Position nach unten verschoben.
  
<code>sp:iterator</code> wird so oft durchlaufen, wie die Anzahl der Element der Liste, die mit <code>collection</code> angegebene wurde. Existiert die Liste (noch) nicht, so wird <code>sp:iterator</code> nicht durchlaufen. Um eine Liste zu erzeugen, kann mit <code>addItem</code> eine neue Liste mit einem Element erzeugt werden. Eine weitere Möglichkeit einen oder mehrere Iteratordurchläufe zu erzwingen ist die Angabe des <code>min</code>-Attributes, das bestimmt wieviele Listenelement minimal ausgegeben werden sollen, auch wenn noch keine Liste existiert.
+
Die Anzahl der Durchläufe des <code>sp:iterator</code> entspricht der Anzahl der Elemente der Liste, die mit <code>collection</code> angegebene wurden. Existiert die Liste (noch) nicht, so wird <code>sp:iterator</code> nicht durchlaufen. Um eine Liste zu erzeugen, kann mit <code>addItem</code> eine neue Liste mit einem Element erzeugt werden. Eine weitere Möglichkeit einen oder mehrere Iteratordurchläufe zu erzwingen, ist die Angabe des <code>min</code>-Attributes, das bestimmt wieviele Listenelement minimal ausgegeben werden sollen, auch wenn noch keine Liste existiert.
  
 
Da in den meisten Fällen ein Iteratordurchlauf (min = 1) gewünscht ist, wenn noch keine Liste existiert, sind die Listenaktionen für diesen Fall optimiert. Daraus ergeben sich folgende Sonderfälle:
 
Da in den meisten Fällen ein Iteratordurchlauf (min = 1) gewünscht ist, wenn noch keine Liste existiert, sind die Listenaktionen für diesen Fall optimiert. Daraus ergeben sich folgende Sonderfälle:
Zeile 38: Zeile 40:
 
#Die Liste existiert noch nicht, aber durch min = 1 wird der Iterator einmal durchlaufen. Wenn die Felder des Iterators nicht gefüllt werden, wird keine Liste erzeugt und kein leeres Element angelegt. Diese Verhalten gilt nur für die Listen, die mit [[InformationHandler#SYS_INFE_emptyList|SYS_INFE_emptyList]] als leer markiert wurden. Mehrere Listen werden durch Kommata getrennt. Gültige Werte für [[InformationHandler#SYS_INFE_emptyList|SYS_INFE_emptyList]] sind z.B. <code>101020100000020322-1015:sp_mainIterator</code> oder <code>101020100000020322-1015:sp_mainIterator[2].sp_subIterator</code>.
 
#Die Liste existiert noch nicht, aber durch min = 1 wird der Iterator einmal durchlaufen. Wenn die Felder des Iterators nicht gefüllt werden, wird keine Liste erzeugt und kein leeres Element angelegt. Diese Verhalten gilt nur für die Listen, die mit [[InformationHandler#SYS_INFE_emptyList|SYS_INFE_emptyList]] als leer markiert wurden. Mehrere Listen werden durch Kommata getrennt. Gültige Werte für [[InformationHandler#SYS_INFE_emptyList|SYS_INFE_emptyList]] sind z.B. <code>101020100000020322-1015:sp_mainIterator</code> oder <code>101020100000020322-1015:sp_mainIterator[2].sp_subIterator</code>.
 
#addItem und insertItem erzeugen zwei leere Listenelemente, wenn noch keine Liste existiert.
 
#addItem und insertItem erzeugen zwei leere Listenelemente, wenn noch keine Liste existiert.
#Es gibt keine leeren Listen. Wird das letzte Element der Liste gelöscht, wird die gesammte Liste gelöscht.
+
#Es gibt keine leeren Listen. Wird das letzte Element der Liste gelöscht, wird die gesamte Liste gelöscht.
  
 
Die Standarderweiterung von <code>sp:iterator</code> ist <code>[[spt:iterator]]</code>. Dieser Tag erzeugt Rahmen und Button, mit denen die Iterator-Funktionen ausgeführt werden können.
 
Die Standarderweiterung von <code>sp:iterator</code> ist <code>[[spt:iterator]]</code>. Dieser Tag erzeugt Rahmen und Button, mit denen die Iterator-Funktionen ausgeführt werden können.
 +
 +
Beispiel für eine <code>addItem</code> Aktion:
 +
<source lang="text">
 +
 +
  <sp:iterator collection="mylist" min="2">
 +
    <div style="border: 1px;">
 +
    Text:<br>
 +
    <sp:text name="sp_text"/>
 +
  </div>
 +
  </sp:iterator>
 +
  <input type="hidden" name="SYS_INFE_listAction">
 +
  <input type="hidden" name="SYS_INFE_listID">
 +
 +
  <script type="text/javascript">
 +
    function addIteratorItem() {
 +
 +
        formObject = document.forms[0];
 +
        console.log(formObject);
 +
 +
        formObject.SYS_INFE_listAction.value = "addItem";
 +
        formObject.SYS_INFE_listID.value    = "<sp:print name="mylist.id"/>";
 +
 +
        formObject.SYS_INFE_action.value    = "edit";
 +
        formObject.action                    = "?";
 +
        formObject.submit();
 +
     
 +
    }
 +
  </script>
 +
  <br>
 +
  <a onclick="addIteratorItem();" href="javascript:void();">[+]</a>
 +
</source>
  
 
==Attribute==
 
==Attribute==
Zeile 76: Zeile 109:
  
 
;<code>item</code>
 
;<code>item</code>
:Die in <code>collection</code> angegebene Liste wird Element für Element durchlaufen. Mit dem in diesem Attribut angegebenen Namen kann auf das aktuelle Element der Liste zugegriffen werden. Für das aktuelle Element können noch Zusätzliche Informationen die den Schleifendurchlauf betreffen abgefragt werden (siehe [[IteratorItem]]).
+
:Die in <code>collection</code> angegebene Liste wird Element für Element durchlaufen. Mit dem in diesem Attribut angegebenen Namen kann auf das aktuelle Element der Liste zugegriffen werden. Für das aktuelle Element können noch zusätzliche Informationen die den Schleifendurchlauf betreffen abgefragt werden (siehe [[IteratorItem]]).
  
 
;<code>min</code>
 
;<code>min</code>
:Die Anzahl der mindestens zu iterierenden Elemente. Enthält die zu iterierende Liste weniger Elemente als in <code>min</code> angegeben werden so viele leere Elemente hinzugefügt, bis mindestens die in <code>min</code> angegebene Anzahl von Elementen vorhanden ist.
+
:Die Anzahl der mindestens zu iterierenden Elemente. Enthält die zu iterierende Liste weniger Elemente als in <code>min</code> angegeben, werden so viele leere Elemente hinzugefügt, bis mindestens die in <code>min</code> angegebene Anzahl von Elementen vorhanden ist.
  
 
;<code>max</code>
 
;<code>max</code>
Zeile 114: Zeile 147:
 
<noinclude>
 
<noinclude>
 
[[Category:SP-Tags]]
 
[[Category:SP-Tags]]
[[Category:Qualität_der_Sprache_prüfen]]
 
 
[[Category:Qualität_des_Codes_prüfen]]
 
[[Category:Qualität_des_Codes_prüfen]]
 
[[Category:Beispiel_überarbeiten_testen]]
 
[[Category:Beispiel_überarbeiten_testen]]
 
</noinclude>
 
</noinclude>

Aktuelle Version vom 24. Februar 2010, 11:31 Uhr

Name

<sp:iterator> - Erzeugt Wiederholfelder

Syntax

<sp:iterator collection="sp_mainIterator">
  ...
</sp:iterator>

Beschreibung

Der Iterator-Tag erzeugt Wiederholfelder für Eingabemasken. Alle Eingabefelder innerhalb von sp:iterator, die mit sp- und spt- Tags erzeugt wurden, bilden einen Listen-Eintrag. Die Eingabefelder werden wiederholt und bilden so eine Liste. sp:iterator-Tags können weitere sp:iterator-Tags enthalten, um verschachtelte Listen zu erzeugen. Auf die Liste können mit Hilfe von Http-Request-Parametern Aktionen ausgeführt werden. Welche Aktion ausgeführt werden soll, wird mit SYS_INFE_listAction angegeben. Mit SYS_INFE_listID wird das Element bestimmt für das die Aktion gilt. Ein gültiger Wert für SYS_INFE_listID ist beispielsweise sp_mainIterator[2]. Für ein in mehreren sp:iterator verschachteltes Element wäre zum Beispiel sp_mainIterator[3].sp_subIterator[2] ein gültiger Wert.

Diese Aktionen funktionieren nur mit dem Window-Scope. Dies bedeutet, das eine mit sp:login erzeugte Session nicht das scope-Attribut verwenden darf. Bei Verwendung des LoginHandlers muss immer der Parameter SYS_window=new beim Login mitgesendet werden.

Folgende Aktionen sind möglich:

swapList
Vertauscht die Reihenfolge der Listen-Elemente. Das erste Element wird zum letzten das zweite Element zum zweitletzten, ..., das letzte Element wird zum ersten. Für diese Aktion wird SYS_INFE_listID nicht benötigt.
addItem
Fügt ein leeres Element am Ende der Liste ein. Für diese Aktion wird SYS_INFE_listID nicht benötigt.
moveItemDown
Verschiebt das mit SYS_INFE_listID angegebene Elemente um eine Position nach unten. Ist das Element das letzte der Liste, wird es an die erste Stelle der Liste verschoben.
moveItemUp
Verschiebt das mit SYS_INFE_listID angegebene Element um eine Position nach oben. Ist das Element das erste der Liste, wird es an die letzt Stelle der Liste verschoben.
removeItem
Löscht das mit SYS_INFE_listID angegebene Element aus der Liste.
insertItem
Fügt ein leeres Element an die mit SYS_INFE_listID angegebene Stelle ein. Das ursprüngliche Element an dieser Stelle wird um eine Position nach unten verschoben.

Die Anzahl der Durchläufe des sp:iterator entspricht der Anzahl der Elemente der Liste, die mit collection angegebene wurden. Existiert die Liste (noch) nicht, so wird sp:iterator nicht durchlaufen. Um eine Liste zu erzeugen, kann mit addItem eine neue Liste mit einem Element erzeugt werden. Eine weitere Möglichkeit einen oder mehrere Iteratordurchläufe zu erzwingen, ist die Angabe des min-Attributes, das bestimmt wieviele Listenelement minimal ausgegeben werden sollen, auch wenn noch keine Liste existiert.

Da in den meisten Fällen ein Iteratordurchlauf (min = 1) gewünscht ist, wenn noch keine Liste existiert, sind die Listenaktionen für diesen Fall optimiert. Daraus ergeben sich folgende Sonderfälle:

  1. Die Liste existiert noch nicht, aber durch min = 1 wird der Iterator einmal durchlaufen. Wenn die Felder des Iterators nicht gefüllt werden, wird keine Liste erzeugt und kein leeres Element angelegt. Diese Verhalten gilt nur für die Listen, die mit SYS_INFE_emptyList als leer markiert wurden. Mehrere Listen werden durch Kommata getrennt. Gültige Werte für SYS_INFE_emptyList sind z.B. 101020100000020322-1015:sp_mainIterator oder 101020100000020322-1015:sp_mainIterator[2].sp_subIterator.
  2. addItem und insertItem erzeugen zwei leere Listenelemente, wenn noch keine Liste existiert.
  3. Es gibt keine leeren Listen. Wird das letzte Element der Liste gelöscht, wird die gesamte Liste gelöscht.

Die Standarderweiterung von sp:iterator ist spt:iterator. Dieser Tag erzeugt Rahmen und Button, mit denen die Iterator-Funktionen ausgeführt werden können.

Beispiel für eine addItem Aktion:

  <sp:iterator collection="mylist" min="2">
    <div style="border: 1px;">
    Text:<br>
    <sp:text name="sp_text"/>
  </div>
  </sp:iterator>
  <input type="hidden" name="SYS_INFE_listAction">
  <input type="hidden" name="SYS_INFE_listID">

  <script type="text/javascript">
     function addIteratorItem() {

         formObject = document.forms[0];
         console.log(formObject);

         formObject.SYS_INFE_listAction.value = "addItem";
         formObject.SYS_INFE_listID.value     = "<sp:print name="mylist.id"/>";

         formObject.SYS_INFE_action.value     = "edit";
         formObject.action                    = "?";
         formObject.submit();
       
     }
  </script>
  <br>
  <a onclick="addIteratorItem();" href="javascript:void();">[+]</a>

Attribute

Name Type Required Default ab IES Version
collection Attribute Ja None 1
item Variable Nein None 1
min Number Nein 0 1
max Number Nein None 1
collection
Die zu iterierende Liste. Dieses Attribut entspricht dem name-Attribut des spt:iterator-Tags.
item
Die in collection angegebene Liste wird Element für Element durchlaufen. Mit dem in diesem Attribut angegebenen Namen kann auf das aktuelle Element der Liste zugegriffen werden. Für das aktuelle Element können noch zusätzliche Informationen die den Schleifendurchlauf betreffen abgefragt werden (siehe IteratorItem).
min
Die Anzahl der mindestens zu iterierenden Elemente. Enthält die zu iterierende Liste weniger Elemente als in min angegeben, werden so viele leere Elemente hinzugefügt, bis mindestens die in min angegebene Anzahl von Elementen vorhanden ist.
max
Die Anzahl der maximal zu iterierenden Elemente. Enthält die zu iterierende Liste mehr Elemente als in max angegeben, so wird die Anzahl der Elemente auf die Anzahl max gekürzt.

Beispiele

Einfügen von Textfeldern

Template Quelltext

<sp:iterator collection="sp_mainIterator" min="1">
  <p>
  Text<br>
  <sp:text name="sp_title"/><br>
  </p>
</sp:iterator>

Einfügen von Textfeldern mit Item

Template Quelltext

<sp:iterator collection="sp_mainIterator" item="it" min="1">
  <p>
  Text<br>
  <sp:print name="it.sp_title"/><br>
  <sp:text name="sp_title"/><br>
  </p>
</sp:iterator>