0251 / 590 837 15
info@a-coding-project.de
;

Typisierte Einstellungen Teil 1 (CMS)

In den Einstellungen vom CMS kann man bisher nur Einträge in Textboxen machen. Leider ist es nicht sehr benutzerfreundlich, wenn der Anwender zum Beispiel die ID des Menüs herausfinden muss, um das Hauptmenü zu bestimmen.

Abhilfe schaffen typisierte Einstellungen. Das heißt pro Einstellung kann ein Typ angegeben werden. So zum Beispiel ein Farbpicker oder eben auch ein MenüSelektor.

Als erstes müssen wir die Spalte type in die Tabelle cms_settings anlegen, das geht so:

ALTER TABLE `cms_settings` ADD `type` VARCHAR( 50 ) NOT NULL

Bereits bestehende Einträge müssen noch verändert werden. Dafür habe ich mir bisher folgende Elemente ausgedacht:

  • Textbox
  • FarbPicker
  • SkinSelektor
  • MenüsSelektor

Die Update-Queries sehen dann so aus:

UPDATE `cms_settings` SET `type` = 'textbox' WHERE CONVERT( `property` USING utf8 ) = 'title' LIMIT 1 ;
UPDATE `cms_settings` SET `type` = 'skinselector' WHERE CONVERT( `property` USING utf8 ) = 'selectedskin' LIMIT 1 ;
UPDATE `cms_settings` SET `type` = 'menueselector' WHERE CONVERT( `property` USING utf8 ) = 'globalmenuid' LIMIT 1 ;
UPDATE `cms_settings` SET `type` = 'colorpicker' WHERE CONVERT( `property` USING utf8 ) = 'skinbgcolor' LIMIT 1 ;
UPDATE `cms_settings` SET `type` = 'colorpicker' WHERE CONVERT( `property` USING utf8 ) = 'skinforecolor' LIMIT 1 ;
UPDATE `cms_settings` SET `type` = 'colorpicker' WHERE CONVERT( `property` USING utf8 ) = 'skinhighlight1' LIMIT 1 ;
UPDATE `cms_settings` SET `type` = 'colorpicker' WHERE CONVERT( `property` USING utf8 ) = 'skinhighlight2' LIMIT 1 ;
UPDATE `cms_settings` SET `type` = 'textbox' WHERE CONVERT( `property` USING utf8 ) = 'host' LIMIT 1 ;

Da wir den Installer schon fertig haben müssen auch dort die Queries angepasst werden. Fangen wir an mit dem Create:

mysql_query("CREATE TABLE `".$this->params[3]['praefix']."settings` (
  `property` varchar(255) NOT NULL,
  `value` varchar(255) NOT NULL,
  `activated` int(1) NOT NULL default '1',
  `description` varchar(75) NOT NULL,
  `type` varchar(50) NOT NULL,
  PRIMARY KEY  (`property`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;");

Weiter geht’s mit den Inserts:

      mysql_query("INSERT INTO `".$this->params[3]['praefix']."settings` VALUES ('title', '".$this->params[4]['name']."', 1, 'Titel des CMS','textbox');");
      mysql_query("INSERT INTO `".$this->params[3]['praefix']."settings` VALUES ('selectedskin', '1', 1, 'Aktueller Skin','skinselector');");
      mysql_query("INSERT INTO `".$this->params[3]['praefix']."settings` VALUES ('globalmenuid', '1', 1, 'Globales Menü','menueselector');");
      mysql_query("INSERT INTO `".$this->params[3]['praefix']."settings` VALUES ('skinbgcolor', 'dedede', 1, 'Hintergrundfarbe','colorpicker');");
      mysql_query("INSERT INTO `".$this->params[3]['praefix']."settings` VALUES ('skinforecolor', '525252', 1, 'Schriftfarbe','colorpicker');");
      mysql_query("INSERT INTO `".$this->params[3]['praefix']."settings` VALUES ('skinhighlight1', 'ff0000', 1, 'Highlight Farbe 1','colorpicker');");
      mysql_query("INSERT INTO `".$this->params[3]['praefix']."settings` VALUES ('skinhighlight2', 'b3fa00', 1, 'Highlight Farbe 2','colorpicker');");
      mysql_query("INSERT INTO `".$this->params[3]['praefix']."settings` VALUES ('host', 'http://".$_SERVER['HTTP_HOST']."', 1, 'URL der Startseite','textbox');");

Kommentare

Daniel schrieb am 17.02.2010:

Dann muss nur noch eine Funktion her die bei dem Attribut skinselector alle hinterlegten thumbnails aus dem skins-Ordner heraussucht und in einem Dropdownmenü darstellt. Ich versuch es. Aber erwartet nichts großes. Ich denke ich kann einen Ansatz hinbekommen.

Stefan Wienströer schrieb am 17.02.2010:

Vielleicht solltest Du vor der entgültigen Programmierung die Basis für die typisierenden Einstellungen abwarten. Dort werde ich eine abstrakte Klasse für alle Einstellungstypen erstellen.