Archiv

TechInfo

Einrichtung der Personalisierung

By Sascha Wadenpohl

Das Personalisierungs Modul muss nicht seperat freigeschaltet werden. Man benötigt eigentlich nur 2 Settings.

CPM_DefaultSettings
Dieses Settingsdokument beschreibt die Default Daten die für den Webnutzer über die System Tags {~$PP_KnotennameImSettings/Profildokument~} genutzt werden können. Es wird, wenn es schon ein Profildokument gibt, im jeweiligen Profildokument nach diesem Knoten geschaut und der entsprechende Wert eingesetzt. Wenn kein Profildokument existiert, wird der Wert aus dem Default Settingsdokument eingetragen. Vorsicht mit der Groß -und Kleinschreibung.

CPM_GeneralSettings
Dazu einfach die Beschreibung von René aus der Support Datenbank.
<?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE generalsettings>
<generalsettings>
<server></server>
<database></database>
<personview></personview>
<groupview></groupview>
<authoritem></authoritem>
<profileform></profileform>
<compute_before_save>0</compute_before_save>
<profileitem></profileitem>
<profileitemname></profileitemname>
<defaultprofile>CPM_DefaultSettings</defaultprofile>
</generalsettings>
<profileupdate>
<errorpages>
<errorpage>CPMError</errorpage>
<errorpage language='DE'>DE_CPMError</errorpage>
<errorpages>
<messages>
<update_successful>Profile has been updated</update_successful>
<update_successful language='DE'>Profil wurde aktualisiert</update_successful>
<update_successful language='EN'>Profile has been updated</update_successful>
<update_error>Error while updating profile</update_error>
<update_error language='DE'>Fehler beim Update des Profils</update_error>
<update_error language='EN'>Error while updating profile</update_error>
</messages>
</profileupdate>



Paramter:

generalsettings
serverServer auf dem sich die DB befindet, welche die Profile beinhaltetleer = aktueller Server
databaseDB, welche die Profile beinhaltetleer = aktuelle DB
personviewView, die zum LookUp auf Profile benutzt wirdleer = db.search
groupview???
authoritemName des Items, welches die Autoren für das Profiledokument beinhaltetleer = Kein Autor, sollte IMMER gesetzt sein
profileformName des Forms, welches die Profilitems beinhaltetleer = "Person"
compute_before_saveFlag ob ein "compute with form" vor dem Speichern durchgeführt werden soll0 = nein, 1 = ja
profileitemName des RTF Items, welches das XML beinhaltetleer = "ProfileSetting"
profileitemnameName des Items, welches den Namen der Person beinhaltetleer = "ProfileName"
defaultprofileName des Settings, welche die default values beinhaltetleer = "CPM_ProfileDefault"
profileupdate
errorpages
errorpagePageid der allgemeinen Seite, die aufgerufen werden soll, wenn der Updateagent auf einen Fehler läuft, KEINE Sprache übergeben wurde bzw die übergebene Sprache nicht gefunden werden konnte, und EIN "redirectto"-Parameter übergeben wurde
language="XY"s.o. + wenn Sprache übergeben und gefunden werden konnte
messages
update_successfulAllgemeiner Rückgabetext des Agenten, wenn KEINE Sprache übergeben wurde bzw, die übergebene Sprache nicht gefunden werden konnte, und KEIN "redirectto"-Parameter übergeben wurde und der Agent OHNE Fehler durchläuft
language="XY"s.o. + wenn Sprache übergeben und gefunden werden konnte
update_errorAllgemeiner Rückgabetext des Agenten, wenn KEINE Sprache übergeben wurde bzw, die übergebene Sprache nicht gefunden werden konnte, und KEIN "redirectto"-Parameter übergeben wurde und der Agent auf einen Fehler läuft
language="XY"s.o. + wenn Sprache übergeben und gefunden werden konnte
XML-Struktur:
Die XML Struktur muss so einfach wie möglich gehaltet werden.
Da aus Perfomance Gründen das Ersetzten mit Textoperationen erfolgt und ein Suchen ebenfalls schnellsmöglich Erfolgen soll, werden keine Attribute der XML Knoten berücksichtigt.

Innerhalb eines Knotens werden Mehrfachwerte mit ";" getrennt.
Werte mit Alias können mit einem gängigen Trenner wie "|" oder "~" getrennt werden. (KEIN "#")

Beispiel:
<news>
<categories>DE_TIMETOACT;DE_XIntegrate</categories>
</news>

bzw.

<news>
<categories>TimeToAct|DE_TIMETOACT;X-Integrate|DE_XINTEGRATE</categories>
</news>


Updateagent:
Der Agent zum Update der Profile heisst CPM_SetProfile.
Er kann sowohl per GET als auch per POST aufgerufen werden.

Es können 2 Systemparamter übergeben werden:
1. &redirectTo=
2. &l=

zu 1.) Es handelt sich um die Pageid der Seite, auf die Weitergeleitet werden soll, wenn der Agent ohne Fehler durchläuft
zu 2.) Es handelt sich um die Sprache, in deren Kontext das Update durchgeführt werden soll (Relevant für Rückgabetexte)

Wird kein redirectTo übergeben, liefert der Agent eine XML Struktur mit gültigen Header zurück, in der ein Rückgabecode und ein Rückgabetext vorhanden sind.

<?xml version="1.0" encoding="UTF-8" ?>
<root>
<returncode>1</returncode>
<returnmessage>Profile has been updated</returnmessage>
</root>

returncode 1 = Update erfolgreich
returncode 0 = Update nicht erfolgreich


Alle weiteren Parameter werden als XML Knoten interpretiert.
Es können beliebig viele (Ausnahmen 32k bei POST Daten bzw. Query_String begrenzung bei GET) Knoten übergeben werden.

Beispiel XML:
<fontsize>3</fontsize>
<news>
<categories>TimeToAct|DE_TIMETOACT;X-Integrate|DE_XINTEGRATE</categories>
</news>

Beispielaufruf:
?openAgent&fontsize=2&news/categories=DE_Homepage&neuerknoten=wert

Ergebniss:
<neuerknoten>wert</neuerknoten>
<fontsize>2</fontsize>
<news>
<categories>DE_Hompage</categories>
</news>

Anhand dieses Beispiels wird deutlich:
1. Nicht gefundene Paramter werden vor das bestehene XML eingefügt
2. Werte werden immer komplett überschrieben und nicht angehangen.

Besonderheit Mehrfachwerte:
Mehrfachwerte können auf 3 unterschiedliche Arten übergeben werden:
(Die Aufrufe sollten natürlich in einem URL sicherem Format erfolgen)

1. ?openAgent&news/categories=DE_HomePage;DE_TIMETOACT;DE_XIntegrate
2. ?openAgent&news/categories=DE_HomePage&news/categories=DE_TIMETOACT&news/categories=DE_XIntegrate
3. ?openAgent&news/categories_#1=DE_HomePage&news/categories_#2=DE_TIMETOACT&news/categories_#3=DE_XIntegrate

Alle aufgeführten Aufrufe führen in diesem Fall zum gleichen Ergebniss.

zu 1.) Der Agent merkt nicht das es sich um einen Mehrfachwert handelt, schreibt den/die übergebenen Wert(e) aber trotzdem korrekt
zu 2.) Der Agent merkt das es sich um einen Mehrfachwert handelt und schreibt die Werte in der Reihenfolge wie sie übergeben wurden (von links nach rechts)
zu 3.) Der Agent merkt das es sich um einen Mehrfachwert handelt und schreibt die Werte in der Reihenfolge des übgerbenen Index (der Zahl nach "_#")

Einen Kommentar erstellen