4.1.3.9 Empfänger - Plugins

Björn Behrens
2007-06-24 17:45

Mit Plugins können die verfügbaren Eigenschaften pro Empfänger erweitert werden (z.B. neben dem "Namen" auch "Vorname", "Nachname" oder "Anrede").

Die Daten werden in der Contenido-_properties-Tabelle gespeichert - es ist daher keine Änderung der Datentabellen erforderlich, die bei einem Update zu Problemen führen kann. Die Gestaltung von Plugins ist relativ einfach, ein wenig PHP-Kenntnisse sind aber erforderlich.

Wichtig: Aus technischen Gründen ist der Zugriff auf Plugin-Eigenschaften relativ langsam. Es sollten daher nur wenige Eigenschaften über Plugins nachgerüstet werden oder Eigenschaften in einem Plugin zusammengefasst werden (siehe Attachment).

Als Attachment ist ein einfaches Beispiel für Empfänger-Plugins beigefügt. Einfach im Verzeichnis contenido\plugins entpacken.

Der manuelle Weg:
Die Erzeugung von Plugins ist für verschiedene Bereiche gleich. Die folgenden Schritte sollten zunächst offline oder in einem Testsystem erfolgen, um die normale Funktion der Webseite nicht zu beeinträchtigen.

Für die empfohlene Übersetzung von Texten wird eine Applikation zur Erzeugung und Verarbeitung von .po-Dateien benötigt. Für Windows ist die Empfehlung der de-facto-Standard poEdit in der Version 1.3.4 (bis 1.3.7 können Dateien nicht gespeichert werden, mit 1.3.7 wird das für die Plugins verwendete Format nicht erkannt).

  1. Erstellen Sie ein Verzeichnis "recipients" im Verzeichnis contenido/plugins
  2. Erstellen Sie ein Verzeichnis "includes" im Verzeichnis contenido/plugins/recipients
  3. Erstellen Sie eine Datei "config.plugin.php" im Verzeichnis contenido/plugins/recipients/includes mit folgendem Inhalt:
    <?php
    /*****************************************
    * File      :   $RCSfile: config.plugin.php,v $
    * Project   :   Contenido
    * Descr     :   Plugin configurations for recipients
    * Modified  :   $Date: 2005/05/24 13:19:32 $
    *
    * © HerrB, four for business AG, www.4fb.de
    *
    * $Id: config.plugin.php,v 1.2 2005/05/24 13:19:32 HerrB Exp $
    ******************************************/
    cInclude("includes", "functions.general.php");
    $pluginorder  = getSystemProperty("plugin", "recipients-pluginorder");
    $lastscantime = getSystemProperty("plugin", "recipients-lastscantime");
    $plugins = array();
    if ($pluginorder != "")
    {
     $plugins = explode(",",$pluginorder);
     foreach ($plugins as $key => $plugin)
     {
      $plugins[$key] = trim($plugin);
     }
    }
    $basedir = $cfg["path"]["contenido"].$cfg["path"]["plugins"]. "recipients/";
     
    if ($lastscantime + 60 < time())
    {
     setSystemProperty("plugin", "recipients-lastscantime", time()); 
     
     $dh = opendir($basedir);
     
     while (($file = readdir($dh)) !== false)
     {
      
      if (is_dir($basedir.$file) && $file != "includes" && $file != "." && $file != "..")
      {
       if (!in_array($file, $plugins))
       {
        if (file_exists($basedir.$file."/".$file.".php"))
        {
         $plugins[] = $file;
        } 
       }
      }
     }

     foreach ($plugins as $key => $value)
     {
         if (!is_dir($basedir.$value) || !file_exists($basedir.$value."/".$value.".php"))
         {
       unset($plugins[$key]);
         }
     }
     $pluginorder = implode(",", $plugins);
     setSystemProperty("plugin", "recipients-pluginorder", $pluginorder);
    }

    foreach ($plugins as $key => $value)
    {
     if (!is_dir($basedir.$value) || !file_exists($basedir.$value."/".$value.".php"))
     {
      unset($plugins[$key]);
     } else {
      i18nRegisterDomain("recipients_$value", $basedir.$value."/locale/");
     }
    }

    $cfg['plugins']['recipients'] = $plugins;
    ?>
  4. Erstellen Sie ein Verzeichnis "lastname" im Verzeichnis contenido/plugins/recipients
  5. Erstellen Sie eine Datei "lastname.php" im Verzeichnis contenido/plugins/recipients/lastname mit folgendem Inhalt:

    <?php
    /*********************************************
      Recipients Plugin:    lastname
      Author(s):   HerrB
      Version:  V1.0
     *********************************************/

    function recipients_lastname_getTitle () {
     return i18n("Lastname", "recipients_lastname"); 
    }

    function recipients_lastname_display () {
     global $recipient;
     
     $lastname = new cHTMLTextbox("lastname", $recipient->getProperty("contact", "lastname"));
     return $lastname->render(); 
    }

    function recipients_lastname_wantedVariables () {
     return (array("lastname")); 
    }

    function recipients_lastname_canonicalVariables () {
     return array("lastname" => i18n("Lastname", "recipients_lastname"));
    }

    function recipients_lastname_getvalue ($field) {
     global $recipient;

     if ($field == "lastname") {
      return $recipient->getProperty("contact", "lastname");
     } 
    }

    function recipients_lastname_store ($variables) {
     global $recipient;
     
     if (!array_key_exists("lastname",$variables)) {
      return false;
     } else {
      $recipient->setProperty("contact", "lastname", $variables["lastname"]);
      return true;
     }
    }
    ?>
  6. Erstellen Sie ein Verzeichnis "locale" im Verzeichnis contenido/plugins/recipients/lastname
  7. Erstellen Sie ein Verzeichnis "de_DE" im Verzeichnis contenido/plugins/recipients/lastname/locale
  8. Erstellen Sie ein Verzeichnis "LC_MESSAGES" im Verzeichnis contenido/plugins/recipients/lastname/locale/de_DE
  9. Erstellen Sie mit Hilfe con poEdit die Datei "recipients_lastname.po" im Verzeichnis contenido/plugins/recipients/lastname/locale/de_DE/LC_MESSAGES

    Eine Anleitung zu diesem Schritt wird noch ergänzt bzw. findet sich im Forum.
     

