Eigene Funktionen: Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
(Die Seite wurde neu angelegt: „Eigene Funktionen können in SPML nicht innerhalb eines Templates/SPML-Datei definiert werden. Jede Funktion in SPML ist ein eigenes Templates/SPML-Datei. Mit Hi…“)
 
 
(2 dazwischenliegende Versionen desselben Benutzers werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
''Ab Version 2.13''
 +
 
Eigene Funktionen können in SPML nicht innerhalb eines Templates/SPML-Datei definiert werden. Jede Funktion in SPML ist ein eigenes Templates/SPML-Datei.
 
Eigene Funktionen können in SPML nicht innerhalb eines Templates/SPML-Datei definiert werden. Jede Funktion in SPML ist ein eigenes Templates/SPML-Datei.
  
Zeile 47: Zeile 49:
  
 
===Fehlerbehandlung===
 
===Fehlerbehandlung===
Zur Fehlerbehandlung gibt es keine zusätzliche Funktionalität. Hierfür wird ebenfalls sp:return verwendet. Das im Fehler-Fall entsprechende selbst definierte Fehler-Objekte zurück liefert.
+
Zur Fehlerbehandlung gibt es keine zusätzliche Funktionalität. Hierfür wird ebenfalls sp:return verwendet. Das im diesem-Fall entsprechende selbst definierte Result-Objekte zurück liefert.
  
  
 
Aufrufender Include:
 
Aufrufender Include:
 
<source lang="xml">
 
<source lang="xml">
<sp:include template="!{myfunction}" return="_result">
+
<sp:set name="myvalue" value="5"/>
 +
<sp:include template="!{include.target.errorhandling}" return="_result">
 
   <sp:argument name="mode" value="x"/>
 
   <sp:argument name="mode" value="x"/>
 
   <sp:argument name="value" object="myvalue"/>
 
   <sp:argument name="value" object="myvalue"/>
Zeile 64: Zeile 67:
 
   </sp:else>
 
   </sp:else>
 
</sp:condition>
 
</sp:condition>
 
 
</source>
 
</source>
  
Zeile 70: Zeile 72:
 
<source lang="xml">
 
<source lang="xml">
 
<sp:map name="_result" action="new"/>
 
<sp:map name="_result" action="new"/>
<sp:map name="_result" key="success" action="add" value="true"/>
+
<sp:map name="_result" key="success" action="put" value="true"/>
 
<sp:condition>
 
<sp:condition>
 
   <sp:if name="system.arguments.mode" eq="x">
 
   <sp:if name="system.arguments.mode" eq="x">
       <sp:set name="_result.value" expression="${system.arguments.value} + 10"/>
+
       <sp:map name="_result" key="value" action="put" expression="${system.arguments.value} + 10"/>
  </sp:if>
 
  <sp:if name="system.arguments.mode" eq="y">
 
      <sp:set name="_result.value" expression="${system.arguments.value} * 2"/>
 
 
   </sp:if>
 
   </sp:if>
 +
  <sp:elseif name="system.arguments.mode" eq="y">
 +
      <sp:map name="_result" key="value" action="put" expression="${system.arguments.value} * 2"/>
 +
  </sp:elseif>
 
   <sp:else>
 
   <sp:else>
       <sp:map name="_result" key="success" action="add" value="false"/>
+
       <sp:map name="_result" key="success" action="put" value="false"/>
       <sp:map name="_result" key="message" action="add" value="invalid mode '${system.arguments.mode}'"/>
+
       <sp:map name="_result" key="message" action="put" value="invalid mode '${system.arguments.mode}'"/>
 
   </sp:else>
 
   </sp:else>
 
</sp:condition>
 
</sp:condition>
 +
<sp:return object="_result"/>
 
</source>
 
</source>
 
<noinclude>
 
<noinclude>
 
[[Category:Funktionen]]
 
[[Category:Funktionen]]
 
</noinclude>
 
</noinclude>

Aktuelle Version vom 5. Mai 2015, 09:17 Uhr

Ab Version 2.13

Eigene Funktionen können in SPML nicht innerhalb eines Templates/SPML-Datei definiert werden. Jede Funktion in SPML ist ein eigenes Templates/SPML-Datei.

Mit Hilfe von sp:include kann das Funktions-Template aufgerufen werden.

Funktions-Argumente

Dem Funktionsaufruf können Argumente übergeben werden. Dafür wird im Body von sp:include der sp:argument-Tag verwenden

Aufrufender Include:

<sp:include template="!{myfunctions.addition}">
   <sp:argument name="myvar1" value="x"/>
   <sp:argument name="myobj1" object="system.information.myfield"/>
</sp:include>

Die Abfrage der Übergabe-Argumente in dem Funktions-Template erfolgt über system.arguments und enthält eine Map mit den Argumenten.

Funktions-Template:

<sp:print name="system.arguments"/>

Rückgabe-Wert

Um Werte einer Funktion zurück zu geben wird der sp:return-Tag verwendet. Dieser beendet sofort die Ausführung der Funktion und liefert den angegebene Wert an den aufrufenden sp:include-Tag zurück. Der Include-Tag kann ein Attribut return definieren in dem der Name der Variable angegeben wird in dem der Rückgabe-Wert gespeichert werden soll.

Aufrufender Include:

<sp:include template="!{myfunction}" return="c">
   <sp:argument name="mode" value="x"/>
   <sp:argument name="value" object="myvalue"/>
</sp:include>
result: <sp:print name="c"/>

Funktions-Template

<sp:condition>
   <sp:if name="system.arguments.mode" eq="x">
      <sp:return expression="${system.arguments.value} + 10"/>
   </sp:if>
   <sp:else>
      <sp:return expression="${system.arguments.value} * 2"/>
   </sp:else>
</sp:condition>


Fehlerbehandlung

Zur Fehlerbehandlung gibt es keine zusätzliche Funktionalität. Hierfür wird ebenfalls sp:return verwendet. Das im diesem-Fall entsprechende selbst definierte Result-Objekte zurück liefert.


Aufrufender Include:

<sp:set name="myvalue" value="5"/>
<sp:include template="!{include.target.errorhandling}" return="_result">
   <sp:argument name="mode" value="x"/>
   <sp:argument name="value" object="myvalue"/>
</sp:include>
<sp:condition>
   <sp:if name="_result.success">
      result: <sp:print name="_result.value"/>
   </sp:if>
   <sp:else>
      error: <sp:print name="_result.message"/>
   </sp:else>
</sp:condition>

Funktions-Template

<sp:map name="_result" action="new"/>
<sp:map name="_result" key="success" action="put" value="true"/>
<sp:condition>
   <sp:if name="system.arguments.mode" eq="x">
      <sp:map name="_result" key="value" action="put" expression="${system.arguments.value} + 10"/>
   </sp:if>
   <sp:elseif name="system.arguments.mode" eq="y">
      <sp:map name="_result" key="value" action="put" expression="${system.arguments.value} * 2"/>
   </sp:elseif>
   <sp:else>
      <sp:map name="_result" key="success" action="put" value="false"/>
      <sp:map name="_result" key="message" action="put" value="invalid mode '${system.arguments.mode}'"/>
   </sp:else>
</sp:condition>
<sp:return object="_result"/>