Dokumentation REDAXO

R4 /

Community v2.x

Installation ohne Komplettpaket

Nach der Installation des AddOns über das Backend müssen die Tabellen derzeit noch manuell angelegt werden. Hierzu muss wie folgt vorgegangen werden

XForm -> Table Manager -> community user -> o Tabelle Aktuallisieren

(vorgang für community groups wiederholen)

Registrierung über xform

Man hat direkten Zugang und kann sich einloggen.

generate_key|activation_key

text|email|E-Mail:*|
text|firstname|Vorname
text|name|Nachname
hidden|status|1
password|password|Ihr persönliches Passwort:*|
password|password_2|Ihr persönliches Passwort bestätigen:*||no_db
captcha|Bitte geben Sie den entsprechenden Sicherheitscode ein|Falsche Eingabe des Codes

validate|email|email|Bitte geben Sie die E-Mail ein.
validate|unique|email|Diese E-Mail existiert schon|rex_com_user
validate|notEmpty|email|Bitte geben Sie Ihre e-Mail ein.
validate|notEmpty|password|Bitte geben Sie ein Passwort ein.
validate|compare|password|password_2|Bitte geben Sie zweimal das gleiche Passwort ein

action|copy_value|email|login
action|db|rex_com_user

wenn man die Registrierung erst bestätigen soll, muss folgendes ergänzt werden (und aus hidden|status|1 -> hidden|status|0 gemacht werden):

mailto|email
action|db2email|register_de|email

und ein xform email template erstellt werden mit diesem Link

###REX_SERVER###index.php?article_id=26&clang=0&uid=***ID***&activation_key=***activation_key***&email=***email***

dabei muss die artikel id auf einen neuen artikel verweisen, der die bestaetigung annimmt.. das passiert wieder durch ein xform formular mit folgenden eingaben:

hidden|status|1
objparams|Error-occured|Die Bestätigung ist leider fehlgeschlagen
objparams|Error-Code-EntryNotFound|Ihr Eintrag wurde nicht gefunden
objparams|submit_btn_show|0
objparams|send|1
validate|com_auth_login|id=uid,activation_key=activation_key,email=email|status=0|Ihre Daten sind falsch|
action|com_auth_db|update

Login über xform Formular

com_auth_form_info|label|Bitte einloggen|Benutzer wurde ausgeloggt|Login ist fehlgeschlagen|Benutze wurde erfolgreich eingeloggt|
com_auth_form_login|label|Benutzername / E-Mail:
com_auth_form_password|label|Passwort:
com_auth_form_stayactive|auth|eingeloggt bleiben:|0

Passwort vergessen über xform Formular

text|email|E-Mail-Adresse*|

captcha|Bitte geben Sie den entsprechenden Sicherheitscode ein. Sollten Sie den Code nicht lesen können klicken Sie bitte auf die Grafik, um einen neuen Code zu generieren.|Sie haben den Sicherheitscode falsch eingegeben. 

validate|notEmpty|email|Bitte geben Sie eine E-Mail ein
validate|existintable|email|rex_com_user|email|Diese E-Mail-Adresse ist nicht bei uns registriert.

action|readtable|rex_com_user|email|email
action|db2email|send_password_de|email

Profil (wenn eingeloggt) über xform Formular

com_auth_load_user|userinfo
objparams|form_showformafterupdate|1
showvalue|email|E-Mail / Login:
text|firstname|Vorname:
validate|empty|firstname|Bitte geben Sie Ihren Vornamen ein.
text|name|Nachname:
validate|empty|name|Bitte geben Sie Ihren Namen ein.
action|com_auth_db

checkbox|testbox|Testbox|1|1

Passwort ändern (wenn eingeloggt) über xform Formular

password|password|Neues Passwort:
password|password_2|Passwort wiederholen:||no_db
validate|empty|password|Bitte geben Sie ein Passwort ein.
validate|compare|password|password_2|Bitte geben Sie zweimal das gleiche Passwort ein
action|com_auth_db

Community v1.x

Dieser teil des Wikis ist für die v2.x nicht mehr gültig.

Inhalt

