Quicknavi |
|
Mitgelieferte Module
Das Adventure-PHP-Framework verfügt über einige, bereits bei der Auslieferung enthaltene
Module, die auf Basis der Core-Komponenten basiertend entwickelt wurden. Die Module stammen vor allem
aus Anwendungen, die in Applikationen live eingesetzt werden und dem Release als Zugabe mitgegeben
werden um die Entwicklung von Webseiten oder weiteren Anwendungen zu erleichtern, bzw. um weitere
Code-Beispiele zu geben. Zu den verfügbaren Modulen zählen:
- Kommentar-Funktion
- Kontaktformular
- Gästebuch
- Pager
- Socialbookmarking
- CAPTCHA-Taglib für Formulare
1. Kommentar-Funktion
Das Modul "Kommentar-Funktion" bietet ein voll funktionsfähiges Kommentar-Modul für Webseiten,
das lediglich über einen XML-Tag in die Seite eingebunden und konfiguriert werden muss.
<core:importdesign
namespace="modules::comments::pres::templates"
template="comment"
categorykey="{CAT_KEY}"
/>
Der Wert "{CAT_KEY}" ist dabei lediglich auf den Wert der aktuellen Kategorie zu ändern.
Eine ausführliche Beschreibung zur Benutztung und zur Implementierung findet sich im Bereich
Tutorials unter Kommentar-Funktion.
2. Kontaktformular
Eine sehr häufige Anwendung auf einer Webseite ist ein Kontaktformular. Das Modul "Kontaktformular"
bietet hier eine fertige und konfigurierbare Lösung an, die nur noch verwendet werden muss. Das
Formular kann auf einer dafür vorgesehenen Seite mit
<core:importdesign
namespace="modules::kontakt4::pres::templates"
template="kontakt"
/>
eingebunden werden. Eine ausführliche Beschreibung zur Benutztung und zur Implementierung findet sich
im Bereich Tutorials unter
Kontakt-Formular.
3. Gästebuch
Ähnlich wie die "Kommentar-Funktion" ist auch das Gästebuch-Modul ein out-of-the-box Modul,
das nach einem Datenbank-Setup eingesetzt werden kann. Da Anwendungen im Adventure-PHP-Framework per
XML-Tag in eine bestehende Seite eingebunden werden, kann das Gästebuch auf der gewünschten
Seite mit einem
<core:importdesign
namespace="modules::guestbook::pres::templates"
template="guestbook"
guestbookid="{GB_ID}"
/>
aktiviert werden. Der Wert "{GB_ID}" muss dabei auf die ID des anzuzeigenden Gästebuchs
gesetzt werden. Eine ausführliche Beschreibung zur Benutztung und zur Implementierung findet sich
im Bereich Tutorials unter
Gästebuch.
4. Pager
Der Pager ist eine Komponente, die zur Ausgabe-Steuerung von Datenbank-Einträgen verwendet werden
kann. Diese findet bereits in den oben genannten Modulen Kommentar-Funktion und Gästebuch
Anwendung. An dieser Stelle sei trotzdem der Aufbau des Moduls und die Verwendung näher erläutert.
4.1. Aufbau
Der Pager besteht im wesentlichen aus einer Business-Komponente (pagerManager), der
Ausgabe-Komponente für die Pager-HTML-Darstellung (DocumentController
pager_2_v1_controller.php) und einer Daten-Schicht, die die für den Betrieb des
Managers notwendigen Informationen aus der Datenbank liest. Um einen Pager verwenden zu können
muss dieser zunächst initialisiert und mit den richtigen Parametern versorgt werden. Diese Arbeit
wird durch die pagerManagerFabric erledigt.
4.2. Konfiguration
Um den PagerManager zum Laden der für eine Seite relevanten Einträge nutzen zu können,
muss dieser zunächst konfiguriert werden. Dazu sind im Wesentlichen eine Konfigurationsdatei und
zwei Statementment-Dateien notwenig. Die Konfigurationsdatei umfasst folgende Parameter:
[<Abschnittsname>]
Pager.EntriesPerPage = "<Anzahl>"
Pager.ParameterStartName = "<URL-Parameter>"
Pager.ParameterCountName = "<URL-Parameter>"
Pager.StatementNamespace = "<Statement-Namespace>"
Pager.CountStatement = "<Load-Entries-Count-Statement>"
Pager.CountStatement.Params = "<Statement-Parameter>"
Pager.EntriesStatement = "<Statement-Parameter>"
Pager.EntriesStatement.Params = "<Load-Entry-Statement>"
Pager.DesignNamespace = "<Ausgabe-Template-Namespace>"
Pager.DesignTemplate = "<Ausgabe-Template-Name>"
In den beiden Statements werden jeweils definierte Statement-Parameter erwartet, damit der Pager
arbeiten kann. Innerhalb des Load-Entries-Count-Statements können beliebiger Parameter
eingesetzt werden um das Ergebnis einzuschränken. Diese müssen aber entweder in der
Konfiguration unter Pager.CountStatement.Params oder beim Erzeugen des Pagers
übergeben werden. Das Ergebnis wird im Offset EntriesCount erwartet. Hier muss
also per
SELECT COUNT(Spalte) AS EntriesCount ...
gearbeitet werden. Im Load-Entry-Statement muss immer eine LIMIT-Klausel der Form
LIMIT [Start],[EntriesCount]
aufgeführt sein. Weiterhin erwartet der Pager auch hier das Ergebnis (ID des Datensatzes) in
einem Offset DB_ID. Auch hier muss mit einem Alias der Form
SELECT Spalte AS DB_ID ...
gearbeitet werden. Weitere Parameter müssen auch hier entweder in der Konfiguration unter
Pager.EntriesStatement.Params oder beim Erzeugen des Pagers übergeben werden.
4.3. Anwendungsbeispiel
Ein ausführliches Anwendungsbeispiele findet sich unter
Kommentar-Funktion im Kapitel
4.3. Dabei wird die API des PagerManagers wie folgt verwendet:
Laden der anzuzeigenden IDs:
// pagerManager holen $pMF = &$this->__getServiceObject('modules::pager::biz','pagerManagerFabric'); $pM = &$pMF->getPagerManager('{CONFIG_SECTION}',array('AddParams' => 'Value'));
// IDs laden $IDs = $pM->loadEntries();
// Daten laden $M = &$this->__getServiceObject('namespace::to::data::component','DataMapper');
$List = array();
for($i = 0; $i < count($IDs); $i++){ $List[] = $M->loadDomainObjectByID($IDs[$i]); // end for }
Laden der Business-Objekte mit dem pagerManager:
// pagerManager holen $pMF = &$this->__getServiceObject('modules::pager::biz','pagerManagerFabric'); $pM = &$pMF->getPagerManager('{CONFIG_SECTION}',array('AddParams' => 'Value'));
// Daten laden $M = &$this->__getServiceObject('namespace::to::data::component','DataMapper'); $List = $pM->loadEntriesByAppDataComponent($M,'loadDomainObjectByID');
5. Socialbookmarking
Unter das Schlagwort Web 2.0 fallen vor allem Funktionen, die eine Benutzer-Interaktion
mit einer Webseite verbessern. Zu diesem Bereich gehört auch das "Socialbookmarking", das auf
Seiten wie http://del.icio.us/, http://www.mister-wong.de/ oder
http://www.technorati.com/ als Internet-Service angeboten wird. Um es einem Benutzer zu
erleichtern eine Seite zu bei den genannten Services zu bookmarken wurde das Modul erstellt. Dieses
erzeugt beispielsweise die oben neben dem Druck-Symbol angezeigten Bookmark-Symbole.
5.1. Konfiguration
Um das Modul mit der mit dem Release ausgelieferten Demo-Seite einsetzen zu können ist
zunächst keine Konfiguration notwenig. Möchte der Entwickler das Modul in seine Webseite
einbinden zu können müssen zwei Konfigurations-Dateien übernommen werden:
Weitere Konfigurationen sind nicht notwendig.
5.2. Anwendung
Um die konfigurierten Bookmarkservices anzeigen zu können gibt es zwei Möglichkeiten:
Verwendung des socialBookmarkManagers oder der TagLib. Der socialBookmarkManager
muss dabei als Service-Objekt erzeugt werden.
// // Bookmark-Manager holen // $sBM = &$this->__getServiceObject('modules::socialbookmark::biz','socialBookmarkManager');
// // Parameter konfigurieren (optional) // $sBM->set('Width','20'); // Breite der Bookmark-Icons $sBM->set('Height','20'); // Höhe der Bookmark-Icons $sBM->set('URL','http://www.example.com'); // URL der zum Bookmarking angebotenen Seite $sBM->set('Title','Titel der Seite'); // Titel der zum Bookmarking angebotenen Seite $sBM->set('Target','_blank'); // Ziel-Fenster der Bookmarking-Links
// // Bookmark-Quelltext erzeugen // $BookmarkServices = $sBM->getBookmarkCode();
Die einfachere Anwendung ist die Verwendung des Tags. Dieser kann mit den Attributen width
und height parametrisiert werden. Vor der Anwendung muss die TagLib per
<core:addtaglib /> eingebunden werden:
<core:addtaglib namespace="modules::socialbookmark::pres::taglib" prefix="social" class="bookmark" />
<social:bookmark [width=""] [height=""] [url=""] [title=""] [target=""] />
6. CAPTCHA-Taglib für Formulare
Mit dem Modul captcha ist es dem Entwickler möglich, auf einfache Weise ein
Formular mit einem (Bild-)CAPTCHA zu schützen. Hierzu muss die im Modul enthaltene TagLib
lediglich in ein Formular eingefügt und eine FrontController-Konfiguration für die
Auslieferung des Bildes erstellt werden. Die Implementierung zeigt zudem, wie die bestehenden
Formular-TagLibs mit Hilfe des <form:addtaglib />-Tags einfach erweitert
werden können.
Die folgenden Kapitel beschreiben, welche Vorarbeiten für den Einsatz der TagLib notwendig sind.
6.1. Konfiguration der FrontController-Action
Da die Auslieferung des CAPTCHA-Bildes über eine FrontController-Action stattfindet, ist es
beim eingesetzten Projekt notwendig, die Auslieferung der Seite über den FrontController zu
steuern. Sollte die Generierung bisher nur mit Hilfe des PageControllers passiert sein, so muss
zunächst die Bootstrapdatei angepasst werden. Beinhaltet die index.php die Zeilen
include_once('./apps/core/pagecontroller/pagecontroller.php'); $Page = new Page('apfdemo'); $Page->loadDesign('sites::demosite','pres/templates/website'); echo $Page->transform();
so müssen diese zu
include_once('./apps/core/pagecontroller/pagecontroller.php'); import('core::frontcontroller','Frontcontroller'); $fC = &Singleton::getInstance('Frontcontroller'); $fC->set('Context','sites::demosite'); $fC->start('sites::demosite::pres::templates','website');
angepasst werden. Die Werte für den Context der Applikation, den Pfad und Namen des initialen
Templates müssen entsprechend den Werten des jeweiligen Projektes angepasst werden.
Sobald diese Anpassung wirksam ist, muss die zur Auslieferung des CAPTCHA-Bildes verwendete
FrontController-Action konfiguriert werden. Dazu erwartet der FrontController bei Aufruf der URL
/?modules_captcha_biz-action:showCaptcha=name:...
oder im Fall von aktivem URL-Rewriting
/~/modules_captcha_biz-action/showCaptcha/name/...
(Auszug aus dem Quellcode der Implementierung der Taglib) unter dem Namespace
/config/modules/captcha/biz/<CONTEXT>/<Environment>_actionconfig.ini
die Konfiguration der Action. Die Werte Context und Environment
sind dabei durch die für das Projekt gültigen Werte zu ersetzen. Siehe hierzu auch
Grundlagen, Kapitel 3.3 bzw.
Konfiguration, Kapitel 2.
Der Inhalt der Action-Konfigurationsdatei kann aus der Vorlage
/config/modules/captcha/biz/actions/EXAMPLE_actionconfig.ini des
adventure-configpack-*-Releases entnommen werden.
6.2. Einbindung des Tags
Um den Tag verwenden zu können, muss dieser innerhalb eines Formulares zunächst bekannt
gemacht werden. Dies funktioniert mit Hilfe des <form:addtaglib />-Tags,
der sich analog zum <core:addtaglib />-Tag verhält. Anschließend
ist das Tag innerhalb des gewünschten Formulars verfügbar. Die folgende Code-Box zeigt
einen Anwendungsfall, der die wichtigsten Attribute des Tags beinhaltet:
<html:form name="MeinFormular" action="post">
...
<form:addtaglib namespace="modules::captcha::pres::taglib" prefix="form" class="captcha" />
<form:captcha
text_class="eingabe_feld"
text_style="width: 318px;"
validate="true"
button="ErzeugeGaestebuchEintragButton"
clearonerror="true"
/>
...
</html:form>
In der Ausgabe des Formulars erzeugt das Tag ein CAPTCHA-Bild und ein Textfeld, das vom Benutzer zur
Eingabe des gezeigten Strings verwendet werden muss. Die folgende Liste gibt eine Übersicht
über die verfügbaren Attribute und deren Bedeutung:
- image_style: CSS-Stil-Angaben zum CAPTCHA-Bild
- image_class: CSS-Klassen-Angaben zum CAPTCHA-Bild
- text_style: CSS-Stil-Angaben zum generierten Text-Feld
- text_class: CSS-Klassen-Angaben zum generierten Text-Feld
- validate: Aktiviert die Validierung
- button: Name des Buttons, auf dessen Klick die Validierung stattfinden soll
-
clearonerror: Das optionale Attribut definiert, ob das Feld bei falscher Eingabe
geleert werden soll. Enthält das Attribut einen anderen Wert als "true" oder ist nicht
vorhanden, wird das Feld weiterhin vorausgefüllt.
6.3. Funktion des Tags
Durch die direkte Integration des CAPTCHA-Tags in das Formular kann der Tag direkten Einfluss auf die
Validierung des Formulars nehmen. Wurde das CAPTCHA-Feld richtig ausgefüllt und sind alle
übrigen Felder des Formulars valide, wird auch das Formular als Valide gekennzeichnet. Ist das
CAPTCHA-Feld nicht korrekt ausgefüllt, kann das Formular nicht abgesendet werden. Wichtig dabei
ist, dass das Formular im Controller sowohl auf isSent als auch isValid
geprüft wird. Zur Sicherheit wird bei jedem Aufruf des Formulars das CAPTCHA-Bild neu generiert.
Kommentare
Möchten Sie den Artikel eine Anmerkung hinzufügen, oder haben Sie ergänzende Hinweise? Dann können Sie diese hier einfügen. Die bereits verfassten Anmerkungen und Kommentare finden Sie in der untenstehenden Liste.
Für diesen Artikel liegen aktuell keine Kommentare vor.
|