Bei "schlechter" Bewertung wäre ein Kommentar nett was ich verbessern könnte. THX
Ich kann jedem nur empfehlen seine eigene Arbeit zu Dokumentieren den mir ist ein keiner aber unschöner Fehler aufgefallen.
Das HowTo wurde aus meinen Erfahrungen mit 4.6.23 erstellt. Sollte aber auch mit 4.6.15 -> 4.8.x funktionieren da es hier keine Änderungen gab.
Das Ziel von Front-End-User-Plugins ist es die FEU-Daten update fähig zu ergänzen.
Hier für müssen die entsprechenden Plugins lediglich in das entsprechende FEU-Verzeichnis im Pluginordner abgelegt werden.
Verzeichnis-Pfad: htdocs/contenido/plugins/frontendusers/
Wichtig: Jedes Plugin reduziert die Geschwindigkeit des Backend. Aus diesem Grund werden nur alle 60 sec. nach neuen Plugins gescannt. Ein Plugin ist so Strukturiert das mehrere Wert/Eingaben über ein und dasselbe Plugin verarbeitet werden können. So muss man für eine vollständige Postanschrift nicht je ein Plugin für Name, Straße, PLZ und Ort anlegen sondern nur eins.
Initialisierung:
Initialisiert werden die Plugins durch die folgenden Codezeilen der "config.plugin.php" im Unterverzeichnis "includes/".
Code: Alles auswählen
<?php
// Pfad: htdocs/contenido/plugins/frontendusers/includes/config.plugin.php
cInclude("includes", "functions.general.php");
scanPlugins("frontendusers");
?>
FEU-Plugins
Als erstes sollte ein prägnanten und kurzen PluginName definiert werden. Hier bei sollte beachtet werden das dieser Name in Verzeichnis-, Datei- und Funktions-Namen verwendet wird. Es wird nicht direkt im Backend angezeigt.
Strukturübersicht:
Damit Contenido alle benötigten Dateien Findet ist eine gewisse Grundstruktur nötig.
Code: Alles auswählen
- myplugin/
- locale/
- de_DE/
- LC_MESSAGES/
- frontendusers_myplugin.po
- en_EN/
- LC_MESSAGES/
- frontendusers_myplugin.po
- myplugin.php
Auf das Übersetzen von PO-Datein werde ich hier nicht eingehen. Nur das in Plugins mit der Funktion i18n( $string, $domain ) übersetz wird.
$string ist der zu übersetzende Text und $domain der Pfad der Übersetzungsdatei bestehend aus PluginTyp + "_" + PluginName.
Beispiel: echo i18n( "Hallo Word!", "frontendusers_myplugin" );
Am Ende ein Beispiel einer PO-Datei.
Funktionsübersicht:
Jede Funktion beginnt mit "frontendusers_" + PluginName + Funktionsname.
Code: Alles auswählen
1. _getTitle()
gibt den Titel des Plugin zurück
2. _wantedVariables()
gibt die verwendeten VariablenNamen zurück
3. _store()
speicher die Daten
4. _getvalue()
gibt den passenden Wert zu einem bestimmten VariablenNamen zurück
5. _canonicalVariables()
Gibt die Titel/realen Namen einer Variable zurück
6. _display()
Ausgabe der Eingabmaske für das Backend
Mit dieser Funktion wird lediglich der Name des Plugin zurück gegeben und wird in der linken Spalte der Userdetails angezeigt. So kann man und sollte man auch einen allgemein gültigen (englischen) Namen über die PO-Datei übersetzen.
Beispiel:
Code: Alles auswählen
function frontendusers_myplugin_getTitle() {
return i18n("MyPluginTitle", "frontendusers_myplugin");
}
Funktion: frontendusers_myplugin_wantedVariables()
Dies ist eine der wichtigsten Funktionen überhaupt. Sie definiert die Variablennamen die verwendet werden. Ein absolut eindeutiger Name ist die Grundvoraussetzung für das Funktionieren. Das kann man mit dem folgenden Schema sicherstellen:
"feup_" + PluginName + "_" + Variablenname
Damit, wie schon angesprochen, mehrere Werte gespeichert werden können müssen auch mehrere Variablennamen definiert werden können. Diese Namen werden durch die Funktion als Array zurück gegeben.
Beispiel:
Code: Alles auswählen
function frontendusers_myplugin_wantedVariables() {
// gibt die Variablen var1, var2 & var3 im Schema als Array zurück
return array( 'feup_myplugin_var1', 'feup_myplugin_var2', 'feup_myplugin_var3' );
}
Mit store() werden die Daten gespeichert. Damit alle Daten gleichzeitig an die Funktion übertragen werden können werden diese als Array Übergeben. Hier bei ist der Array-Key gleich dem Variablenname und der Array-Wert die BE-Eingabe.
Für das einfache Speichern kann man das Objekt $feuser in der Funktion globalisieren und dann nutzen.
Beispiel:
Code: Alles auswählen
function frontendusers_myplugin_store( $aValues )
{
global $feuser;
foreach( $aValues as $sValName => $sValString ) {
$feuser->setProperty( "frontendusers", $sValName, $sValString );
}
}
So simpel das Speichern der Daten ist, so simpel ist das holen. Als Parameter wird hier in $sName der in _wantedVariables() definiere Varaiblenname übergeben. In dieser Funktion wird diesmal kein Array übergeben sondern nur ein Name.
Beispiel:
Code: Alles auswählen
function frontendusers_myplugin_getvalue( $sName )
{
global $feuser;
return $feuser->getProperty( "frontendusers", $sName );
}
Funktion: frontendusers_myplugin_canonicalVariables( $sName )
Damit die Usability im Backend gewährleistet werden kann, können den Variablennamen ein sprachspezifischer Titel zuweisen. Das hat den Vorteil das bei den Anzeigeoptionen im Backend im Feld "Suche in" ein Aussagekräftiger Titel steht und nicht unser Variablenname.
Zurück gegeben wird von der Funktion ein Array in den der Array-Key der Variablenname und als Wert der Titel. Der Titel sollte mit der i18n()_Funktion übersetzt werden.
Beispiel:
Code: Alles auswählen
function frontendusers_myplugin_canonicalVariables()
{
$return = array();
$aVariables = frontendusers_myplugin_wantedVariables();
foreach( $aVariables as $sName ) {
$return[ $sName ] = i18n( $sName, "frontendusers_myplugin" );
}
return $return;
}
So wie im Modul-Input kann man die Eingabemaske ausgestalten. Hier ein einfaches Beispiel um die Maske als Tabelle auszugeben mit den von diesem Plugin bereitgestellten Funktionen.
Beispiel:
Code: Alles auswählen
function frontendusers_myplugin_display()
{
cInclude("classes", "class.htmlelements.php");
$return = '<table width="100%" border="0" cellspacing="0" cellpadding="0">';
$aWantVar = frontendusers_myplugin_wantedVariables();
$aTitle = frontendusers_myplugin_canonicalVariables();
foreach( $aWantVar as $sVar ) {
$return.= '<tr>';
$return.= '<td class="text_medium">'.htmlentities( $aTitle[$sVar] ).'</td>';
$oInput = new cHTMLTextbox( $sVar, frontendusers_myplugin_getvalue( $sVar) , 128);
$oInput->setStyle( "width: 100px;" );
$oInput->setClass( "text_medium" );
$return.= '<td class="text_medium">'.( $oInput->render() ).'</td>';
$return.= '</tr>';
}
$return.= '</table>';
return $return;
}
TIPP: Eventuell ist es einigen aufgefallen das es keine delete-Funktion gib. Das ist auch nicht nötig wenn man das Objekt $feuser nutzt, werden die Werte mit dem Löschen des FEUsers mit gelöscht. Für größere Datenmengen (eventuell eine Ein-/Anbinung eines Forum) sollten die CRC-Funktion "Contenido.Permissions.FrontendUser.AfterDeletion" verwendet werden.
Die Variable $idfrontenduser wird als einigster Parameter übergeben.
Beispiel PO-File
Code: Alles auswählen
msgid ""
msgstr ""
"Project-Id-Version: \n"
"POT-Creation-Date: 2008-06-12 00:00+0100\n"
"PO-Revision-Date: 2008-06-12 00:00+0100\n"
"Last-Translator: = Oliver Lohkemper <lohkemper@team4media.net>\n"
"Language-Team: \n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=iso-8859-1\n"
"Content-Transfer-Encoding: 8bit\n"
msgid "MyPluginTitle"
msgstr "Titel"
msgid "feup_myplugin_var1"
msgstr "Value 1"
msgid "feup_myplugin_var2"
msgstr "Value 2"
msgid "feup_myplugin_var3"
msgstr "Value 3"
plugins.zip
Bewertet diesen Beitrag
5 Punkte - 77% [ 7 ]
4 Punkte - 11% [ 1 ]
3 Punkte - 00% [ 0 ]
2 Punkte - 00% [ 0 ]
1 Punkte - 11% [ 1 ]
Stimmen insgesamt : 9