Allgemeine Verwendung
XForm und die Community
Registrierungsformular
Registrierungsbestätigung
Passwort vergessen Formular
Profildaten bearbeiten
Was soll passieren?
Daten zu beginn aus Datenbank holen
Die Where-Klausel
Bitte Tabelle angeben
Passwort ändern
Userfelder erweitern
Community-Variablen in Modulen/Templates verwenden
Daten des aktuellen Users in Modulen/Templates verwenden
Todos

Wissenswertes zum Community-Addon:

Download-Seite: http://www.redaxo.de/180-0-addon-details.html?addon_id=5
Achtung - noch nicht vollstaendig. Diese Bemerkungen beziehen aus das CommunityAddOn v1.4 fuer REDAXO 4.2.1. Ältere Informationen bitte in der Historie betrachten.


Allgemeine Verwendung

über das Setup lassen sich verschiedene Templates installieren, die bei der Verwendung helfen. Das sind nur Beispiele, die nach eigenen Wünschen noch angepasst werden können. Weitere Ansätze, z.B. für die Umsetzung der Registrierung, finden sich im Community Paket v1 RC3 und wurden hier noch nicht beschrieben.

Am besten erstmal alle 3 Templates installieren und in das eigene Template über REX_TEMPLATE[x] einbinden. Das Auth Template an den Anfang des eigenen Standardtemplates setzen, das Loginfenster an eine passende Stelle. Das Navigationstemplate veranschaulicht die Darstellungen von Userspezifischen Navigationspunkten.

Weiterhin hat das CommunityAddOn automatisch eine "MetaInfo" hinzugefügt, die über die Metadaten in den Artikeln einzusehen und zu ändern ist. Dort kann man über "Zugriffsrechte" definieren ob eine Seite nur für eingeloggte User zu sehen ist.

Bisher ist die Seite noch nicht geschützt, dass muss noch am eigenen Template selbst eingestellt werden und je nachdem was man machen möchte. Z.B. Könnte man anstatt des normalen Content eine Warnung ausgeben

<?php
if(rex_com_checkUserPerm($this->getValue("art_com_perm")))
{
  echo $this->getArticle();
}else
{
  echo 'Sie dürfen diesen Inhalt nicht sehen';
}
?>

oder aber auch eine Weiterleitung zum Startartikel (Bitte aufpassen, dass dieser nicht auch geschützt ist, sonst gibt es eine Endlosschleife)

<?php 
if(rex_com_checkUserPerm($this->getValue("art_com_perm"))) { 
echo $this->getArticle(); 
}else { 
header('Location:'.rex_getUrl($REX['START_ARTICLE_ID']));
} ?>

Anmerkung: Falls der Code dazu führt, dass die Berechtigung scheinbar nie vorhanden ist, sollte zunächst mittels $this->hasValue("art_com_perm") überprüft werden, ob überhaupt explizit Zugriffsrechte festgelegt wurden. Der Aufruf von $this->getValue() liefert sonst nämlich u.U. eine Fehlermeldung als String.

...

XForm und die Community

Wer das CommunityAddOn bereits installiert hat wird vielleicht zunächst etwas enttäuscht sein, denn auf den ersten Blick wirkt es so als könnte man damit ohne Aufwand wenig machen. So gibt es kaum mitgelieferte Formulare die jedoch dringent notwendig sind damit das CommunityAddOn überhaupt nutzbar ist.

Das lässt sich damit begründen, dass dadurch ein hohes Maß an flexibilität erlaubt wird. Über das Community AddOn können beliebige Benutzerfelder und über Module und weitere AddOns jede Funktion die man sich wünscht hinzugefügt werden. Um diese unterschiedlichen Möglichkeiten auch integrieren zu können bedarf es individueller Formulare die am besten jeder selbst erstellt. Man müsste diese nicht zwingend mit xForms realisieren es wird jedoch wärmstens empfohlen. So lassen sich Formulare deutlich schneller erstellen, denn der Aufwand mit Validierungslogik, SQL-Abfragen etc. entfällt fast komplett. Man benötigt zwar etwas Einarbeitung die sich aber lohnt.