Erläuterungen:

Wichtig:
Das Plugin-Verzeichnis muss "recipients" lauten. Die Unterverzeichnisse müssen so benannt werden, wie die PHP-Dateien darin (z.B. Verzeichnis lastname -> lastname.php). Die Übersetzungsdatei muss <Plugin-Name>_<Eigenschaft>.po benannt werden (z.B. recipients_lastname.po).

Der Zugriff erfolgt über das (globale) Objekt $recipient (leider...).

Wie die eigentliche Eigenschaft (hier: lastname) lautet, ergibt sich aus dieser Festlegung:
function recipients_lastname_wantedVariables () {
 return (array("lastname")); 
}
(d.h. beim Import von Empfängern wird die Spalte "lastname" akzeptiert. Beim Versenden kann man wiederum über MAIL_LASTNAME die Information mitsenden)

Die Speicherung findet an dieser Stelle statt:
$recipient->setProperty("contact", "lastname", $variables["lastname"]);

Damit erfolgt das Auslesen der Daten wiederum mit:
echo $recipient->getProperty("contact", "lastname");

Tipp: Die Parameter für "setProperty" lauten "Typ", "Name" und "Wert". "Typ" und "Name" können frei bestimmt werden - es wird aber empfohlen, Typ und Name nicht zu vertauschen, um den Code auch später zu verstehen und die Daten ggf. leichter in der DB identifizieren zu können. Im Forum wurde in einigen Plugins z.B. setProperty("street", "address", ...) verwendet - demzufolge wäre die Adresse eine Eigenschaft einer Straße...

Durchschnittliche Bewertung: 0 (0 Abstimmungen)

Kommentieren nicht möglich