Live-Seiten: Unterschied zwischen den Versionen

Aus SiteparkWiki
Zur Navigation springen Zur Suche springen
K
 
(31 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
 +
__TOC__
 
==Beschreibung==
 
==Beschreibung==
Als Live-Seiten werden SPML-Seiten bezeichnet, die in einem Publikationsbereich generiert werden und somit, wie auch PHP-Seiten, in einer Website aufgerufen werden. Um SPML-Seiten in einem Publikationsbereich ausführen zu können, muß dieser als IES-Module aktiviert sein.
+
Als Live-Seiten werden SPML-Seiten bezeichnet, die in einem Publikationsbereich generiert werden und somit, wie auch PHP-Seiten, in einer Website aufgerufen werden.
 +
 
 +
Um SPML-Seiten in einem Publikationsbereich ausführen zu können, muss dieser als IES-Modul aktiviert sein.
  
 
==SPML-Seiten mit Fullpage-Template==
 
==SPML-Seiten mit Fullpage-Template==
Die einfachste Art eine SPML-Liveseite zu erzeugen, ist über ein Fullpage Template. Verwenden sie dazu bitte, das im Basis-Paket des IES enthaltene Template Fullpage (spml). Dieses Template stellt für die Eingabe ein Textfeld bereit, in dem der SPML-Code eingetragen werden kann. Für die Ausgabe erzeugt das Template zu dem eingegebenen SPML-Code noch zusätzliche notwendige Setzungen.
+
Die einfachste Art eine SPML-Liveseite zu erzeugen, ist über ein Fullpage Template. Verwenden Sie dazu bitte das im Basis-Paket des IES enthaltene Template Fullpage (spml). Dieses Template stellt für die Eingabe ein Textfeld bereit, in dem der SPML-Code eingetragen werden kann. Für die Ausgabe erzeugt das Template zu dem eingegebenen SPML-Code noch zusätzliche notwendige Setzungen.
  
Legen Sie einen Seiten-Artikel mit diesem Template an und tragen sie ein das Textfeld z.B. folgenden Code ein
+
Legen Sie einen Seiten-Artikel mit diesem Template an und tragen Sie in das Textfeld z.B. folgenden Code ein:
  
 
<source lang="xml">
 
<source lang="xml">
Zeile 11: Zeile 14:
 
</source>
 
</source>
  
Publizieren sie den Artikel und rufen sie die generierte Seite auf. In der Seite ist nun der Name des Artikels enthalten.
+
Publizieren Sie den Artikel und rufen Sie die generierte Seite auf. In der Seite ist nun der Name des Artikels enthalten.
 +
Das Objekt <code>system.page</code> steht nur in generierten SPML-Seiten zur Verfügung.
  
 
Bei der Erzeugung von SPML-Seiten über das Fullpage-Template ergibt sich jedoch ein Nachteil. Der in dem Textfeld eingetragene SPML-Code wird 1 zu 1 in die zu generierende SPML-Seite geschrieben. SPML-Code der zum Generierungszeitpunkt ausgeführt werden soll, kann nicht angegeben werden. Ist dies jedoch notwendig, müssen die SPML-Seite über andere Templates erzeugt werden.
 
Bei der Erzeugung von SPML-Seiten über das Fullpage-Template ergibt sich jedoch ein Nachteil. Der in dem Textfeld eingetragene SPML-Code wird 1 zu 1 in die zu generierende SPML-Seite geschrieben. SPML-Code der zum Generierungszeitpunkt ausgeführt werden soll, kann nicht angegeben werden. Ist dies jedoch notwendig, müssen die SPML-Seite über andere Templates erzeugt werden.
  
==SPML-Seiten mit Benutzerdefinierten Templates==
+
==SPML-Seiten mit benutzerdefinierten Templates==
Je nach Anwendungsfall kann es auch sinvoll sein den SPML-Code zunächst in ein Template zu schreiben, sodaß jeder Artikel der dieses Template verwendet, den SPML-Code enthält. Da SPML aber auch für die Template-Sprache selber verwendet wird ist darauf zu achten, das SPML-Code der nicht zur Generierungszeit der Seite ausgeführt werden soll in <sp:code>-Tags stehen muß. Code innerhalb dieser Tags werden zur Generierungszeit ignoriert und direkt in die Seite geschrieben. Dieser SPML-Code wird dann erst bei Aufruf der Seite ausgeführt.
+
Je nach Anwendungsfall kann es auch sinvoll sein, den SPML-Code zunächst in ein Template zu schreiben, so dass jeder Artikel der dieses Template verwendet, den SPML-Code enthält. Da SPML aber auch für die Template-Sprache selbst verwendet wird, ist darauf zu achten, dass SPML-Code, der nicht zur Generierungszeit der Seite ausgeführt werden soll, in <code><sp:code></code>-Tags stehen muss. Code innerhalb dieser Tags wird zur Generierungszeit ignoriert und direkt in die Seite geschrieben. Dieser SPML-Code wird dann erst bei Aufruf der Seite ausgeführt.
  
So ist es möchglich Teile die zur Generierungszeit fest stehen schon beim erzeugen der Seite zu ermitteln und nur die 'echten' Liveanteile der SPML-Seite beim Aufruf auszuführen.
+
So ist es möglich, Teile die zur Generierungszeit fest stehen, schon beim Erzeugen der Seite zu ermitteln und nur die 'echten' Liveanteile der SPML-Seite beim Aufruf auszuführen.
  
Im Out-Teil des Templates sollte als erstes das Template SPML Standard Output (Anchor: template.spml.standard.output) includet werden, da dieses den notwendigen SPML-Header in die Seite schreibt.
+
Im Out-Teil des Templates muss als erstes der Tag [[spt:spml]] eingebunden werden, da dieser den notwendigen SPML-Header in die Seite schreibt. Hierbei ist es wichtig, dass vor dem [[spt:spml]]-Tag kein Zeichen generiert wird. In den so generierten Seiten kann mit <code>system.page</code> auf das [[Page]]-Objekt zugegriffen werden.
  
 
<source lang="xml">
 
<source lang="xml">
 
<sp:io type="in">
 
<sp:io type="in">
 
   ...
 
   ...
</sp:io><sp:io type="out"><sp:include anchor="template.spml.standard.output"/>
+
</sp:io><sp:io type="out"><spt:spml/>
 
   ...
 
   ...
 
   <sp:code>
 
   <sp:code>
Zeile 35: Zeile 39:
  
 
==IES Nutzer anmelden==
 
==IES Nutzer anmelden==
Um Daten des IES lesen und schreiben zu können ist ein angemeldeter Nutzer nötig. Mit dessen Rechten wird entschieden ob bestimmte Daten gelesen oder geschrieben werden dürfen.
+
Um Daten des IES lesen und schreiben zu können ist ein angemeldeter Nutzer nötig. Mit dessen Rechten wird entschieden, ob bestimmte Daten gelesen, oder geschrieben werden dürfen.
  
Es gibt mehrere Möglichkeiten einen Nutzer anzumelden
+
Es gibt mehrere Möglichkeiten einen Nutzer anzumelden:
  
*Über ein Login-Formular, das an den LoginHandler (siehe LoginHandler) gesendet wird.
+
*Über ein Login-Formular, das an den LoginHandler (siehe [[LoginHandler|LoginHandler]]) gesendet wird.
*Mit Hilfe von sp:login. Siehe sp:login
+
*Mit Hilfe von <code>sp:login</code>
*Implizit über die Module-Konfiguration
+
*Implizit über die Modul-Konfiguration
*Über Basic-Authentikation
+
*Über Basic-Authentication
  
 
===Login über ein Formular===
 
===Login über ein Formular===
Mit Hilfe des LoginHandlers  können Nutzer mit Hilfe von Formular-Feldern angemeldet werden. Dazu wird ein Formular wie folgendes Verwendet.
+
Über den <code>[[LoginHandler]]</code> können Nutzer mit Hilfe von Formular-Feldern angemeldet werden. Dazu wird ein solches Formular verwendet.
  
 
<source lang="xml">
 
<source lang="xml">
Zeile 63: Zeile 67:
 
</source>
 
</source>
  
Mit sp:form wird das Formular erzeugt. Mit uri wird angegeben welche Seite nach dem ausgeführten Login aufgerufen werden soll. Mit handler wird der LoginHandler angegeben, um das Login durchzuführen. Die für den LoginHandler erforderlichen Felder SYS_LGIN_login, SYS_LGIN_password  und SYS_LGIN_client müssen mit angegeben werden. Für SYS_LGIN_client kann entweder die Client ID oder der Anchor des Clients verwendet werden.
+
Mit <code>sp:form</code> wird das Formular erzeugt. Mit <code>uri</code> wird angegeben, welche Seite nach dem ausgeführten Login aufgerufen werden soll. Mit <code>handler</code> wird der LoginHandler angegeben, um das Login durchzuführen. Die für den LoginHandler erforderlichen Felder <code>SYS_LGIN_login</code>, <code>SYS_LGIN_password</code> und <code>SYS_LGIN_client</code> müssen mit angegeben werden. Für <code>SYS_LGIN_client</code> kann entweder die Client ID oder der Anchor des Clients verwendet werden.
  
Um zu verhindern das Seiten aufgerufen werden können, ohne das ein Nutzer angemeldet ist, können bestimmte Seiten geschützt werden. Weiter solle im Fehlerfall (ungültiger Login, Aufruf einer geschützen Seiten von einem nicht angemelteten Nutzer) eine definierte Seite aufgerufen werden. Dazu ist in der Konfigurationsdatei DOCUMENT_ROOT/WEB-INF/ies-module.xml des entsprechenden Publikationsbereich folgendes einzutragen:
+
Um zu verhindern, dass Seiten aufgerufen werden können, ohne dass ein Nutzer angemeldet ist, können bestimmte Seiten geschützt werden. Weiterhin sollten im Fehlerfall (ungültiger Login, Aufruf einer geschützten Seite von einem nicht angemeldeten Nutzer) eine definierte Seite aufgerufen werden. Dazu ist in der Konfigurationsdatei <code>DOCUMENT_ROOT/WEB-INF/ies-module.xml</code> des entsprechenden Publikationsbereich folgendes einzutragen:
  
 
<source lang="xml">
 
<source lang="xml">
Zeile 83: Zeile 87:
  
 
;<security-constrains>
 
;<security-constrains>
:Hier wird definiert welche Seiten ohne Login aufgerufen werden dürfen.
+
Hier wird definiert welche Seiten ohne Login aufgerufen werden dürfen:
  
<allowed pattern="/login.spml" /> aufruf von login.spml ist immer erlaubt.
+
<code><allowed pattern="/login.spml" /></code>
  
<denied pattern="/.*" /> alle anderen Seiten dürfen nicht aufgerufen werden
+
Der Aufruf von <code>login.spml</code> ist immer erlaubt.
 +
 
 +
<code><denied pattern="/.*" /></code>
 +
 
 +
Alle anderen Seiten dürfen nicht aufgerufen werden.
 +
 
 +
Hierbei ist noch zu beachten, dass nur die Seiten geschützt werden, die vom IES ausgeführt/ausgeliefert werden (HTML-Seiten, PHP-Seiten, Bilder, CSS, ... gehören in der Regel nicht dazu). Je nach Konfiguration der Weiterleitungen <code>(mod_jk, proxy_ajp)</code> sind das möglicherweise nur <code>*.spml</code> und <code>*.jsp</code> Dateien.
  
Hierbei ist noch zu beachten, das nur die Seiten geschützt werden, die vom IES ausgeführt/ausgeliefert werden (HTML-Seiten, PHP-Seiten, Bilder, CSS, ... gehören in der Regeln nicht dazu). Je nach gesetzten JkMount's (mod_jk) sind das möglicherweise nur *.spml und *.jsp Dateien.
 
 
;<exception>
 
;<exception>
:Werden Seiten von nicht angemeldeten Nutzern aufgerufen, wird von der Seite eine AccessDeniedException geworfen. Um allgemein diese Fehler abzufangen, wird angegeben für welche URL's welche Exception abgefangen und welche Seite danach aufgerufen werden soll. Hier werden für alle Seiten alle Exception abgefangen und anschließend die /login.spml aufgerufen.
+
Werden Seiten von nicht angemeldeten Nutzern aufgerufen, wird von der Seite eine <code>AccessDeniedException</code> aufgerufen. Um diese Fehler allgemein zu verarbeiten, wird angegeben, für welche URLs welche Exception möglich sind und welche Seite danach aufgerufen werden soll. Hier werden für alle Seiten, alle Exception abgefangen und anschließend <code>/login.spml</code> aufgerufen.
  
Nach dem sie die Datei ies-module.xml geändert haben muß das Modul des Publikationsbereiches neu geladen werden, damit die Änderungen wirksam werden (Siehe Administration des IES).
+
Nach einer Änderung der Datei <code>ies-module.xml</code> muss das entsprechende Publisher-Modul neu geladen werden. Damit werden die Änderungen dann wirksam (Siehe Administration des IES).
  
 
==Daten über Liveseiten erzeugen, ändern und löschen==
 
==Daten über Liveseiten erzeugen, ändern und löschen==
Wie auch IES-Module können auch Liveseiten Daten im IES erzeugen, ändern und löschen. Dazu werden Handler angesprochen, die über HTTP GET- bzw. POST-Parameter gesteuert werden.
+
Wie IES-Module können auch Liveseiten Daten im IES erzeugen, ändern und löschen. Dazu werden Handler angesprochen, die über <code>HTTP GET</code>- bzw. <code>POST</code>-Parameter gesteuert werden.
  
 
===Artikel anlegen und ändern===
 
===Artikel anlegen und ändern===
Um einen Artikel über eine Liveseite anzulegen, muß der InformationHandler verwendet werden. Dieser wird über seinen vollen Klassennamen com.sitepark.ies.control.jsp.handler.InformationHandler  angesprochen. Siehe InformationHandler.
+
Um einen Artikel über eine Liveseite anzulegen, muss der <code>InformationHandler</code> verwendet werden. Dieser wird über seinen vollen Klassennamen <code>com.sitepark.ies.control.jsp.handler.InformationHandler</code> angesprochen. Siehe [[InformationHandler]].
  
Die Artikeldaten können z.B. in Formularen eingegeben und über Submit an den IES gesendet werden. Der Handler führt die Aktionen aus, Die SPML-Seite stellt anschließend die Ergebnisse dar.
+
Die Artikeldaten können z.B. in einem Formular eingegeben und anschließend an den IES gesendet werden. Der Handler führt dann die notwendigen Aktionen aus. Die SPML-Seite stellt anschließend die Ergebnisse dar.
  
Die Minimalanvorderungen, um einen Artikel anzulegen oder zu ändern sind:
+
Die Minimalanforderungen, um einen Artikel anlegen oder ändern zu können, sind:
  
*Es muß ein Nutzer angemeldet sein, der die nötigen Rechte hat einen Artikel in einem Pool anzulegen
+
*Es muss ein Nutzer angemeldet sein, der die nötigen Rechte hat, einen Artikel in einem Pool anzulegen
*Um einen neu angelegten Artikel direkt darzustellen muß die Variable SYS_element mit dem Wert von SYS_INFE_id gesetzt werden. In SYS_INFE_id wird die ID des neu angelegten Artikels gesetzt. SYS_element definiert das Aktuelle Element
+
*Um einen neu angelegten Artikel direkt darzustellen, muss die Variable <code>SYS_element</code> mit dem Wert von <code>SYS_INFE_id</code> gesetzt werden. In <code>SYS_INFE_id</code> wird die ID des neu angelegten Artikels gesetzt. <code>SYS_element</code> definiert das aktuelle Element
 
<source lang="xml">
 
<source lang="xml">
      <sp:set name="SYS_element" object="SYS_INFE_id"/>
+
<sp:set name="SYS_element" object="SYS_INFE_id"/>
 
</source>
 
</source>
Nur wenn diese Variable gesetzt ist, kann auf den aktuellen Artikel mit system.information zugegriffen werden.
+
Nur wenn diese Variable gesetzt ist, kann auf den aktuellen Artikel mit <code>system.information</code> zugegriffen werden.
*Um einen Artikel zu ändern, muß das Feld SYS_INFE_id mit der zu ändernden Artikel-ID und SYS_INFE_action mit dem Wert update mitgesendet werden.
+
*Um einen Artikel zu ändern, muss das Feld <code>SYS_INFE_id</code> mit der zu ändernden Artikel-ID und <code>SYS_INFE_action</code> mit dem Wert <code>update</code> mitgesendet werden.
*Um einen Artikel zu erzeugen müssen die Felder SYS_INFE_articleType für die Typ des Artikels (Artikel, Medium, Resource), SYS_INFE_action mit dem Wert create und SYS_INFE_target mit der ID des Pools, in dem der Artikel angelegt werden soll mitgegeben werden
+
*Um einen Artikel zu erzeugen, müssen die Felder <code>SYS_INFE_articleType</code> für den Typ des Artikels (Artikel, Medium, Resource), <code>SYS_INFE_action</code> mit dem Wert <code>create</code> und <code>SYS_INFE_target</code> mit der <code>ID</code> des Pools, in dem der Artikel angelegt werden soll, mitgegeben werden.
*Für den Artike muß mit dem Feld SYS_INFE_name ein Name angegeben werden.
+
*Für den Artikel muss mit dem Feld <code>SYS_INFE_name</code> ein Name angegeben werden.
  
Damit wird ein Artikel angelegt oder geändert, kann aber noch nicht mit Infosite weiter bearbeitet werden. Dazu fehlen noch einige Steuerfelder, die Infosite benötigt werden um in dessen Umgebung lauffähig zu sein. Bei den noch nötigen Feldern handelt es sich um Content-Felder, die mit Hilfe von sp:hidden erzeugt werden können.
+
Damit wird ein Artikel angelegt oder geändert, kann aber noch nicht mit InfoSite weiter bearbeitet werden. Dazu fehlen noch einige Steuerfelder, die von InfoSite benötigt werden, um in dessen Umgebung lauffähig zu sein. Bei den noch nötigen Feldern handelt es sich um Content-Felder, die mit Hilfe von <code>sp:hidden</code> erzeugt werden können.
  
Die Felder entsprechen den Angaben für den Artikelpool (in der Artikelpoolverwaltung von Infosite5), in dem der Artikel angelegt werden soll.
+
Die Felder entsprechen den Angaben für den Artikelpool in der Artikelpoolverwaltung von InfoSite5, in dem der Artikel angelegt werden soll.
  
 
Da sich die Werte auf den Pool, in dem der Artikel abgelegt werden soll beziehen, kann dies z.B. so erfolgen:
 
Da sich die Werte auf den Pool, in dem der Artikel abgelegt werden soll beziehen, kann dies z.B. so erfolgen:
Zeile 131: Zeile 140:
 
</source>
 
</source>
  
In diesem Beispiel wird der gleiche Pool verwendet, in dem auch die SPML-Seite selber liegt. Im Normalfall werden die angelegten Artikel wohl in anderen Pools liegen. Das Feld editor_template wird in diesem Beispiel auf das erste Template (alphabetisch sortiert) in dem Template-Pool gesetzt. Hier kann auch z.B. über Anchor ein bestimmtes Template angegeben werden. Es ist nur darauf zu achten, das das Template auch in dem über editor_template_pool angegebenen Template-Pool enthalten ist.
+
In diesem Beispiel wird der gleiche Pool verwendet, in dem auch die SPML-Seite selber liegt. Im Normalfall werden die angelegten Artikel vermutlich in anderen Pools liegen. Das Feld <code>editor_template</code> wird in diesem Beispiel auf das erste Template (alphabetisch sortiert) in dem Template-Pool gesetzt. Hier kann auch z.B. über <code>Anchor</code> ein bestimmtes Template angegeben werden. Es ist nur darauf zu achten, dass das Template auch in dem über <code>editor_template_pool</code> angegebenen Template-Pool enthalten ist.
  
 
In dem Artikelpool-Bereich können folgende Angaben für den Pool gemacht werden.
 
In dem Artikelpool-Bereich können folgende Angaben für den Pool gemacht werden.
  
 
;Template Container
 
;Template Container
:Dieses Feld entspricht dem Hidden-Feld template. Folgende Anchor für Infosite-Container können verwendet werden:
+
:Dieses Feld entspricht dem <code>hidden</code>-Feld <code>template</code>. Folgende Anchor für InfoSite-Container können verwendet werden:
*gui.container.infosite.standard (Standard Infosite Container)
+
*<code>gui.container.infosite.standard</code> (Standard InfoSite Container)
*gui.container.infosite.media (Standard Medien Container)
+
*<code>gui.container.infosite.media</code> (Standard Medien Container)
 
;Template für die Eigenschaften
 
;Template für die Eigenschaften
:Dieses Feld entspricht dem Hidden-Feld registration_template. Folgende Infosite-Templates können verwendet werden:
+
:Dieses Feld entspricht dem <code>hidden</code>-Feld <code>registration_template</code>. Folgende InfoSite-Templates können verwendet werden:
*gui.container.infosite.standard.all (alle Artikel-Typen)
+
*<code>gui.container.infosite.standard.all</code> (alle Artikel-Typen)
*gui.container.infosite.standard.page (nur Seiten anlegen)
+
*<code>gui.container.infosite.standard.page</code> (nur Seiten anlegen)
*gui.container.infosite.standard.media (nur Medien anlegen)
+
*<code>gui.container.infosite.standard.media</code> (nur Medien anlegen)
*gui.container.infosite.standard.resource (nur Resourcen anlegen)
+
*<code>gui.container.infosite.standard.resource</code> (nur Resourcen anlegen)
*gui.container.infosite.standard.pageAutoName (nur Seiten ohne Namensvergabe anlegen)
+
*<code>gui.container.infosite.standard.pageAutoName</code> (nur Seiten ohne Namensvergabe anlegen)
*gui.container.infosite.standard.pageAndMedia (nur Seiten und Medien anlegen)
+
*<code>gui.container.infosite.standard.pageAndMedia</code> (nur Seiten und Medien anlegen)
*gui.container.infosite.standard.pageAndResource (nur Seiten und Resourcen anlegen)
+
*<code>gui.container.infosite.standard.pageAndResource</code> (nur Seiten und Resourcen anlegen)
 
;Templatepool für die Bearbeitung
 
;Templatepool für die Bearbeitung
:Dieses Feld entspicht dem Hidden-Feld editor_template_pool. Hier muß eine ID eines Templates-Pools angegeben werden sie die zu verwendenden Templates befinden
+
:Dieses Feld entspicht dem <code>hidden</code>-Feld <code>editor_template_pool</code>. Hier muss eine ID eines Templates-Pools angegeben werden, in dem sich die zu verwendenden Templates befinden
  
Hier ein kleines Beispiel für das anlegen und bearbeiten eines Artikels:
+
Hier ein kleines Beispiel für das Anlegen und Bearbeiten eines Artikels:
  
 
<source lang="xml">
 
<source lang="xml">
Zeile 195: Zeile 204:
 
===Artikel publizieren und depublizieren===
 
===Artikel publizieren und depublizieren===
 
Um Artikel zu publizieren bzw. zu depublizieren müssen folgende Felder pro Publikationsbereich mitgesendet werden:
 
Um Artikel zu publizieren bzw. zu depublizieren müssen folgende Felder pro Publikationsbereich mitgesendet werden:
;SYS_INFE_publicationArea
+
;<code>SYS_INFE_publicationArea</code>
:Id des Publikationsbereiches in dem der Artikel publiziert bzw. depubliziert werden soll. Z.B. pub1
+
:<code>ID</code> des Publikationsbereiches in dem der Artikel publiziert bzw. depubliziert werden soll. z.B. <code>pub1</code>
;SYS_INFE_publicationChecked
+
;<code>SYS_INFE_publicationChecked</code>
:Wird diese Feld mitgesendet und hat es als Wert die Id des Publikationsbereiches, so wird der Artikel in diesem Publikationsbereich publiziert. Wird nur das Feld SYS_INFE_publicationArea (ohne SYS_INFE_publicationChecked) mitgesendet, wird der Artikel aus dem Publikationsbereich depubliziert.
+
:Wird diese Feld mitgesendet und hat es als Wert die ID des Publikationsbereiches, so wird der Artikel in diesem Publikationsbereich publiziert. Wird nur das Feld <code>SYS_INFE_publicationArea</code> (ohne <code>SYS_INFE_publicationChecked</code>) mitgesendet, wird der Artikel aus dem Publikationsbereich depubliziert.
;SYS_INFE_publicationTemplate
+
;<code>SYS_INFE_publicationTemplate</code>
:Hiermit wird das Template angegeben mit der der Artikel publiziert werden soll. Theoretisch ist es möglich für die Ein- und Ausgabe unterschiedliche Templates anzugeben. Da aber Infosite5 dies nicht unterstüzt ist davon abzuraten. Bitte geben sie hier für alle Publikationsbereich das Template an, da sie auch für das Feld editor_template verwendet haben.
+
:Hiermit wird das Template angegeben mit dem der Artikel publiziert werden soll. Theoretisch ist es möglich für die Ein- und Ausgabe unterschiedliche Templates anzugeben. Da aber InfoSite5 dies nicht unterstützt, ist davon abzuraten. Bitte geben Sie hier für alle Publikationsbereich das Template an, dass Sie auch für das Feld <code>editor_template</code> verwendet haben.
  
Die Felder können z.B. über Hidden-Felder mitgesendet werden. preview und www sind die Anchor der Publikationsbereiche.
+
Die Felder können z.B. über <code>hidden</code>-Felder mitgesendet werden. <code>preview</code> und <code>www</code> sind die Anchor der Publikationsbereiche.
 
<source lang="xml">
 
<source lang="xml">
 
   <input type="hidden" name="SYS_INFE_publicationArea" value="<sp:print name="${!{preview}}"/>">
 
   <input type="hidden" name="SYS_INFE_publicationArea" value="<sp:print name="${!{preview}}"/>">
Zeile 213: Zeile 222:
 
</source>
 
</source>
  
 +
==PHP Integration==
 +
Es kann sinnvoll sein, SPML-Liveseiten nicht direkt aufzurufen, sondern in PHP-Seiten einzubetten. Dazu müssen die PHP-Seiten einen eigenen Request an die SPML-Seite senden. Dabei benötigt die SPML-Seite möglicherweise auch der Request-Parameter, die an die PHP-Seite gesendet wurden. Um die SPML-Seite möglichst einfach einzubinden, steht die PHP-Class <code>RequestDispatcher.class.php</code> aus der <code>phplib</code> von Sitepark zur Verfügung.
  
==PHP integration==
+
Für diese Art der Integration sind noch ein paar PHP-Besonderheiten zu beachten.
Es kann Sinnvoll sein SPML-Liveseiten nicht direkt aufzurufen, sondern in PHP-Seiten einzubetten. Dazu müssen die PHP-Seiten einen eigenen Request an die SPML-Seite senden. Dabei benötigt die SPML-Seite mögicherweise auch die Request-Parameter, die an die PHP-Seite gesendet wurden. Um die SPML-Seite möglichst einfach einzubinden steht die PHP-Class RequestDispatcher.class.php aus der phplib von Sitepark zur Verfügung.
+
===Gleichnamige Request-Parameter bzw. Formularfelder===
 
+
Werden an eine PHP-Seite zwei gleichnamige Request-Parameter bzw. Formularfelder gesendet, wird von PHP immer nur der letzte Parameter verwendet. Wird also z.B. die URL  
Für diese Art der integration sind noch ein paar PHP-Besonderheiten zu beachten.
 
;Gleichnamige Request-Parameter bzw. Formularfelder
 
:Werden an eine PHP-Seite zwei gleichnamige Request-Parameter bzw. Formularfelder gesendet, wird von PHP immer nur der letzte Parameter verwendet. Wird also z.B. die URL  
 
 
<source lang="xml">
 
<source lang="xml">
 
http://www.domain.de/test.php?test=1&test=2
 
http://www.domain.de/test.php?test=1&test=2
 
</source>
 
</source>
aufgerufen, erhält man mit $_GET["test"] den Wert 2. Das gleiche gilt für POST Formularfelder. Möchte man beide Parameter erhalten muß noch ein [] am Parameternamen bzw. Formularfeldnamen angehängt werden. Das obige Beispiel würde dann so aussehen:
+
aufgerufen, erhält man mit $_GET["test"] den Wert 2. Das gleiche gilt für POST Formularfelder. Möchte man beide Parameter erhalten, muss noch ein [] am Parameternamen bzw. Formularfeldnamen angehängt werden. Das obige Beispiel würde dann so aussehen:
 
<source lang="xml">
 
<source lang="xml">
 
http://www.domain.de/test.php?test[]=1&test[]=2
 
http://www.domain.de/test.php?test[]=1&test[]=2
Zeile 231: Zeile 239:
 
Siehe hierzu auch http://www.php.net/manual/de/faq.html.php#faq.html.arrays
 
Siehe hierzu auch http://www.php.net/manual/de/faq.html.php#faq.html.arrays
  
;Modifikation vom Request-Parametern und Formularfeldern durch PHP
+
===Modifikationen von Request-Parametern und Formularfeldern durch PHP===
:Enthalten Namen von Request-Parametern oder Formularfeldern bestimmte Zeichen wird der Name von PHP modifiziert. Aufgrund der oben Array-Regel werden z.B. alle Zeichen nach einem [] abgeschnitten. Wird z.B. ein Request-Parameter mit dem Namen
+
Enthalten Namen von Request-Parametern oder Formularfeldern bestimmte Zeichen, wird der Name von PHP modifiziert. Aufgrund der oben genannten Array-Regel werden z.B. alle Zeichen nach einem <code>[]</code> abgeschnitten. Wird z.B. ein Request-Parameter mit dem Namen
 
<source lang="xml">
 
<source lang="xml">
 
sp_mainIterator[0].sp_text
 
sp_mainIterator[0].sp_text
Zeile 240: Zeile 248:
 
sp_mainIterator
 
sp_mainIterator
 
</source>
 
</source>
zugreifbar. Dessweiteren werden alle Punkte, die in einem Request-Parameternamen oder einen Formularfeldnamen enthalten sind durch Unterstriche ersetzt. Wird z.B. ein Request-Parameter mit dem Namen
+
zugreifbar. Desweiteren werden alle Punkte, die in einem Request-Parameternamen oder einem Formularfeldnamen enthalten sind, durch Unterstriche ersetzt. Wird z.B. ein Request-Parameter mit dem Namen
 
<source lang="xml">
 
<source lang="xml">
 
sp_text.de_DE
 
sp_text.de_DE
Zeile 252: Zeile 260:
 
Siehe hierzu auch http://www.php.net/manual/de/faq.html.php#faq.html.form-image
 
Siehe hierzu auch http://www.php.net/manual/de/faq.html.php#faq.html.form-image
  
Der IES verwendet Punkte und Eckige Klammern in mit sp:text, sp:textarea, sp:checkbox, sp:select, sp:hidden, sp:upload, sp:password und sp:radio erzeugten Formularfeldern. Würden diese so an eine PHP-Seite gesendet werden gingen nötige Informationen verloren. Um dies zu umgehen, können mit dem Attribute nameencoding des Tags sp:form die Formularfeldnamen encodet werden. Aus einem mit sp:form definiertem Formular
+
Der IES verwendet Punkte und eckige Klammern in mit <code>sp:text</code>, <code>sp:textarea</code>, <code>sp:checkbox</code>, <code>sp:select</code>, <code>sp:hidden</code>, <code>sp:upload</code>, <code>sp:password</code> und <code>sp:radio</code> erzeugten Formularfeldern. Würden diese so an eine PHP-Seite gesendet werden, gingen nötige Informationen verloren. Um dies zu umgehen, können mit dem Attribut <code>nameencoding</code> des Tags <code>sp:form</code> die Formularfeldnamen encodet werden. Aus einem mit <code>sp:form</code> definiertem Formular
 
<source lang="xml">
 
<source lang="xml">
 
<sp:form uri="test.php">
 
<sp:form uri="test.php">
Zeile 268: Zeile 276:
 
</source>
 
</source>
  
Mit der Angabe eines nameencoding werden die Formularfeldnamen encodet. Aus einem mit sp:form definiertem Formular
+
Mit der Angabe eines <code>nameencoding</code> werden die Formularfeldnamen encodet. Aus einem mit <code>sp:form</code> definiertem Formular
 
<source lang="xml">
 
<source lang="xml">
 
<sp:form uri="test.php" nameencoding="hex">
 
<sp:form uri="test.php" nameencoding="hex">
Zeile 285: Zeile 293:
 
</source>
 
</source>
  
Dadurch wird verhindert, das PHP die Formularfeldnamen modifiziert.Der weiter unten beschriebene RequestDispatcher.class.php bietet Methoden mit dem über den originalen Formularfeldnamen auf die Parameter zugegriffen werden kann.
+
Dadurch wird verhindert, dass PHP die Formularfeldnamen modifiziert. Der weiter unten beschriebene <code>RequestDispatcher.class.php</code> bietet Methoden, mit denen über den originalen Formularfeldnamen auf die Parameter zugegriffen werden kann.
 +
 
 +
===Zu lange Request-Parametern-Namen im Suhosin Patch===
 +
Wird PHP mit dem 'Suhosin Patch' betrieben, ist die Länge des Parameter-Namens beschränkt. Aufgrund des oben beschriebenen encodings der Parameternamen kann es jedoch zu sehr langen Parameternamen kommen.
 +
 
 +
Die aktuelle versendeten Beschränkungen können über
 +
phpinfo();
 +
ermittelt werden. Alle Filter-Optionen mit ihren Default-Werten können unter
 +
http://www.hardened-php.net/suhosin/configuration.html#filtering_options entnommen werden
 +
 
 +
Um dieses Problem zu lösen kann zunächst das Encoding mit dem sp:form die Parameter <code>nameencoding</code>, geändert werden. Verwenden sie das Encoding <code>escff</code>.
 +
<sp:form ... nameencoding="escff">
 +
Sollten die Parameternamen dennoch zu lang sein, muss die Filter-Optionen des Suhosin Patch erhöht werden.
  
 
===RequestDispatcher.class.php===
 
===RequestDispatcher.class.php===
Die PHP-Klasse RequestDispatcher ist Teil der Sitepark phplib. Sie soll die Integrations von Live-SPML-Seiten in PHP-Seiten vereinfachen, kann aber auch ganz allgemein zur Weiterleitung von HTTP-Requests verwendet werden.
+
Die PHP-Klasse <code>RequestDispatcher</code> ist Teil der Sitepark <code>phplib</code>. Sie soll die Integrations von Live-SPML-Seiten in PHP-Seiten vereinfachen, kann aber auch ganz allgemein zur Weiterleitung von HTTP-Requests verwendet werden.
  
Bevor die Klasse verwendet werden kann, muß sie in die PHP-Seite geladen werden. Dies sollte wie folgt erfolgen:
+
Bevor die Klasse verwendet werden kann, muss sie in die PHP-Seite geladen werden. Dies sollte wie folgt erfolgen:
  
require_once($_SERVER["DOCUMENT_ROOT"] . "/phplib/RequestDispatcher.class.php");
+
<source lang="xml">require_once($_SERVER["DOCUMENT_ROOT"] . "/phplib/RequestDispatcher.class.php");</source>
  
Um den Dispatcher zu nutzen, muß eine Instanz der Klasse erzeugt werden:
+
Um den Dispatcher zu nutzen, muss eine Instanz der Klasse erzeugt werden:
  
$dispatcher = new RequestDispatcher("www.domain.de");
+
<source lang="xml">$dispatcher = new RequestDispatcher("www.domain.de");</source>
  
Dem Konstruktor wird der Host oder die IP-Adresse des Servers angegeben, an den die Request weitergeleitet werden soll.
+
Dem Konstruktor wird der Host, oder die IP-Adresse des Servers angegeben, an den der Request weitergeleitet werden soll. Wird kein Host angegeben, wird der Host mit Hilfe der Server-Variablen <code>$_SERVER["HTTP_HOST"]</code> ermittelt.
  
$dispatcher->absorb();
+
SPML-Seiten verwenden das Encoding <code>UTF-8</code> und liefern die Zeichen in diesem Encoding zurück. Verwendet die PHP-Seite ein anderes Encoding, kann mit der Methode <code>setEncoding()</code> das entsprechende Encoding angegeben werden.
  
Die Methode absorb() liest alle Request-Parameter, Request-Uploads Cookies, Session-Parameter und Server-Variablen ein, um sie mit der dispatch() Methode weiterzuleiten. Alternative können auch z.B. nur Request-Parameter mit der Methode absorbRequestParameter() übernommen werden. Weitere Methoden sind absorbRequestUploads(), absorbSessionVariables(), absorbCookies() und absorbServerVariables(). Einzelnen Werte können mit setParameter(), setFile() und setCookie() setzten. Server- und Session-Variablen werden als HTTP-Parameter gesendet.
+
<source lang="xml">$dispatcher->setEncoding("ISO-8859-15");</source>
  
Die Methode dispatch() führt den Request aus. Dieser Methode wird der Pfad zu der Seite angegeben, an den der Request weitergeleitet werden soll. Die Methode liefert true zurück, wenn der Request erfolgreich weitergeleitet wurde, sonst false.
+
Die Methode <code>absorb()</code> liest alle Request-Parameter, Request-Uploads, Cookies, Session-Parameter und Server-Variablen ein, um sie mit der <code>dispatch()</code>-Methode weiterzuleiten. Alternativ können z.B. auch nur Request-Parameter mit der Methode <code>absorbRequestParameter()</code> übernommen werden. Weitere Methoden sind <code>absorbRequestUploads()</code>, <code>absorbSessionVariables()</code>, <code>absorbCookies()</code> und <code>absorbServerVariables()</code>. Einzelnen Werte können mit <code>setParameter()</code>, <code>setFile()</code> und <code>setCookie()</code> gesetzt werden. Server- und Session-Variablen werden als HTTP-Parameter gesendet.
  
$success = $dispatcher->dispatch("/dir/file.spml");
+
<source lang="xml">$dispatcher->absorb();</source>
 +
 
 +
Die Methode <code>dispatch()</code> führt den Request aus. Bei dieser Methode wird der Pfad zu der Seite angegeben, an den der Request weitergeleitet werden soll. Die Methode liefert <code>true</code> zurück, wenn der Request erfolgreich weitergeleitet wurde, ansonsten den Wert <code>false</code>.
 +
 
 +
<source lang="xml">$success = $dispatcher->dispatch("/dir/file.spml");</source>
  
Der Dispatcher reichte alle GET- und POST-Parameter der PHP-Seite weiter. Der Request, den der Dispatcher ausfürt ist immer POST. Weiter werden alle Session-Variablen ($_SESSION) und alle Server ($_SERVER) als Parameter mitgesendet. Cookies werden alls Cookies weitergereicht.
+
Der Dispatcher reicht alle <code>GET</code>- und <code>POST</code>-Parameter der PHP-Seite weiter. Der Request, den der Dispatcher ausfürt ist immer <code>POST</code>. Weiterhin werden alle Session-Variablen <code>($_SESSION)</code> und alle Server <code>($_SERVER)</code> als Parameter mitgesendet. Cookies werden als Cookies weitergereicht.
  
 
Anschließend kann eine Fehlerbehandlung erfolgen oder z.B. der Response ausgegeben werden.
 
Anschließend kann eine Fehlerbehandlung erfolgen oder z.B. der Response ausgegeben werden.
  
 +
<source lang="xml">
 
if ($success) {
 
if ($success) {
 
   echo $dispatcher->getContent();
 
   echo $dispatcher->getContent();
Zeile 317: Zeile 342:
 
   echo "<b>FEHLER</b>: " . $dispatcher->getError() . "<br>";
 
   echo "<b>FEHLER</b>: " . $dispatcher->getError() . "<br>";
 
}  
 
}  
 +
</source>
  
 
Für die Ausgabe und Auswertung stehen folgende Methoden zur Verfügung:
 
Für die Ausgabe und Auswertung stehen folgende Methoden zur Verfügung:
  
getContent()
+
;<code>getContent()</code>
 +
:gibt den Inhalt der aufgerufenen Seite zurück
  
    gibt den Inhalt der aufgerufenen Seite zurück
+
;<code>getStatusCode()</code>
getStatusCode()
+
:Liefert den HTTP-Status-Code des Response zurück (z.B. 200 für 'OK' oder 404 für 'not found')
  
    Liefert den HTTP-Status-Code des Response zurück (z.B. 200 für 'OK' oder 404 für 'not found')
+
;<code>getStatusMessage()</code>
getStatusMessage()
+
:Liefert die HTTP-Status-Meldung des Response zurück (z.B. 'OK' oder '... not found')
  
    Liefert den HTTP-Status-Meldung des Response zurück (z.B. 'OK' oder '... not found')
+
;<code>getError()</code>
getError()
+
:Liefert eine Fehlerzeile aus HTTP-Status-Code und -Meldung zurück
  
    Liefert eine Fehlerzeile aus HTTP-Status-Code und -Meldung zurück
+
;<code>getResonseHeaders()</code>
getResonseHeaders()
+
:Liefert ein Assoziatives Array, das die Response Header enthält
  
    Liefert ein Assoziatives Array, das die Response Header enthält
+
;<code>getResonseCookies()</code>
getResonseCookies()
+
:Liefert ein Assoziatives Array, das die Cookies im Response enthält
  
    Liefert ein Assoziatives Array, das die Cookies im Response enthält
+
;<code>getRequestURL()</code>
getRequestURL()
+
:Liefert die URL, an die der Request weitergeleitet wurde
  
    Liefert die URL, an die der Request weitergeleitet wurde
+
;<code>getJSessionId()</code>
getJSessionId()
+
:Liefert vor dem <code>dispatch()</code>-Aufruf die <code>JSESSIONID</code> mit der der Request gesendet wird. Nach dem <code>dispatch()</code>-Aufruf wird die vom Request zurückgelieferte <code>JSESSIONID</code> ausgegeben.
  
    Liefert vor dem dispatch()-Aufruf die JSESSIONID mit der der Request gesendet wird. Nach dem dispatch()-Aufruf wird die vom Request zurückgeliefert JSESSIONID zurückgeliefert.
+
Soll für mehrere Aufrufe von SPML-Seiten die gleiche Session verwendet werde, muss das dafür notwendige Cookie <code>JSESSIONID</code> vom Dispatcher an die aufrufende PHP-Seite weitergegeben werden. Ist dies erwünscht, ist das vor dem <code>dispatch()</code>-Aufruf mit der Methode <code>setWriteCookies(true)</code> einzuschalten.
  
Soll für mehrere Aufrufe von SPML-Seite die gleiche Session verwendet werde, muß das dafür notwendige Cookie JSESSIONID vom Dispatcher an die aufrufende PHP-Seite weitergegeben werden. Ist dies erwünscht, ist das vor dem dispatch()-Aufruf dies mit der Methode setWriteCookies(true) einzuschalten.
+
Das Schreiben des Cookies vom Dispatcher ist standardmässig deaktiviert. Der Grund dafür ist, dass der Dispatcher das Cookie nur setzen kann, wenn noch keine Daten an den Client gesendet wurden (Cookies liegen im HTTP-Header). Soll der Dispatcher Cookies an den Client weiterreichen, muss die <code>disptach()</code>-Methode aufgerufen werden, bevor PHP Daten an den Client sendet (z.B. mit <code>echo</code>).
 
 
Das Schreiben des Cookies vom Dispatcher ist standardmässig deaktiviert. Der Grund dafür ist, das der Dispatcher das Cookie nur setzen kann, wenn noch keine Daten an den Client gesendet wurden (Cookies liegen im HTTP-Header). Soll der Dispatcher Cookies an den Client weite reichen, muß die disptach()-Methode aufgerufen werden bevor PHP Daten an den Client sendet (z.B. mit echo).
 
  
 +
<source lang="xml">
 
...
 
...
 
$dispatcher->setWriteCookies(true);
 
$dispatcher->setWriteCookies(true);
 
$success = $dispatcher->dispatch("/dir/file.spml");
 
$success = $dispatcher->dispatch("/dir/file.spml");
 
...
 
...
 +
</source>
  
Dadurch wird das Cookie JSESSIONID an den Browser weitergereicht. Mit dieser Methode kann die PHP-Seite nur eine Session für die SPML-Seiten definieren, da der Cookie-Name JSESSIONID vorgegeben ist. Möglicherweise kann es auch zu konflikten kommen wenn weitere PHP-Seiten eine andere Session verwenden wollen. Aus diesem Grund ist es möglich den Namen des Cookies zu ändern, der an den Browser gesendet werden soll. Mit folgendem Aufruf läßt sich die Cookie-Name ändern.
+
Dadurch wird das Cookie <code>JSESSIONID</code> an den Browser weitergereicht. Mit dieser Methode kann die PHP-Seite nur eine Session für die SPML-Seiten definieren, da der Cookie-Name <code>JSESSIONID</code> vorgegeben ist. Möglicherweise kann es auch zu Konflikten kommen, wenn weitere PHP-Seiten eine andere Session verwenden wollen. Aus diesem Grund ist es möglich den Namen des Cookies zu ändern, der an den Browser gesendet werden soll. Mit folgendem Aufruf lässt sich der Cookie-Name ändern.
  
 +
<source lang="xml">
 
...
 
...
 
$dispatcher->setJSessionName("mySessionA");
 
$dispatcher->setJSessionName("mySessionA");
Zeile 361: Zeile 389:
 
$success = $dispatcher->dispatch("/dir/file.spml");
 
$success = $dispatcher->dispatch("/dir/file.spml");
 
...
 
...
 +
</source>
  
Auch die Namensänderung muß vor dem Aufruf der dispatch()-Methode erfolgen. Der Dispatcher sorgt nun dafür, das zwar das Cookie JSESSIONID an die SPML-Seite gesendet wird, im Browser wird die SessionID allerdings in einem Cookie gehalten, dessen Name mit setJSessionName() angegeben werden kann.
+
Auch die Namensänderung muss vor dem Aufruf der <code>dispatch()</code>-Methode erfolgen. Der Dispatcher sorgt nun dafür, dass zwar das Cookie <code>JSESSIONID</code> an die SPML-Seite gesendet wird, im Browser wird die SessionID allerdings in einem Cookie gehalten, dessen Name mit <code>setJSessionName()</code> angegeben werden kann.
  
Im Normalfall leitet der RequestDispatcher alle Request-Parameter mit der die PHP-Seite aufgerufen wurde an die angegebene URL weiter. Es können allerdings noch weitere Parameter und auch Upload-Dateien hinzugefügt werden. Diese können vor dem dispatch()-Aufruf mit folgender Methode gesetzt werden.
+
Im Normalfall leitet der <code>RequestDispatcher</code> alle Request-Parameter mit der die PHP-Seite aufgerufen wurde an die angegebene URL weiter. Es können allerdings noch weitere Parameter und auch Upload-Dateien hinzugefügt werden. Diese können vor dem <code>dispatch()</code>-Aufruf mit folgender Methode gesetzt werden.
  
 +
<source lang="xml">
 
...
 
...
 
$dispatcher->setParameter("myparam", "abc"); // HTTP-Parameter hinzufügen
 
$dispatcher->setParameter("myparam", "abc"); // HTTP-Parameter hinzufügen
Zeile 371: Zeile 401:
 
$success = $dispatcher->dispatch("/dir/file.spml");
 
$success = $dispatcher->dispatch("/dir/file.spml");
 
...
 
...
 +
</source>
  
Wurden an die PHP-Seite Formulardaten eines mit sp:form erzeugten Formulars gesendet ist wie oben beschrieben die Angabe eines nameencodings notwendig. Um dennoch über den originalen Fomularfeldnamen auf die Felder zugreifen zu können ist es möglich das Encoding bei den Methoden setParameter(), addParameter(), removeParameter(), getParameter(), setFile(), addFile(), removeFile() und getFile() mit anzugeben.
+
Wurden an die PHP-Seite Formulardaten eines mit <code>sp:form</code> erzeugten Formulars gesendet, ist wie oben beschrieben die Angabe eines <code>nameencodings</code> notwendig. Um dennoch über den originalen Fomularfeldnamen auf die Felder zugreifen zu können, ist es möglich das Encoding bei den Methoden <code>setParameter()</code>, <code>addParameter()</code>, <code>removeParameter()</code>, <code>getParameter()</code>, <code>setFile()</code>, <code>addFile()</code>, <code>removeFile()</code> und <code>getFile()</code> mit anzugeben.
  
 +
<source lang="xml">
 
...
 
...
 
$dispatcher->setParameter("myparam", "abc", "hex"); // HTTP-Parameter hinzufügen
 
$dispatcher->setParameter("myparam", "abc", "hex"); // HTTP-Parameter hinzufügen
 
$dispatcher->getParameter("test", "hex"); // liefert den HTTP-Parameter zurück
 
$dispatcher->getParameter("test", "hex"); // liefert den HTTP-Parameter zurück
 
...
 
...
 +
</source>
  
Zusammenfassen noch die Methoden, mit denen der Request gesteuert werden kann
+
Zusammenfassend noch die Methoden, mit denen der Request gesteuert werden kann
  
setJSessionId(jsessionid)
+
;<code>setJSessionId(jsessionid)</code>
 +
:Setzt die <code>JSESSIONID</code> die verwendet werden soll.
  
    Setzt die JSESSIONID die verwendet werden soll.
+
;<code>absorb()</code>
absorb()
+
:Übernimmt alle Parameter und Variablen der PHP-Seite, um sie weiter zu senden.
  
    Übernimmt alle Parameter und Variablen der PHP-Seite, um sie weiter zu senden.
+
;<code>absorbRequestParameter()</code>
absorbRequestParameter()
+
:Übernimmt alle Request-Parameter der PHP-Seite, um sie weiter zu senden.
  
    Übernimmt alle Request-Parameter der PHP-Seite, um sie weiter zu senden.
+
;<code>absorbRequestUploads()</code>
absorbRequestUploads()
+
:Übernimmt alle Request-Uploads der PHP-Seite, um sie weiter zu senden.
  
    Übernimmt alle Request-Uploads der PHP-Seite, um sie weiter zu senden.
+
;<code>absorbCookies()</code>
absorbCookies()
+
:Übernimmt alle Cookies der PHP-Seite, um sie weiter zu senden.
  
    Übernimmt alle Cookies der PHP-Seite, um sie weiter zu senden.
+
;<code>absorbSessionVariables()</code>
absorbSessionVariables()
+
:Übernimmt alle Session-Variablen der PHP-Seite, um sie weiter zu senden.
  
    Übernimmt alle Session-Variablen der PHP-Seite, um sie weiter zu senden.
+
;<code>absorbServerVariables()</code>
absorbServerVariables()
+
:Übernimmt alle Server-Variablen der PHP-Seite, um sie weiter zu senden.
  
    Übernimmt alle Server-Variablen der PHP-Seite, um sie weiter zu senden.
+
;<code>dispatch(path, user, password)</code>
dispatch(path, user, password)
+
:Führt den Request mit den angegebenen Pfad aus. Optional kann noch ein User und ein Passwort für BASIC-Authentikation angegeben werden.
  
    Führt den Request mit den angegebenen Pfad aus. Optional kann noch ein User und ein Password für BASIC-Authentication angegeben werden.
+
;<code>setParameter(name, value, encoding)</code>
setParameter(name, value, encoding)
+
:Setzt ein Parameter der zusätzlich noch mitgesendet werden soll. Existiert bereis ein Parameter mit dem Name wird dieser überschieben
 +
:;Parameter
 +
::<b><code>name</code></b> Name des Parameters
 +
::<b><code>value</code></b> Wert des Parameters
 +
::<b><code>encoding</code></b> (optional) Encoding, mit dem der angegebene Parametername encodet werden soll
  
    Setzt ein Parameter der zusätzlich noch mitgesendet werden soll. Existiert bereis ein Parameter mit dem Name wird dieser überschieben
+
;<code>addParameter(name, value, encoding)</code>
 +
:Setzt ein Parameter der zusätzlich noch mitgesendet werden soll. Existiert bereis ein Parameter mit dem Name wird der neue Wert hinzugefügt. Aus dem value wird ein Array.
 +
:;Parameter
 +
::<b><code>name</code></b> Name des Parameters
 +
::<b><code>value</code></b> Wert des Parameters
 +
::<b><code>encoding</code></b> (optional) Encoding, mit dem der angegebene Parametername encodet werden soll
  
    Parameter
+
;<code>removeParameter(name, encoding)</code>
 +
:Löscht einen Parameter und liefert den Wert des gelöschten Parameters zurück
 +
:;Parameter
 +
::<b><code>name</code></b> Name des Parameters
 +
::<b><code>encoding</code></b> (optional) Encoding, mit dem der angegebene Parametername encodet werden soll
  
        name Name des Parameters
+
;<code>getParameter(name, encoding)</code>
 +
:Liefert den Wert eines Parameters
 +
:;Parameter
 +
::<b><code>name</code></b> Name des Parameters
 +
::<b><code>encoding</code></b>(optional) Encoding, mit dem der angegebene Parametername encodet werden soll
  
        value Wert des Parameters
+
;<code>setFile(name, file, mime, encoding)</code>
 +
:Setzt eine Datei die zusätzlich noch mitgesendet werden soll. Existiert bereis eine Uploaddatei mit dem Feldnamen wird diese ersetzt.
  
        encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
+
:;Parameter
 +
::<b><code>name</code></b> Feldname unter dem die Datei mitgesendet werden soll.
 +
::<b><code>file</code></b> Absoluter oder relativer (zur PHP-Seite) Pfad der Datei
 +
::<b><code>mime</code></b> MIME-Type der Datei
 +
::<b><code>encoding</code></b> (optional) Encoding, mit dem der angegebene Parametername encodet werden soll
  
addParameter(name, value, encoding)
+
;<code>addFile(name, file, mime, encoding)</code>
 +
:Setzt eine Datei die zusätzlich noch mitgesendet werden soll. Existiert bereis eine Uploaddatei mit dem Feldnamen wird die Datei hinzugefügt.
  
    Setzt ein Parameter der zusätzlich noch mitgesendet werden soll. Existiert bereis ein Parameter mit dem Name wird der neue Wert hinzugefügt. Aus dem value wird ein Array.
+
:;Parameter
 +
::<b><code>name</code></b> Feldname unter dem die Datei mitgesendet werden soll.
 +
::<b><code>file</code></b> Absoluter oder relativer (zur PHP-Seite) Pfad der Datei       
 +
::<b><code>mime</code></b> MIME-Type der Datei
 +
::<b><code>encoding (optional)</code></b> Encoding, mit dem der angegebene Parametername encodet werden soll.      
  
    Parameter
+
;<code>removeFile(name, encoding)</code>
 
+
:Sendet die Upload-Datei(en) mit dem angegebenen Feldnamen nicht mit und liefert die Datei in Form eines Arrays zurück. Das Array hat folgende Felder.
        name Name des Parameters
+
:;<b><code>name</code></b>
 
+
::Feldname
        value Wert des Parameters
+
:;<b><code>type</code></b>
 
+
::MIME-Type
        encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
+
:;<b><code>tmp_name</code></b>
 
+
::Pfad zur Datei
removeParameter(name, encoding)
+
:;<b><code>error</code></b>
 
+
::Fehlercode bei übernommenen Dateien
    Löscht einen Parameter und liefert den Wert des gelöschten Parameters zurück
+
:;<b><code>size</code></b>
 
+
::Dateigröße in Bytes
    Parameter
+
:;Parameter
 
+
::<b><code>name</code></b> Feldname unter dem die Datei mitgesendet werden soll.
        name Name des Parameters
+
::<b><code>encoding</code></b> (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
 
 
        encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
 
 
 
getParameter(name, encoding)
 
 
 
    Liefert den Wert eines Parameters
 
 
 
    Parameter
 
 
 
        name Name des Parameters
 
 
 
        encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
 
 
 
setFile(name, file, mime, encoding)
 
 
 
    Setzt eine Datei die zusätzlich noch mitgesendet werden soll. Existiert bereis eine Uploaddatei mit dem Feldnamen wird diese ersetzt.
 
 
 
    Parameter
 
 
 
        name Feldname unter dem die Datei mitgesendet werden soll.
 
 
 
        file Absoluter oder relativer (zur PHP-Seite) Pfad der Datei
 
 
 
        mime MIME-Type der Datei
 
 
 
        encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
 
 
 
addFile(name, file, mime, encoding)
 
 
 
    Setzt eine Datei die zusätzlich noch mitgesendet werden soll. Existiert bereis eine Uploaddatei mit dem Feldnamen wird die Datei hinzugefügt.
 
 
 
    Parameter
 
 
 
        name Feldname unter dem die Datei mitgesendet werden soll.
 
 
 
        file Absoluter oder relativer (zur PHP-Seite) Pfad der Datei
 
 
 
        mime MIME-Type der Datei
 
 
 
        encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
 
 
 
removeFile(name, encoding)
 
 
 
    Sendet die Upload-Datei(en) mit dem angegebenen Feldnamen nicht mit und Liefert die Datei in Form eines Arrays zurück. Das Array hat folgende Felder.
 
 
 
    name
 
 
 
        Feldname
 
    type
 
 
 
        MIME-Type
 
    tmp_name
 
 
 
        Pfad zur Datei
 
    error
 
 
 
        Fehlercode bei übernommenen Dateien
 
    size
 
 
 
        Dateigröße in Bytes
 
 
 
    Parameter
 
 
 
        name Feldname unter dem die Datei mitgesendet werden soll.
 
 
 
        encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
 
  
 
;<code>getFile(name, encoding)</code>
 
;<code>getFile(name, encoding)</code>
:Liefert die zu sendende Datei in Form eines Arrays Das Array hat folgende Felder
+
:Liefert die zu sendende Datei in Form eines Arrays. Das Array hat folgende Felder
 
:;Parameter
 
:;Parameter
::<b>name</b> Feldname
+
::<b><code>name</code></b> Feldname
::<b>type</b> MIME-Type     
+
::<b><code>type</code></b> MIME-Type     
::<b>tmp_name</b> Pfad zur Datei
+
::<b><code>tmp_name</code></b> Pfad zur Datei
::<b>error</b> Fehlercode bei übernommenen Dateien
+
::<b><code>error</code></b> Fehlercode bei übernommenen Dateien
::<b>size</b> Dateigröße in Bytes
+
::<b><code>size</code></b> Dateigröße in Bytes
 
          
 
          
 
;<code>setCookie(name, value)</code>
 
;<code>setCookie(name, value)</code>
 
:Setzt ein Cookie das zusätzlich noch mitgesendet werden soll.
 
:Setzt ein Cookie das zusätzlich noch mitgesendet werden soll.
 
:;Parameter
 
:;Parameter
::<b>name</b> Name des Parameters
+
::<b><code>name</code></b> Name des Parameters
::<b>value</b> Wert des Parameters
+
::<b><code>value</code></b> Wert des Parameters
  
 
;<code>removeCookie(name)</code>
 
;<code>removeCookie(name)</code>
 
:Sendet das angegebene Cookie nicht mit und liefert den Wert des Cookies oder null, wenn des Cookie nicht existiert
 
:Sendet das angegebene Cookie nicht mit und liefert den Wert des Cookies oder null, wenn des Cookie nicht existiert
 
:;Parameter
 
:;Parameter
::<b>name</b> Name des Parameters
+
::<b><code>name</code></b> Name des Parameters
  
 
;<code>getCookie(name)</code>
 
;<code>getCookie(name)</code>
 
:Liefert den Wert des zu sendenden Cookies oder null, wenn des Cookie nicht existiert
 
:Liefert den Wert des zu sendenden Cookies oder null, wenn des Cookie nicht existiert
 
:;Parameter
 
:;Parameter
::<b>name</b> Name des Parameters
+
::<b><code>name</code></b> Name des Parameters
  
 
;<code>setJSessionName(name);</code>
 
;<code>setJSessionName(name);</code>
:Gibt einen Cookie-Namen an unter dem die JSESSIONID im Browser gespeichert werden soll
+
:Gibt einen Cookie-Namen an, unter dem die <code>JSESSIONID</code> im Browser gespeichert werden soll
 
:;Parameter
 
:;Parameter
::<b>name</b> Name des Cookies
+
::<b><code>name</code></b> Name des Cookies
  
 
;<code>setWriteCookies(writeCookie);</code>
 
;<code>setWriteCookies(writeCookie);</code>
 
:Gibt an, ob die Cookies des Response des weitergereichten Requests bis zum Browser durchgereicht werden sollen.
 
:Gibt an, ob die Cookies des Response des weitergereichten Requests bis zum Browser durchgereicht werden sollen.
 
:;Parameter
 
:;Parameter
::<b>writeCookie</b> <code>true</code>, wenn die Cookies durchgereicht werden sollen.
+
::<b><code>writeCookie</code></b> <code>true</code>, wenn die Cookies durchgereicht werden sollen.
 
 
 
 
 
 
 
 
 
 
 
 
  
  
 
<noinclude>
 
<noinclude>
[[Category:SPML]]
+
[[Category:Funktionsbeschreibungen]]
 
[[Category:Qualität_des_Inhalts_prüfen]]
 
[[Category:Qualität_des_Inhalts_prüfen]]
[[Category:Qualität_der_Sprache_prüfen]]
 
 
[[Category:Qualität_des_Codes_prüfen]]
 
[[Category:Qualität_des_Codes_prüfen]]
 
</noinclude>
 
</noinclude>

Aktuelle Version vom 12. November 2009, 12:22 Uhr

Beschreibung

Als Live-Seiten werden SPML-Seiten bezeichnet, die in einem Publikationsbereich generiert werden und somit, wie auch PHP-Seiten, in einer Website aufgerufen werden.

Um SPML-Seiten in einem Publikationsbereich ausführen zu können, muss dieser als IES-Modul aktiviert sein.

SPML-Seiten mit Fullpage-Template

Die einfachste Art eine SPML-Liveseite zu erzeugen, ist über ein Fullpage Template. Verwenden Sie dazu bitte das im Basis-Paket des IES enthaltene Template Fullpage (spml). Dieses Template stellt für die Eingabe ein Textfeld bereit, in dem der SPML-Code eingetragen werden kann. Für die Ausgabe erzeugt das Template zu dem eingegebenen SPML-Code noch zusätzliche notwendige Setzungen.

Legen Sie einen Seiten-Artikel mit diesem Template an und tragen Sie in das Textfeld z.B. folgenden Code ein:

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

Publizieren Sie den Artikel und rufen Sie die generierte Seite auf. In der Seite ist nun der Name des Artikels enthalten. Das Objekt system.page steht nur in generierten SPML-Seiten zur Verfügung.

Bei der Erzeugung von SPML-Seiten über das Fullpage-Template ergibt sich jedoch ein Nachteil. Der in dem Textfeld eingetragene SPML-Code wird 1 zu 1 in die zu generierende SPML-Seite geschrieben. SPML-Code der zum Generierungszeitpunkt ausgeführt werden soll, kann nicht angegeben werden. Ist dies jedoch notwendig, müssen die SPML-Seite über andere Templates erzeugt werden.

SPML-Seiten mit benutzerdefinierten Templates

Je nach Anwendungsfall kann es auch sinvoll sein, den SPML-Code zunächst in ein Template zu schreiben, so dass jeder Artikel der dieses Template verwendet, den SPML-Code enthält. Da SPML aber auch für die Template-Sprache selbst verwendet wird, ist darauf zu achten, dass SPML-Code, der nicht zur Generierungszeit der Seite ausgeführt werden soll, in <sp:code>-Tags stehen muss. Code innerhalb dieser Tags wird zur Generierungszeit ignoriert und direkt in die Seite geschrieben. Dieser SPML-Code wird dann erst bei Aufruf der Seite ausgeführt.

So ist es möglich, Teile die zur Generierungszeit fest stehen, schon beim Erzeugen der Seite zu ermitteln und nur die 'echten' Liveanteile der SPML-Seite beim Aufruf auszuführen.

Im Out-Teil des Templates muss als erstes der Tag spt:spml eingebunden werden, da dieser den notwendigen SPML-Header in die Seite schreibt. Hierbei ist es wichtig, dass vor dem spt:spml-Tag kein Zeichen generiert wird. In den so generierten Seiten kann mit system.page auf das Page-Objekt zugegriffen werden.

<sp:io type="in">
   ...
</sp:io><sp:io type="out"><spt:spml/>
   ...
   <sp:code>
      SPML-Code der uninterpretiert in die Seite geschreiben wird.<br>
      Uhrzeit: <sp:print name="system.now" dateformat="HH:mm:ss"/>
   </sp:code>
</sp:io>

IES Nutzer anmelden

Um Daten des IES lesen und schreiben zu können ist ein angemeldeter Nutzer nötig. Mit dessen Rechten wird entschieden, ob bestimmte Daten gelesen, oder geschrieben werden dürfen.

Es gibt mehrere Möglichkeiten einen Nutzer anzumelden:

  • Über ein Login-Formular, das an den LoginHandler (siehe LoginHandler) gesendet wird.
  • Mit Hilfe von sp:login
  • Implizit über die Modul-Konfiguration
  • Über Basic-Authentication

Login über ein Formular

Über den LoginHandler können Nutzer mit Hilfe von Formular-Feldern angemeldet werden. Dazu wird ein solches Formular verwendet.

<sp:form name="beliebig" uri="${pageAfterLogin}" handler="com.sitepark.ies.control.jsp.handler.LoginHandler" method="post">
  Login: <input name="SYS_LGIN_login"><br>
  Passwort: <input name="SYS_LGIN_password" type="password"><br>
  <input name="SYS_LGIN_client" type="hidden" value="clientanchor"/>
  <input type="submit"/>
</sp:form>

<sp:loop collection="system.error" item="it">
  ERROR: <sp:print name="it.key"/>: <sp:print name="it.value"/><br>
</sp:loop>
<sp:loop collection="system.fatal" item="it">
  FATAL: <sp:print name="it.key"/>: <sp:print name="it.value"/><br>
</sp:loop>

Mit sp:form wird das Formular erzeugt. Mit uri wird angegeben, welche Seite nach dem ausgeführten Login aufgerufen werden soll. Mit handler wird der LoginHandler angegeben, um das Login durchzuführen. Die für den LoginHandler erforderlichen Felder SYS_LGIN_login, SYS_LGIN_password und SYS_LGIN_client müssen mit angegeben werden. Für SYS_LGIN_client kann entweder die Client ID oder der Anchor des Clients verwendet werden.

Um zu verhindern, dass Seiten aufgerufen werden können, ohne dass ein Nutzer angemeldet ist, können bestimmte Seiten geschützt werden. Weiterhin sollten im Fehlerfall (ungültiger Login, Aufruf einer geschützten Seite von einem nicht angemeldeten Nutzer) eine definierte Seite aufgerufen werden. Dazu ist in der Konfigurationsdatei DOCUMENT_ROOT/WEB-INF/ies-module.xml des entsprechenden Publikationsbereich folgendes einzutragen:

<ies-module ...>
  ...
  <web>
    <security-constrains>
      <allowed pattern="/login.spml" />
      <denied pattern="/.*" />
    </security-constrains>
    <exception url-pattern=".*">
      <catch class=".*" uri="/login.spml" />
    </exception>
  </web>
</ies-module>
<security-constrains>

Hier wird definiert welche Seiten ohne Login aufgerufen werden dürfen:

<allowed pattern="/login.spml" />

Der Aufruf von login.spml ist immer erlaubt.

<denied pattern="/.*" />

Alle anderen Seiten dürfen nicht aufgerufen werden.

Hierbei ist noch zu beachten, dass nur die Seiten geschützt werden, die vom IES ausgeführt/ausgeliefert werden (HTML-Seiten, PHP-Seiten, Bilder, CSS, ... gehören in der Regel nicht dazu). Je nach Konfiguration der Weiterleitungen (mod_jk, proxy_ajp) sind das möglicherweise nur *.spml und *.jsp Dateien.

<exception>

Werden Seiten von nicht angemeldeten Nutzern aufgerufen, wird von der Seite eine AccessDeniedException aufgerufen. Um diese Fehler allgemein zu verarbeiten, wird angegeben, für welche URLs welche Exception möglich sind und welche Seite danach aufgerufen werden soll. Hier werden für alle Seiten, alle Exception abgefangen und anschließend /login.spml aufgerufen.

Nach einer Änderung der Datei ies-module.xml muss das entsprechende Publisher-Modul neu geladen werden. Damit werden die Änderungen dann wirksam (Siehe Administration des IES).

Daten über Liveseiten erzeugen, ändern und löschen

Wie IES-Module können auch Liveseiten Daten im IES erzeugen, ändern und löschen. Dazu werden Handler angesprochen, die über HTTP GET- bzw. POST-Parameter gesteuert werden.

Artikel anlegen und ändern

Um einen Artikel über eine Liveseite anzulegen, muss der InformationHandler verwendet werden. Dieser wird über seinen vollen Klassennamen com.sitepark.ies.control.jsp.handler.InformationHandler angesprochen. Siehe InformationHandler.

Die Artikeldaten können z.B. in einem Formular eingegeben und anschließend an den IES gesendet werden. Der Handler führt dann die notwendigen Aktionen aus. Die SPML-Seite stellt anschließend die Ergebnisse dar.

Die Minimalanforderungen, um einen Artikel anlegen oder ändern zu können, sind:

  • Es muss ein Nutzer angemeldet sein, der die nötigen Rechte hat, einen Artikel in einem Pool anzulegen
  • Um einen neu angelegten Artikel direkt darzustellen, muss die Variable SYS_element mit dem Wert von SYS_INFE_id gesetzt werden. In SYS_INFE_id wird die ID des neu angelegten Artikels gesetzt. SYS_element definiert das aktuelle Element
<sp:set name="SYS_element" object="SYS_INFE_id"/>

Nur wenn diese Variable gesetzt ist, kann auf den aktuellen Artikel mit system.information zugegriffen werden.

  • Um einen Artikel zu ändern, muss das Feld SYS_INFE_id mit der zu ändernden Artikel-ID und SYS_INFE_action mit dem Wert update mitgesendet werden.
  • Um einen Artikel zu erzeugen, müssen die Felder SYS_INFE_articleType für den Typ des Artikels (Artikel, Medium, Resource), SYS_INFE_action mit dem Wert create und SYS_INFE_target mit der ID des Pools, in dem der Artikel angelegt werden soll, mitgegeben werden.
  • Für den Artikel muss mit dem Feld SYS_INFE_name ein Name angegeben werden.

Damit wird ein Artikel angelegt oder geändert, kann aber noch nicht mit InfoSite weiter bearbeitet werden. Dazu fehlen noch einige Steuerfelder, die von InfoSite benötigt werden, um in dessen Umgebung lauffähig zu sein. Bei den noch nötigen Feldern handelt es sich um Content-Felder, die mit Hilfe von sp:hidden erzeugt werden können.

Die Felder entsprechen den Angaben für den Artikelpool in der Artikelpoolverwaltung von InfoSite5, in dem der Artikel angelegt werden soll.

Da sich die Werte auf den Pool, in dem der Artikel abgelegt werden soll beziehen, kann dies z.B. so erfolgen:

<sp:set name="articlePool" object="system.page.parent"/>
...
  <sp:hidden name="template" value="${articlePool.container}"/>
  <sp:hidden name="editor_template_pool" value="${articlePool.editorTemplatePool}"/>
  <sp:hidden name="registration_template" value="${articlePool.registrationTemplate}"/>
  <sp:hidden name="editor_template" value="${articlePool.editorTemplatePool.sortedElements[0]}"/>
...

In diesem Beispiel wird der gleiche Pool verwendet, in dem auch die SPML-Seite selber liegt. Im Normalfall werden die angelegten Artikel vermutlich in anderen Pools liegen. Das Feld editor_template wird in diesem Beispiel auf das erste Template (alphabetisch sortiert) in dem Template-Pool gesetzt. Hier kann auch z.B. über Anchor ein bestimmtes Template angegeben werden. Es ist nur darauf zu achten, dass das Template auch in dem über editor_template_pool angegebenen Template-Pool enthalten ist.

In dem Artikelpool-Bereich können folgende Angaben für den Pool gemacht werden.

Template Container
Dieses Feld entspricht dem hidden-Feld template. Folgende Anchor für InfoSite-Container können verwendet werden:
  • gui.container.infosite.standard (Standard InfoSite Container)
  • gui.container.infosite.media (Standard Medien Container)
Template für die Eigenschaften
Dieses Feld entspricht dem hidden-Feld registration_template. Folgende InfoSite-Templates können verwendet werden:
  • gui.container.infosite.standard.all (alle Artikel-Typen)
  • gui.container.infosite.standard.page (nur Seiten anlegen)
  • gui.container.infosite.standard.media (nur Medien anlegen)
  • gui.container.infosite.standard.resource (nur Resourcen anlegen)
  • gui.container.infosite.standard.pageAutoName (nur Seiten ohne Namensvergabe anlegen)
  • gui.container.infosite.standard.pageAndMedia (nur Seiten und Medien anlegen)
  • gui.container.infosite.standard.pageAndResource (nur Seiten und Resourcen anlegen)
Templatepool für die Bearbeitung
Dieses Feld entspicht dem hidden-Feld editor_template_pool. Hier muss eine ID eines Templates-Pools angegeben werden, in dem sich die zu verwendenden Templates befinden

Hier ein kleines Beispiel für das Anlegen und Bearbeiten eines Artikels:

<sp:set name="SYS_element" object="SYS_INFE_id"/>

<sp:login login="nutzerlogin" password="nutzerpassword" client="mandantenanchor" scope="application"/>

<sp:set name="articlePool" object="system.page.parent"/>

<sp:form name="createAndEdit" uri="${system.page.url}" handler="com.sitepark.ies.control.jsp.handler.InformationHandler" method="post">
  <sp:condition>
    <sp:if name="system.information">
      <input type="hidden" name="SYS_INFE_id" value="<sp:print name="system.information.id"/>">
      <input type="hidden"  name="SYS_INFE_action" value="update">
    </sp:if>
    <sp:else>
      <input type="hidden" name="SYS_INFE_action" value="create">
      <input type="hidden" name="SYS_INFE_articleType" value="article">
      <input type="hidden" name="SYS_INFE_target" value="<sp:print name="articlePool"/>">
    </sp:else>
  </sp:condition>
  Name:<br>
  <input name="SYS_INFE_name" value="<sp:print name="name"/>"><br>
  Dateiname:<br>
  <input name="SYS_INFE_file" value="<sp:print name="filename"/>"><br>
  <input type="submit" value="speichern"><br>

  <sp:hidden name="template" value="${articlePool.container}"/>
  <sp:hidden name="editor_template_pool" value="${articlePool.editorTemplatePool}"/>
  <sp:hidden name="registration_template" value="${articlePool.registrationTemplate}"/>
  <sp:hidden name="editor_template" value="${articlePool.editorTemplatePool.sortedElements[0]}"/>

  <sp:loop collection="system.error" item="it">
    ERROR: <sp:print name="it.key"/>: <sp:print name="it.value"/><br>
  </sp:loop>
  <sp:loop collection="system.fatal" item="it">
    FATAL: <sp:print name="it.key"/>: <sp:print name="it.value"/><br>
  </sp:loop>

</sp:form>

Artikel publizieren und depublizieren

Um Artikel zu publizieren bzw. zu depublizieren müssen folgende Felder pro Publikationsbereich mitgesendet werden:

SYS_INFE_publicationArea
ID des Publikationsbereiches in dem der Artikel publiziert bzw. depubliziert werden soll. z.B. pub1
SYS_INFE_publicationChecked
Wird diese Feld mitgesendet und hat es als Wert die ID des Publikationsbereiches, so wird der Artikel in diesem Publikationsbereich publiziert. Wird nur das Feld SYS_INFE_publicationArea (ohne SYS_INFE_publicationChecked) mitgesendet, wird der Artikel aus dem Publikationsbereich depubliziert.
SYS_INFE_publicationTemplate
Hiermit wird das Template angegeben mit dem der Artikel publiziert werden soll. Theoretisch ist es möglich für die Ein- und Ausgabe unterschiedliche Templates anzugeben. Da aber InfoSite5 dies nicht unterstützt, ist davon abzuraten. Bitte geben Sie hier für alle Publikationsbereich das Template an, dass Sie auch für das Feld editor_template verwendet haben.

Die Felder können z.B. über hidden-Felder mitgesendet werden. preview und www sind die Anchor der Publikationsbereiche.

  <input type="hidden" name="SYS_INFE_publicationArea" value="<sp:print name="${!{preview}}"/>">
  <input type="hidden" name="SYS_INFE_publicationChecked" value="<sp:print name="${!{preview}}"/>"/>
  <input type="hidden" name="SYS_INFE_publicationTemplate" value="<sp:print name="${articlePool.editorTemplatePool.sortedElements[0]}"/>">

  <input type="hidden" name="SYS_INFE_publicationArea" value="<sp:print name="${!{www}}"/>">
  <input type="hidden" name="SYS_INFE_publicationChecked" value="<sp:print name="${!{www}}"/>"/>
  <input type="hidden" name="SYS_INFE_publicationTemplate" value="<sp:print name="${articlePool.editorTemplatePool.sortedElements[0]}"/>">

PHP Integration

Es kann sinnvoll sein, SPML-Liveseiten nicht direkt aufzurufen, sondern in PHP-Seiten einzubetten. Dazu müssen die PHP-Seiten einen eigenen Request an die SPML-Seite senden. Dabei benötigt die SPML-Seite möglicherweise auch der Request-Parameter, die an die PHP-Seite gesendet wurden. Um die SPML-Seite möglichst einfach einzubinden, steht die PHP-Class RequestDispatcher.class.php aus der phplib von Sitepark zur Verfügung.

Für diese Art der Integration sind noch ein paar PHP-Besonderheiten zu beachten.

Gleichnamige Request-Parameter bzw. Formularfelder

Werden an eine PHP-Seite zwei gleichnamige Request-Parameter bzw. Formularfelder gesendet, wird von PHP immer nur der letzte Parameter verwendet. Wird also z.B. die URL

http://www.domain.de/test.php?test=1&test=2

aufgerufen, erhält man mit $_GET["test"] den Wert 2. Das gleiche gilt für POST Formularfelder. Möchte man beide Parameter erhalten, muss noch ein [] am Parameternamen bzw. Formularfeldnamen angehängt werden. Das obige Beispiel würde dann so aussehen:

http://www.domain.de/test.php?test[]=1&test[]=2

$_GET["test"] enthält nun ein Array mit den Werten $_GET["test"][0]=1 und $_GET["test"][1]=2

Siehe hierzu auch http://www.php.net/manual/de/faq.html.php#faq.html.arrays

Modifikationen von Request-Parametern und Formularfeldern durch PHP

Enthalten Namen von Request-Parametern oder Formularfeldern bestimmte Zeichen, wird der Name von PHP modifiziert. Aufgrund der oben genannten Array-Regel werden z.B. alle Zeichen nach einem [] abgeschnitten. Wird z.B. ein Request-Parameter mit dem Namen

sp_mainIterator[0].sp_text

an eine PHP-Seite geschickt, ist der Wert des Feldes nur noch über den Namen

sp_mainIterator

zugreifbar. Desweiteren werden alle Punkte, die in einem Request-Parameternamen oder einem Formularfeldnamen enthalten sind, durch Unterstriche ersetzt. Wird z.B. ein Request-Parameter mit dem Namen

sp_text.de_DE

an eine PHP-Seite geschickt, ist der Wert des Feldes nur noch über den Namen

sp_text_de_DE

zugreifbar.

Siehe hierzu auch http://www.php.net/manual/de/faq.html.php#faq.html.form-image

Der IES verwendet Punkte und eckige Klammern in mit sp:text, sp:textarea, sp:checkbox, sp:select, sp:hidden, sp:upload, sp:password und sp:radio erzeugten Formularfeldern. Würden diese so an eine PHP-Seite gesendet werden, gingen nötige Informationen verloren. Um dies zu umgehen, können mit dem Attribut nameencoding des Tags sp:form die Formularfeldnamen encodet werden. Aus einem mit sp:form definiertem Formular

<sp:form uri="test.php">
  <sp:iterator collection="sp_list" min="1">
    <sp:text name="sp_text"/>
  </sp:iterator>
</sp:form>

wird folgender HTML-Code erzeugt:

<form action="/test.php" method="post" id="form:0"><div>...</div>
    <input type="text" name="sp_list[0].sp_text" value="" id="tag:0">  
<div><input type="hidden" name="SYS_pageParameter" value="..."></div></form>

Mit der Angabe eines nameencoding werden die Formularfeldnamen encodet. Aus einem mit sp:form definiertem Formular

<sp:form uri="test.php" nameencoding="hex">
  <sp:iterator collection="sp_list" min="1">
    <sp:text name="sp_text"/>
  </sp:iterator>
</sp:form>

wird folgender HTML-Code erzeugt:

<form action="/test.php" method="post" id="form:0"><div>...</div>  
    <input type="text" name="hex:73705f6c6973745b305d2e73705f74657874" value="" id="tag:0">
<div><input type="hidden" name="SYS_pageParameter" value="..."></div></form>

Dadurch wird verhindert, dass PHP die Formularfeldnamen modifiziert. Der weiter unten beschriebene RequestDispatcher.class.php bietet Methoden, mit denen über den originalen Formularfeldnamen auf die Parameter zugegriffen werden kann.

Zu lange Request-Parametern-Namen im Suhosin Patch

Wird PHP mit dem 'Suhosin Patch' betrieben, ist die Länge des Parameter-Namens beschränkt. Aufgrund des oben beschriebenen encodings der Parameternamen kann es jedoch zu sehr langen Parameternamen kommen.

Die aktuelle versendeten Beschränkungen können über

phpinfo();

ermittelt werden. Alle Filter-Optionen mit ihren Default-Werten können unter http://www.hardened-php.net/suhosin/configuration.html#filtering_options entnommen werden

Um dieses Problem zu lösen kann zunächst das Encoding mit dem sp:form die Parameter nameencoding, geändert werden. Verwenden sie das Encoding escff.

<sp:form ... nameencoding="escff">

Sollten die Parameternamen dennoch zu lang sein, muss die Filter-Optionen des Suhosin Patch erhöht werden.

RequestDispatcher.class.php

Die PHP-Klasse RequestDispatcher ist Teil der Sitepark phplib. Sie soll die Integrations von Live-SPML-Seiten in PHP-Seiten vereinfachen, kann aber auch ganz allgemein zur Weiterleitung von HTTP-Requests verwendet werden.

Bevor die Klasse verwendet werden kann, muss sie in die PHP-Seite geladen werden. Dies sollte wie folgt erfolgen:

require_once($_SERVER["DOCUMENT_ROOT"] . "/phplib/RequestDispatcher.class.php");

Um den Dispatcher zu nutzen, muss eine Instanz der Klasse erzeugt werden:

$dispatcher = new RequestDispatcher("www.domain.de");

Dem Konstruktor wird der Host, oder die IP-Adresse des Servers angegeben, an den der Request weitergeleitet werden soll. Wird kein Host angegeben, wird der Host mit Hilfe der Server-Variablen $_SERVER["HTTP_HOST"] ermittelt.

SPML-Seiten verwenden das Encoding UTF-8 und liefern die Zeichen in diesem Encoding zurück. Verwendet die PHP-Seite ein anderes Encoding, kann mit der Methode setEncoding() das entsprechende Encoding angegeben werden.

$dispatcher->setEncoding("ISO-8859-15");

Die Methode absorb() liest alle Request-Parameter, Request-Uploads, Cookies, Session-Parameter und Server-Variablen ein, um sie mit der dispatch()-Methode weiterzuleiten. Alternativ können z.B. auch nur Request-Parameter mit der Methode absorbRequestParameter() übernommen werden. Weitere Methoden sind absorbRequestUploads(), absorbSessionVariables(), absorbCookies() und absorbServerVariables(). Einzelnen Werte können mit setParameter(), setFile() und setCookie() gesetzt werden. Server- und Session-Variablen werden als HTTP-Parameter gesendet.

$dispatcher->absorb();

Die Methode dispatch() führt den Request aus. Bei dieser Methode wird der Pfad zu der Seite angegeben, an den der Request weitergeleitet werden soll. Die Methode liefert true zurück, wenn der Request erfolgreich weitergeleitet wurde, ansonsten den Wert false.

$success = $dispatcher->dispatch("/dir/file.spml");

Der Dispatcher reicht alle GET- und POST-Parameter der PHP-Seite weiter. Der Request, den der Dispatcher ausfürt ist immer POST. Weiterhin werden alle Session-Variablen ($_SESSION) und alle Server ($_SERVER) als Parameter mitgesendet. Cookies werden als Cookies weitergereicht.

Anschließend kann eine Fehlerbehandlung erfolgen oder z.B. der Response ausgegeben werden.

if ($success) {
  echo $dispatcher->getContent();
} else {
  echo "<b>FEHLER</b>: " . $dispatcher->getError() . "<br>";
}

Für die Ausgabe und Auswertung stehen folgende Methoden zur Verfügung:

getContent()
gibt den Inhalt der aufgerufenen Seite zurück
getStatusCode()
Liefert den HTTP-Status-Code des Response zurück (z.B. 200 für 'OK' oder 404 für 'not found')
getStatusMessage()
Liefert die HTTP-Status-Meldung des Response zurück (z.B. 'OK' oder '... not found')
getError()
Liefert eine Fehlerzeile aus HTTP-Status-Code und -Meldung zurück
getResonseHeaders()
Liefert ein Assoziatives Array, das die Response Header enthält
getResonseCookies()
Liefert ein Assoziatives Array, das die Cookies im Response enthält
getRequestURL()
Liefert die URL, an die der Request weitergeleitet wurde
getJSessionId()
Liefert vor dem dispatch()-Aufruf die JSESSIONID mit der der Request gesendet wird. Nach dem dispatch()-Aufruf wird die vom Request zurückgelieferte JSESSIONID ausgegeben.

Soll für mehrere Aufrufe von SPML-Seiten die gleiche Session verwendet werde, muss das dafür notwendige Cookie JSESSIONID vom Dispatcher an die aufrufende PHP-Seite weitergegeben werden. Ist dies erwünscht, ist das vor dem dispatch()-Aufruf mit der Methode setWriteCookies(true) einzuschalten.

Das Schreiben des Cookies vom Dispatcher ist standardmässig deaktiviert. Der Grund dafür ist, dass der Dispatcher das Cookie nur setzen kann, wenn noch keine Daten an den Client gesendet wurden (Cookies liegen im HTTP-Header). Soll der Dispatcher Cookies an den Client weiterreichen, muss die disptach()-Methode aufgerufen werden, bevor PHP Daten an den Client sendet (z.B. mit echo).

...
$dispatcher->setWriteCookies(true);
$success = $dispatcher->dispatch("/dir/file.spml");
...

Dadurch wird das Cookie JSESSIONID an den Browser weitergereicht. Mit dieser Methode kann die PHP-Seite nur eine Session für die SPML-Seiten definieren, da der Cookie-Name JSESSIONID vorgegeben ist. Möglicherweise kann es auch zu Konflikten kommen, wenn weitere PHP-Seiten eine andere Session verwenden wollen. Aus diesem Grund ist es möglich den Namen des Cookies zu ändern, der an den Browser gesendet werden soll. Mit folgendem Aufruf lässt sich der Cookie-Name ändern.

...
$dispatcher->setJSessionName("mySessionA");
$dispatcher->setWriteCookies(true);
$success = $dispatcher->dispatch("/dir/file.spml");
...

Auch die Namensänderung muss vor dem Aufruf der dispatch()-Methode erfolgen. Der Dispatcher sorgt nun dafür, dass zwar das Cookie JSESSIONID an die SPML-Seite gesendet wird, im Browser wird die SessionID allerdings in einem Cookie gehalten, dessen Name mit setJSessionName() angegeben werden kann.

Im Normalfall leitet der RequestDispatcher alle Request-Parameter mit der die PHP-Seite aufgerufen wurde an die angegebene URL weiter. Es können allerdings noch weitere Parameter und auch Upload-Dateien hinzugefügt werden. Diese können vor dem dispatch()-Aufruf mit folgender Methode gesetzt werden.

...
$dispatcher->setParameter("myparam", "abc"); // HTTP-Parameter hinzufügen
$dispatcher->setFile("myfile", "/tmp/image.jpg", "image/jpg"); // HTTP-Upload-Datei hinzufügen
$success = $dispatcher->dispatch("/dir/file.spml");
...

Wurden an die PHP-Seite Formulardaten eines mit sp:form erzeugten Formulars gesendet, ist wie oben beschrieben die Angabe eines nameencodings notwendig. Um dennoch über den originalen Fomularfeldnamen auf die Felder zugreifen zu können, ist es möglich das Encoding bei den Methoden setParameter(), addParameter(), removeParameter(), getParameter(), setFile(), addFile(), removeFile() und getFile() mit anzugeben.

...
$dispatcher->setParameter("myparam", "abc", "hex"); // HTTP-Parameter hinzufügen
$dispatcher->getParameter("test", "hex"); // liefert den HTTP-Parameter zurück
...

Zusammenfassend noch die Methoden, mit denen der Request gesteuert werden kann

setJSessionId(jsessionid)
Setzt die JSESSIONID die verwendet werden soll.
absorb()
Übernimmt alle Parameter und Variablen der PHP-Seite, um sie weiter zu senden.
absorbRequestParameter()
Übernimmt alle Request-Parameter der PHP-Seite, um sie weiter zu senden.
absorbRequestUploads()
Übernimmt alle Request-Uploads der PHP-Seite, um sie weiter zu senden.
absorbCookies()
Übernimmt alle Cookies der PHP-Seite, um sie weiter zu senden.
absorbSessionVariables()
Übernimmt alle Session-Variablen der PHP-Seite, um sie weiter zu senden.
absorbServerVariables()
Übernimmt alle Server-Variablen der PHP-Seite, um sie weiter zu senden.
dispatch(path, user, password)
Führt den Request mit den angegebenen Pfad aus. Optional kann noch ein User und ein Passwort für BASIC-Authentikation angegeben werden.
setParameter(name, value, encoding)
Setzt ein Parameter der zusätzlich noch mitgesendet werden soll. Existiert bereis ein Parameter mit dem Name wird dieser überschieben
Parameter
name Name des Parameters
value Wert des Parameters
encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll
addParameter(name, value, encoding)
Setzt ein Parameter der zusätzlich noch mitgesendet werden soll. Existiert bereis ein Parameter mit dem Name wird der neue Wert hinzugefügt. Aus dem value wird ein Array.
Parameter
name Name des Parameters
value Wert des Parameters
encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll
removeParameter(name, encoding)
Löscht einen Parameter und liefert den Wert des gelöschten Parameters zurück
Parameter
name Name des Parameters
encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll
getParameter(name, encoding)
Liefert den Wert eines Parameters
Parameter
name Name des Parameters
encoding(optional) Encoding, mit dem der angegebene Parametername encodet werden soll
setFile(name, file, mime, encoding)
Setzt eine Datei die zusätzlich noch mitgesendet werden soll. Existiert bereis eine Uploaddatei mit dem Feldnamen wird diese ersetzt.
Parameter
name Feldname unter dem die Datei mitgesendet werden soll.
file Absoluter oder relativer (zur PHP-Seite) Pfad der Datei
mime MIME-Type der Datei
encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll
addFile(name, file, mime, encoding)
Setzt eine Datei die zusätzlich noch mitgesendet werden soll. Existiert bereis eine Uploaddatei mit dem Feldnamen wird die Datei hinzugefügt.
Parameter
name Feldname unter dem die Datei mitgesendet werden soll.
file Absoluter oder relativer (zur PHP-Seite) Pfad der Datei
mime MIME-Type der Datei
encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
removeFile(name, encoding)
Sendet die Upload-Datei(en) mit dem angegebenen Feldnamen nicht mit und liefert die Datei in Form eines Arrays zurück. Das Array hat folgende Felder.
name
Feldname
type
MIME-Type
tmp_name
Pfad zur Datei
error
Fehlercode bei übernommenen Dateien
size
Dateigröße in Bytes
Parameter
name Feldname unter dem die Datei mitgesendet werden soll.
encoding (optional) Encoding, mit dem der angegebene Parametername encodet werden soll.
getFile(name, encoding)
Liefert die zu sendende Datei in Form eines Arrays. Das Array hat folgende Felder
Parameter
name Feldname
type MIME-Type
tmp_name Pfad zur Datei
error Fehlercode bei übernommenen Dateien
size Dateigröße in Bytes
setCookie(name, value)
Setzt ein Cookie das zusätzlich noch mitgesendet werden soll.
Parameter
name Name des Parameters
value Wert des Parameters
removeCookie(name)
Sendet das angegebene Cookie nicht mit und liefert den Wert des Cookies oder null, wenn des Cookie nicht existiert
Parameter
name Name des Parameters
getCookie(name)
Liefert den Wert des zu sendenden Cookies oder null, wenn des Cookie nicht existiert
Parameter
name Name des Parameters
setJSessionName(name);
Gibt einen Cookie-Namen an, unter dem die JSESSIONID im Browser gespeichert werden soll
Parameter
name Name des Cookies
setWriteCookies(writeCookie);
Gibt an, ob die Cookies des Response des weitergereichten Requests bis zum Browser durchgereicht werden sollen.
Parameter
writeCookie true, wenn die Cookies durchgereicht werden sollen.