Im Folgenden soll anhand einiger Beispiele gezeigt werden wie XForm und die Community zusammen arbeiten.

Registrierungsformular

Fangen wir mit der Registrierung an. Modul für die XForm ist installiert. Nun einen neuen Artikel anlegen. Dieser wird unser Artikel für Neuregistrierungen, und in die Formulardefinitionen folgendes einfügen:

generate_key|activation_key
hidden|status|0

fieldset|Login-Daten:
text|login|Benutzername:*|

password|password|Ihr persönliches Passwort:*|
password|password_2|Ihr persönliches Passwort bestätigen:*||no_db
text|email|E-Mail:*|
mailto|email

fieldset|Stammdaten:
select|gender|Anrede *|Frau=2;Herr=1|2
text|firstname|Vorname:*|
text|name|Nachname:*|

html|* Pflichtfelder

captcha|Bitte geben Sie den entsprechenden Sicherheitscode ein|Falsche Eingabe des Codes

objparams|submit_btn_show|0
submit||Abschicken|no_db

validate|notEmpty|firstname|Bitte geben Sie Ihren Vornamen ein.
validate|notEmpty|name|Bitte geben Sie Ihren Namen ein.
validate|email|email|Bitte geben Sie die E-Mail ein.
validate|unique|email|Diese E-Mail existiert schon|rex_com_user
validate|notEmpty|login|Bitte geben Sie Ihr Login ein.
validate|notEmpty|email|Bitte geben Sie Ihre E-Mail ein.
validate|unique|login|Dieses Login existiert schon|rex_com_user
validate|notEmpty|login|Bitte geben Sie Ihr Login ein.
validate|notEmpty|password|Bitte geben Sie ein Passwort ein.
validate|compare|password|password_2|Bitte geben Sie zweimal das gleiche Passwort ein

action|db|rex_com_user
action|db2email|register|email

und weiterhin in diesem Modul noch die tabelle "rex_com_user" auswählen.

Registrierungsbestätigung

Um die Registrierung zu bestätigen, muss ein separater Artikel angelegt werden (den am besten auch gleich im Community Setup als COM_PAGE_REGISTER_ACCEPT_ID verlinken). Dort liegt folgende XForm:

'''Beschreibung'''
hidden|status|1
objparams|Error-occured|Die Best&auml;tigung ist leider fehlgeschlagen
objparams|Error-Code-EntryNotFound|Ihr Eintrag wurde nicht gefunden
objparams|submit_btn_show|0
objparams|send|1
'''Dank'''
Vielen Dank f&uuml;r Ihre Registrierung. Ihr Zugang ist nun freigeschaltet. 
'''nur_speichern'''
'''nein'''
'''where-Klausel'''
<?php

$uid = rex_request("uid","int",0);
$activation_key = rex_request("activation_key","string","");
$login = rex_request("login","string","");
$mainwhere = 'id='.$uid.' AND activation_key="'.$activation_key.'" AND login="'.$login.'"';
$xform->setObjectparams("main_where",$mainwhere);

?>
'''tabelle''' 
rex_com_user

Passwort vergessen Formular

Um eine "Passwort vergessen" zu integrieren braucht man zunächst ein E-Mail Template in der XForm, über die dann die E-Mail mit dem Passwort verschickt wird und natürlich das Eingabeformular für die Anfrage.

In die Formularbeschreibung bitte folgendes:

text|login|Login:
captcha|Bitte geben Sie diese Buchstabenfolge hier ein:|Die Kontrollbuchstaben waren falsch
validate|notEmpty|login|Bitte geben Sie ein Login ein
validate|existintable|login|rex_com_user|login|Dieses Login existiert nicht.
action|readtable|rex_com_user|login|login
action|db2email|send_password|email

In die Where Klausel des XForm Moduls bitte folgendes:

<?php 
$xform->setObjectparams("main_where",'login="###login###"');
?>

Und dann noch die User-Tabelle auswählen

