Kontakt aufnehmen

Rollenspezifische Einstellungen Speichern Teil 1 (CMS)

Im selbst erstelltem CMS geht es heute um das schreiben der Rollenspezifischen Einstellungen. Da jede Einstellung zu einer Rolle zugeordnet sein kann, kommen die Rollen direkt in unsere SettingsForm.

Vorher müssen wir aber die Funktion setSetting der Datei /system/settings.php bearbeiten. Sie bekommt nun den role-Parameter:

function setSetting($area,$areaType,$property,$value,$role){
    $area     = $GLOBALS['db']->EscapeString($area);
    $areaType = $GLOBALS['db']->EscapeString($areaType);
    $property = $GLOBALS['db']->EscapeString($property);
    $value    = $GLOBALS['db']->EscapeString($value);
    $role     = $GLOBALS['db']->EscapeString($role);
    $exists = $GLOBALS['db']->ReadField("SELECT COUNT(*) FROM {'dbprefix'}settings WHERE area = '".$area."' AND areaType = '".$areaType."' AND property = '".$property."' AND role = '".$role."'") > 0;
    if($exists){
        $res = $GLOBALS['db']->Execute("UPDATE {'dbprefix'}settings SET value = '".$value."' WHERE area = '".$area."' AND areaType = '".$areaType."' AND property = '".$property."' AND role = '".$role."'");
    }
    else{
        $res = $GLOBALS['db']->Execute("INSERT INTO {'dbprefix'}settings (value,area,areaType,property,role) VALUES ('".$value."', '".$area."', '".$areaType."', '".$property."', '".$role."')");
    }
    return $res;
}

Die Funktion wird nun in der /system/classes/settingsform.php aufgerufen. Diese funktioniert jedoch erst im Teil 2. Hier werden außerdem die Rollen aufgelistet:

<?PHP
  class SettingsForm{
    public $area     = "global";
    public $areaType = "global";
    public $role     = null;
    
    public function display(){
      $currentRole = 3;
      if($_GET['role']) $currentRole = $_GET['role'];
      if($_POST['save']){
        foreach($_POST as $property=>$value){
          if($property != "save"){
            setSetting($this->area,$this->areaType,$property,$value,$currentRole);
          }
        }
      }
        ?>
        <form style="float:left;width:600px;" action="<?PHP echo $_SERVER['REQUEST_URI']; ?>" method="POST">
        Rolle:
        <select name="roles" onchange="document.location.href='/admin/index.php?page=settings&role=' + this.options[this.selectedIndex].value;">
        <?PHP
        $roles = $GLOBALS['db']->ReadRows("SELECT * FROM {'dbprefix'}roles ORDER BY name");
        if($roles){
            foreach($roles as $role){
                if($currentRole == $role->id){
                    echo "<option value="".$role->id."" selected="selected">".$role->name."</option>";
                }
                else{
                    echo "<option value="".$role->id."">".$role->name."</option>";
                }
            }
        }
        ?>
        </select>
        <fieldset style="width:500px;">
          <legend>Einstellungen &auml;ndern</legend>
          <table style="width:100%">
            <?PHP
              $sql = "SELECT * FROM {'dbprefix'}settings WHERE area = '".$this->area."' AND areaType = '".$this->areaType."' AND activated = 1";
              if($this->role){
                $sql .= " AND role = '".$this->role."'";
              }
              $rows = $GLOBALS['db']->ReadRows($sql);
              if($rows){
                foreach($rows as $row){
                  echo "<tr><td><label for="".htmlentities($row->property)."">";
                  echo $row->description.":";
                  echo "</label></td><td>";
                  $control        = new $row->type;
                  $control->name  = $row->property;
                  $control->value = $row->value;
                  $control->display();
                  echo "</td></tr>";
                }
              }
            ?>
          </table>
          <br /><input type="submit" name="save" value="Speichern" />
        </fieldset>
      </form>
    <?PHP
    }
  }
?>

Der basecolor hat noch einen kleinen Fehler im installer entdeckt den wir nun beheben. Und zwar wird die Tabelle settings mit den namen ssettings angelegt. Das geht natürlich nicht. Datei /installer/installer.php:

mysql_query("CREATE TABLE `".$this->params[3]['praefix']."settings` (
  `role` int(10) NOT NULL default '3',
  `area` varchar(20) NOT NULL,
  `areaType` varchar(20) NOT NULL,
  `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  (`role`,`area`,`areaType`,`property`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;");

Du arbeitest in einer Agentur oder als Freelancer?
Dann wirf doch mal einen Blick auf unsere Software FeatValue.

Über uns

Stefan Wienströer

Wir entwickeln Webanwendungen mit viel Leidenschaft. Unser Wissen geben wir dabei gerne weiter. Mehr über a coding project

Cookie-Einstellungen

Helfen Sie dabei, uns noch besser zu machen. Wir nutzen Cookies und ähnliche Technologien, um die Website auf Ihre Bedürfnisse anzupassen. Zur Datenschutzerklärung

Auswahl speichern