Adventure,PHP,Framework,PageController,FrontController,Pattern,Objektorientierung,OO,Software,Design,Wiederverwendbarkeit,UML,Tutorial,Benchmark,ausgezeichnete Performance

Suche:    
Downloads  |  SVN!  |  Roadmap  |  Forum!  |  Bugtracking  |  Gästebuch  |  Backlinks!  |  Referenzen!  |  Sitemap  |  Impressum  
 
Deutsch | English Adventure PHP Framework  Bookmark @ Technorati Bookmark @ del.icio.us Bookmark @ Mr. Wong Bookmark @ Simpy Bookmark @ Google Bookmark @ Digg.com Adventure PHP Framework Seite 039-Mitgelieferte-Module drucken!

Mitgelieferte Module

Artikel bewerten:
Dieser Artikel wurde noch nicht bewertet. Bewerten Sie diesen Artikel als erstes!
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:
  • /apps/config/modules/socialbookmark/actions/sites/demosite/DEFAULT_actionconfig.ini
    Die Konfigurations-Datei DEFAULT_actionconfig.ini enthält die Action-Definition für die Action, die die Auslieferung der Bookmark-Bilder übernimmt. Diese liest die Bilder im Ordner /apps/modules/socialbookmark/pres/image aus uns stellt diese dar. Wichtig dabei ist, dass die Anwendung nur in FrontController-basierte Projekte eingebunden werden kann, da die Auslieferung der Bilder sonst nicht funktioniert.
    Die Datei bzw. der Ordner-Pfad unterhalb von /apps/config/modules/socialbookmark/ müssen ggf. umbenannt werden, wenn die Umgebungsvariable der Registry bzw. der Context der Applikation anders gesetzt ist.

  • /apps/config/modules/socialbookmark/sites/demosite/DEFAULT_bookmarkservices.ini
    Die Datei DEFAULT_bookmarkservices.ini enthält die Definition der Bookmark- Services. Pro Service muss ein eigener Abschnitt existieren, der nach dem in der Datei ersichtlichen Schema befüllt sein muss:
    [Mr. Wong]
    BookmarkService.BaseURL = "http://www.mister-wong.de/index.php?action=addurl"
    BookmarkService.Param.URL = "bm_url"
    BookmarkService.Param.Title = "bm_description"
    BookmarkService.Display.Title = "Bookmark @ Mr. Wong"
    BookmarkService.Display.Image = "bookmark_mister_wong"
    BookmarkService.Display.ImageExt = "png"
    Die Datei bzw. der Ordner-Pfad unterhalb von /apps/config/modules/socialbookmark/ müssen ggf. umbenannt werden, wenn die Umgebungsvariable der Registry bzw. der Context der Applikation anders gesetzt ist.
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&ouml;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.


Powered by WebRing.