Im Prinzip wird hier gesagt, "Bitte Login eingeben", "Bitte Captcha eingeben", so dass kein Spamroboter so leicht etwas machen kann. Die anderen Felder wie validate.. fragen ab, ob eine Eingabe gemacht worden ist und ob das login überhaupt existiert. Die "actions" lesen dann alle Userdaten von diesem speziellen Login ein und versenden dann diese Infos über das E-Mail Template der XForm.

Hinweis: Es kann zu Problemen in Verbindung mit dem realUrl-Addon kommen. Dann im realUrl-Addon Bei den Einstellungen von Realurl -> Erweitert das Häkchen bei "Header senden" entfernen, dann gehen die $_POST-Daten nicht verloren.

Profildaten bearbeiten

Je nach dem wie das CommunityAddOn eingerichtet wurde verfügen User über mehr oder weniger Benutzerfelder. Deshalb ist es erforderlich das von xForms erzeugte Formular unbedingt an die eigene Installation anzupassen.

Bevor hier der xForm Syntax erklärt werden soll seien die Grundlegenden Einstellungen im xForms Modul erklärt.

Was soll passieren?

Hinter dieser Einstellung verbirgt sich, was xForm nach Absenden des Formulars mit den Daten eigentlich machen soll. Wir möchten nur die Profildaten ändern und wählen deshalb Nur in Datenbank Speichern.

Daten zu beginn aus Datenbank holen

Die Profildaten sollen (und müssen) natürlich bereits im Formular stehen wenn die Seite geladen wird, weshalb im xForms-Modul der Haken Daten zu beginn aus Datenbank holen zu setzen ist.

Die Where-Klausel

Die Where-Klausel ist der Teil die eine Bedingung festlegt. Da wir kein neuen Eintrag hinzufügen möchten, sondern ein bestehenden Eintrag in der Datenbank Aktualisieren wollen benötigen wir diese Klausel um zu definieren um welchen Eintrag es sich handelt: Nämlich um den des gerade angemeldeten Users.

Diese könnte wie folgt lauten:

<?php

$user_id = 0;
if (isset($REX["COM_USER"]) && is_object($REX["COM_USER"]))
{
  $user_id = $REX["COM_USER"]->getValue("id");
  $xform->setObjectparams("main_where","id=$user_id");
}

?>

Zunächst wird die Variable $user_id auf Null gesetzt, für den Fall, dass sie woanders im Workflow bereits mit einem anderen Wert definiert wäre. Anschließend überprüfen wir ob der Community-User auch wirklich eingeloggt ist (wirklich zwingend notwendig wäre das nicht) und schreiben in unsere Variable $user_id die ID des angemeldeten Users. Anschließend wird über die Funktion setObjectparms() der xForm Klasse die Bedingung id=$user_id gesetzt um den Datenbankeintrag auszuwählen.

Bitte Tabelle angeben

Hier wird die Datenbank-Tabelle ausgewählt in die wir schreiben möchten. In unserem Fall ist das die rex_com_user

Damit wird es zeit für das eigentliche Formular. Erwähnt sei hier, dass die Formularfelder die selbe Bezeichnung wie das zugehörige Datenbankfeld tragen muss - ansonsten kann xForm natürlich nicht wissen welches Formularfeld für welches Datenbankfeld steht.

objparams|form_showformafterupdate|1

text|login|Dein Nickname *||
text|firstname|Dein Vorname||
text|name|Dein Nachname ||
text|email|Dein eMail Adresse *||

objparams|submit_btn_show|0
submit||Speichern|no_db 

validate|notEmpty|nickname|Du musst einen Nickname wählen
validate|notEmpty|email|Du musst eine eMail Adresse angeben
validate|email|email|Du musst eine eMail Adresse angeben

action|html|<p>Dein Profil wurde übernommen</p> 

In der ersten Zeile wird festgelegt, dass das Formular nach Absenden erneut dargestellt wird - ist der Wert auf 0, so erscheint nur ein Bestätigungstext (letzte Zeile). Der Folgende Absatz enthält die Profilfelder (im Beispiel nur 4 Stück) Nickname und eMail sind normale Textfelder, Vorname und Nachname werden in diesem Beispiel zwar angezeigt sind aber nicht veränderbar.

