Tutorial: Anlage neuer Konfigurationsdaten in Datenbank

Aus Wiki | modified eCommerce Shopsoftware
Zur Navigation springenZur Suche springen

(by Hendrik Koch, 08.2009)

Wer neue Module programmiert hat stets Modulkonfigurationen die gespeichert werden müssen und vom Benutzer änderbar. Eine Speicherung in Konfigurationsdateien kommt für derartige Konfigurationsdaten daher nicht in Frage.

Dieser Text beschreibt wie du neue Konfigurationsdaten in die bestehende Konfigurationsdatenbank einfügst und im Adminbackend dem Benutzer komfortabel zur Verfügung stellst um diese zu ändern.


Speicherung und zur Verfügungstellung[Bearbeiten]

Die Konfigurationswerte sind in der Datenbank gespeichert in der Tabelle configuration. Bei jedem Scriptstart (Seitenaufruf) werden alle Werte aus configuration ausgelesen und als Konstanten in den globalen Namensraum übergeben.

 Define( <configuration.configuration_key>, <configuration.configuration_value> )

Die Konfigurationswerte stehen nun in jedem Programmteil als Konstante zur Verfügung.

z.B.: echo STORE_NAME;


Namensgebung[Bearbeiten]

Jeder Konfigurationswert muß einen eindeutigen Namen haben der sich nicht wiederholt. Berücksichtige nicht nur die bestehenden Namen des Grundsystems sondern auch die Möglichkeit zukünftiger fremder Erweiterungen.

Üblich ist es dem Namen ein Projekt(Modul)-Präfix zu geben. Das Beispielprojext heißt "exmod1". Die Namen sind traditionell stets in Großbuchstaben.

EXMOD1_... Präfix allgemein

1. Konfigurationswerte[Bearbeiten]

Das Beispielprojekt exmod1 hat drei Konfigurationswerte die vom Benutzer geändert werden sollen.

 EXMOD1_STATUS - Boolwert, zwei Möglichkeiten, "true" oder "false"
 EXMOD1_SIZE - Ein freier Integerwert
 EXMOD1_COUNTRY - Ländercode, countries_id aus Tabelle countries

1.1 Gruppenzugehörigkeit[Bearbeiten]

In der Administration sind die Konfigurationen in logische Gruppen (configuration_group) eingeteilt. Jede Gruppe hat einen Wert. Z.B.

 configuration_group=1 -> Mein Shop
 configuration_group=2 -> Minimum Werte
 configuration_group=3 -> Maximum Werte
 u.s.w.

Wir wählen eine sinnvolle Gruppe aus.

 configuration_group=17 -> Zusatzmodule
 

1.2 Sortierung innerhalb der Gruppe[Bearbeiten]

Die Konfigurationswerte haben einen Sortierwert mit der sie in der Administration aufgelistet werden. Die Festlegung unerliegt keiner festen Regel. Wir wählen einen beliebigen Wert.

sort_order = 60

Damit erscheinen die Einstellungen später ganz unten und beieinander


2. Beschreibungstexte (Sprachdateien)[Bearbeiten]

Wenn der Benutzer diese Einstellmöglichkeiten in der Administration vorfindet müssen diese auch Bezechnungen und Beschreibungen haben. Abgelegt werden Texte in den Sprachdateien im Ordnerzweig lang/.

Bezeichner für Konfigurationswerte liegen in lang/<sprache>/admin/configuration.php. Für uns in

 lang/german/admin/configuration.php
 

Für jeden neuen Konfigurationswert werden zwei Zeilen eingefügt.

 define('EXMOD1_STATUS_TITLE' , 'Exmod1 Status');
 define('EXMOD1_STATUS_DESC' ,  'Modul aktivieren? True=Ja, False=Nein');
 define('EXMOD1_SIZE_TITLE' ,   'Exmod1 Rechenwert');
 define('EXMOD1_SIZE_DESC' ,    'Mit welchem Wert soll gerechnet werden?');
 define('EXMOD1_COUNTRY_TITLE' ,'Exmod1 Land');
 define('EXMOD1_COUNTRY_DESC' , 'Auf welches Land soll sich die Berechnung beziehen?');
 

Die Definitionsnamen aus 1.0 wiederholen sich stets zwei mal. Einmal mit Postfix "_TITLE" und Postfix "_DESC". TITLE Ist der Name, DESC ein kleiner Beschreibungstext der Bedeutung.

Die Einfügung wiederholen wir, selbstredend, für alle installierten Sprachen.

3. Auswahlfunktionen[Bearbeiten]