Im Anschluss wird der Submitbutton zum Absenden des Formulars eingebunden.

Passwort ändern

password|password|Passwort
password|password_2|Passwort wiederholen||no_db
validate|notEmpty|password|Bitte geben Sie ein Passwort ein.
validate|compare|password|password_2|Bitte geben Sie zweimal das gleiche Passwort ein

Einstellungen:

Nur in Datenbank speichern

Tabelle auswählen

<?php
$xform->setObjectparams('form_show', false);
$user_id = 0;
if (isset($REX["COM_USER"]) && is_object($REX["COM_USER"]))
{
  $user_id = $REX["COM_USER"]->getValue("id");
}
if ($user_id > 0)
{
  $xform->setObjectparams('form_show', true);
  $where = 'id = "'.$user_id.'"';
  $xform->setObjectparams("main_where",$where); 
}else
{
  echo '<p class="error">Keine Berechtigung</p>';
}
?>

Frage vom Autor: Weshalb an dieser Stelle objparams|submit_btn_show|0 und no_db ?

In dem Folgenden Validierungs Absatz wird die Vollständigkeit und Gültigkeit der Angaben überprüft. In diesem Beispiel wird jedoch nicht überprüft ob ein Nickname bereits vorhanden ist.

Zum Abschluss wird noch eine Bestätigungsmeldung bei Erfolg ausgegeben.

Userfelder erweitern

Folgende Optionen stehen zur Auswahl, um die Userfelder zu erweitern:

  • Prior - Die Sortierung im Backend in der Userfelder-Verwaltung
  • Bezeichnung
  • Datenbankbezeichnung - Der Feldname in der Datenbank, mit dem später auch die Daten abgefragt und gespeichert werden.
  • Typ - Zusätzlich zu den üblichen Typen gibt es eine SQL-Auswahl
  • extra1 - Ergänzungen zum gewählten Datentyp, zB bei "SELECT" die Werte für die Dropdownbox
  • Erscheint in Userliste - Wird im Backend in der Userverwaltung angezeigt
  • Editierbar
  • Pflichtfeld - Muss angegeben werden, sinnvoll bei Feldern, die zwingend vorhanden sein müssen, wie etwa email oder login
  • Unique
  • Defaultwert - Wird automatisch in die Tabelle eingetragen, wenn nichts anderes angegeben wurde

Community-Variablen in Modulen/Templates verwenden

Im Setup können Variablen für die Community-Artikel vordefiniert werden. Diese können abgefragt werden, um etwa eine URL zu generieren wie in folgendem Beispiel: rex_getUrl($REX["ADDON"]["COMMUNITY_VARS"]["COM_PAGE_LOGIN_ID"]);

Die Variablen im Setup haben dabei folgende Bedeutung:

  • COM_PAGE_LOGIN_ID - Seite, die nach den Login angezeigt werden soll
  • COM_PAGE_LOGOUT_ID - Seite, die nach den Logout angezeigt werden soll
  • COM_PAGE_MYPROFIL_ID
  • COM_PAGE_PSWFORGOTTEN_ID
  • COM_PAGE_REGISTER_ACCEPT_ID - Die Bestätigungsseite für die Registrierung, siehe auch oben unter "Registrierungsbestätigung"

Daten des aktuellen Users in Modulen/Templates verwenden

Der aktuell eingeloggte User befindet sich in der Variablen $REX['COM_USER'] und kann wie folgt abgefragt werden:

if (isset($REX['COM_USER']) && is_object($REX['COM_USER'])) 
{
$REX['COM_USER']->getValue('name');
}

Statt 'name" sind analog auch alle anderen Datenbankfelder abfragbar, die im Community Addon unter "User Felder erweitern" eingetragen sind.

Todos:

  • Erklärung wie man eine Profilseite erstellt
  • Login-Formular
  • Prinzip von E-Mail Benachrichtigungen über die XForm
  • Was sind PlugIns, wie erweitert man das Community AddOn
  • Captchas
  • Prinzip von Registrierungsmails und Bestätigungen
Page last modified on April 11, 2012, at 10:06 AM