Der Benutzer soll komfortabel Werte eingeben können. Niemand tippt gerne die Worte "true" oder "false". Oder tippt bei bei einer Länderauswahl den Ländercode ein. Kennen Sie den ISO2-Code der Dominikanischen Republik?

Für die Konfigurationswerte werden passende Auswahlfunktionen festgelegt. Die wichtigsten Auswahlfunktionen stellt das System in seinen Biblotheken bereit.

Für eine Auswahl aus wenigen fest stehenden Werten (Radiobuttons) steht die Funktion xtc_cfg_select_option() zur Verfügung. Für EXMOD1_STATUS wird diese auf true/false konfiguriert.

xtc_cfg_select_option(array('true', 'false'),

Für EXMOD1_COUNTRY nehmen wir die Funktion

xtc_cfg_pull_down_country_list(

Für EXMOD1_SIZE benötigen wir keine Funktion. Hier tippt der Benutzer selbstständig einen Wert ein.

Anmerkung: Die Funktionsnamen werden eingetragen als Rumpf, als unvollständige php-Funktion. Das System vervollständigt intern diese mit Defaultwerten.

Anmerkung2: Alle zur Verfügung stehenden Auswahlfunktionen sind in der Biblothek

admin/includes/general.php

definiert. Die entspr. Funktionen beginnen mit "xtc_cfg".


4. Defaultwerte[Bearbeiten]

Vor dem Eintrag in die Datenbank müssen Defaultwerte festgelegt werden.

 EXMOD1_STATUS - Default: "false"
 EXMOD1_SIZE - Default: 10
 EXMOD1_COUNTRY - Default: 81 (countries_id für Deutschld aus Tabelle countries)
 

5. Zusammenfassung und Eintrag in Datenbank[Bearbeiten]

Die Daten unserer 3 Konfigurationswerte die in die Datenbank einzutragen sind

EXMOD1_STATUS

 configuration_key = EXMOD1_STATUS
 configuration_value = false
 configuration_group_id = 17
 sort_order = 60
 set_function = xtc_cfg_select_option(array('true', 'false'),
 

EXMOD1_SIZE

 configuration_key = EXMOD1_SIZE
 configuration_value = 10
 configuration_group_id = 17
 sort_order = 60
 set_function = leer
 

EXMOD1_COUNTRY

 configuration_key = EXMOD1_COUNTRY
 configuration_value = 10
 configuration_group_id = 17
 sort_order = 60
 set_function = xtc_cfg_pull_down_country_list(   
 
 

Daraus erstellen wir SQL-Zeilen

 INSERT INTO `configuration` (
 `configuration_key` ,
 `configuration_value` ,
 `configuration_group_id` ,
 `sort_order` ,
 `set_function`
 )
 VALUES 
 ('EXMOD1_STATUS', 'false', '17', '60', 'xtc_cfg_select_option(array(true, false), '), 
 ('EXMOD1_SIZE', '10', '17', '60', NULL),
 ('EXMOD1_COUNTRY', '81', '17', '60', 'xtc_cfg_pull_down_country_list( ' );

Nach Ausführung der Einfügungen in Sprachdateien (siehe oben 2.0) und Datenbank steht dem Benutzer die Einstellung der Werte in der Administration zur Verfügung. Administration Konfiguration Zusatzmodule

Tut config img1.gif


Zugriff auf die Beispielwerte[Bearbeiten]

Wie anfangs erwähnt werden Konfigurationswerte aus Tabelle configuration bei jeder Initialisierung in Konstanten übertragen.

Die Abfrage der Werte erfolgt entsprechend

EXMOD1_STATUS enthält die Zeichenkette "true" oder "false". Beim Prüfen der Werte ist stets eine Zeichenkettenprüfung vorzunehmen!

Falsch:

  if( EXMOD1_STATUS==true )

Richtig:

if( EXMOD1_STATUS=='true' )

EXMOD1_SIZE ist eigentlich auch eine Zeichenkette, da PHP aber kulant ist bei der Umwandlung kann dieser Wert direkt mit Integerwerten verglichen werden.

  if( EXMOD1_SIZE >= 100 )

EXMOD1_COUNTRY enthält keinen genormten Ländercode sondern einen Indexwert, "countries_id", auf einen Eintrag in der Tabelle countries. Um weitere Länderinformation daraus zu erhalten ist eine Abfrage an die Tabelle countries vorzunehmen.

 $sql = "select * from ".TABLE_COUNTRIES." where countries_id='".EXMOD1_COUNTRY."'";
 $res = xtc_db_query($sql);
 $data = xtc_db_fetch_array($res);
 u.s.w.
           
anything