Kontakt aufnehmen

Seiten in Datenbank speichern (CMS)

Derzeit speichern wir die Seiten ja noch in Dateiform – Das änder sich heute! Wir können ja mittlerweile unterschiedliche Seitentypen erstellen, weswegen wir auch keine PHP-Tags unterstützten müssen. Durch die Speicherung in der Datenbank können wir später auch eine Suche erstellen.

Zunächst einmal brauchen wir eine neue Spalte in unserer pages-Tabelle: content als text.

Da wir in der Klasse Text darauf zugreifen, müssen wir auch hier den Inhalt auslesen. gebrauchen tuen wir es aber erst im Editor. Damit wir später nicht auf dumme Ideen kommen, habe ich es in der Klasse editorContent genannt. Das Speichern und auslesen geht dann so: /system/classes/page.php:

<?PHP
class Page{
  public $id      = -1;
  public $alias   = "";
  public $title   = "";
  public $ownerid = -1;
  public $owner   = false;
  public $menu    = -1;
  public $meta    = null;
  public $editor  = null;
  private $editorContent = "";

  function loadProperties($alias){
    if ($alias == "") {
      $alias = "home";
    }
    $this->alias = $alias;
    $row = $GLOBALS['db']->ReadRow("SELECT * FROM {'dbprefix'}pages 
                           WHERE alias = '".$alias."'");
    $this->load($row);
  }

  function loadPropertiesById($id){
    $row = $GLOBALS['db']->ReadRow("SELECT * FROM {'dbprefix'}pages 
                           WHERE id = '".$id."'");
    $this->load($row);
  }

  function load($data){
    if($data){
      $this->id            = $data->id;
      $this->title         = $data->title;
      $this->ownerid       = $data->owner;
      $this->menu          = $data->menu;
      $this->alias         = $data->alias;
      $this->editorContent = $data->content;
      $this->meta          = new Meta();
      $this->meta->pageid  = $this->id;
      $this->meta->load();
      $this->editor = new $data->editor($this);
      if(!isset($_SESSION['user']) || !isset($_SESSION['user']->role) || !$_SESSION['user']->role->canAccess($this)){
        throw new AccessDeniedException("Access denied: ".$this->alias);
      }
    }
    else{
      throw new FileNotFoundException("File Not Found: ".$this->alias);
    }
  }

  function getContent(){
    EventManager::raiseEvent("content_top",".",$this);
    $this->editor->display();
    EventManager::raiseEvent("content_bottom",".",$this);
  }

  function getOwner(){
    if(!$this->owner){
      $alias = $GLOBALS['db']->ReadField("SELECT alias FROM {'dbprefix'}pages 
                                          WHERE id = '".$this->ownerid."'");
      if($alias){
        $this->owner = new Page();
        $this->owner->loadProperties($alias);
      }
    }
    return $this->owner;
  }

  function getBreadcrumb(){
    if(!$this->owner) $this->getOwner();
    if($this->owner){
      $breadcrump = $this->owner->getBreadcrumb();
    }
    $breadcrump[] = array($this->alias,$this->title);
    return $breadcrump;
  }

  function save(){
    $title   = $GLOBALS['db']->EscapeString($this->title);
    $alias   = $GLOBALS['db']->EscapeString($this->alias);
    $menu    = $GLOBALS['db']->EscapeString($this->menu);
    $id      = $GLOBALS['db']->EscapeString($this->id);
    $editorContent = $GLOBALS['db']->EscapeString($this->editorContent);
    $res = $GLOBALS['db']->Execute("UPDATE {'dbprefix'}pages SET
                                    title    = '".$title."',
                                    alias    = '".$alias."',
                                    menu     = '".$menu."' ,
                                    content  = '".$editorContent."' 
                                    WHERE id = '".$id."'");
    $this->meta->save();
    if($res){
      $args['title']   = $this->title;
      $args['alias']   = $this->alias;
      $args['menu']    = $this->menu;
      $args['id']      = $this->id;
      $args['content'] = $this->content;
      EventManager::raiseEvent("page_saved","../",$args);
    }
    return $res;
  }

  function create($dirpraefix,$alias,$editor){
    $res = $GLOBALS['db']->Execute("INSERT INTO {'dbprefix'}pages (alias,editor) VALUES ('".$alias."','".$editor."')");
    if($res){
      $res            = $GLOBALS['db']->InsertID();
      $args['id']     = $res;
      $args['editor'] = $editor;
      $args['alias']  = $alias;
      $admin = new Role();
      $admin->load(2);
      $admin->allowAccessByID($args['id']);
      EventManager::raiseEvent("page_created","../",$args);
    }
    return $args['id'];
  }

  function delete(){
    $res = $GLOBALS['db']->Execute("DELETE FROM {'dbprefix'}pages WHERE alias = '".$this->alias."'");
    if($res){
      $args['alias'] = $this->alias;
      EventManager::raiseEvent("page_deleted","../",$args);
    }
    return $res;
  }

  function getPagesTypes(){
    return $GLOBALS['db']->ReadRows("SELECT * FROM {'dbprefix'}pagetypes");
  }

  function displayBreadcrumb($separator,$class,$idpraefix){
    $this->editor->displayBreadcrumb($separator,$class,$idpraefix);
  }

  static function getPagesByDir($dir){
    $dir = $GLOBALS['db']->EscapeString($dir);
    if(substr($dir,0,1) == "/"){
      $dir = substr($dir,1);
    }
    return $GLOBALS['db']->ReadRows("SELECT * FROM {'dbprefix'}pages 
                           WHERE alias LIKE '".$dir."%'");

  }

  public function getEditorContent(Editor $editor){
    return $this->editorContent;
  }

  public function setEditorContent($content){
    $this->editorContent = $content;
  }
}

?>

Die Klasse /system/classes/wysiwyg.php kann nun sehr verkleinert werden. Wir brauchen keinen Dateizugriff und können einfach auf die eben hinzugefügte Variable zurückgreifen:

<?PHP
  class WYSIWYG extends Editor{
    function __construct($page){
      $this->page = $page;
    }

    public function display(){
      echo $this->page->getEditorContent($this);
    }

    function getHeader(){
    }

    public function getEditableCode(){
        $template = new Template();
        $template->load("control_wysiwyg");
        $template->assign_var("CONTENT",$this->page->getEditorContent($this));
        $template->assign_var("HOST",Settings::getInstance()->get("host"));
        $template->assign_var("ALIAS",$this->page->alias);
        $template->assign_var("URL",Settings::getInstance()->get("host")."admin/pageedit.html?site=".$this->page->alias);
        return $template->getCode();
    }

    public function save($newPage,$oldPage){
        $this->page = $newPage;
        $this->page->setEditorContent($_POST['content']);
        $this->page->save();
    }

  }
?>

Im Installer habe ich alle benötigten Inhalte in die content-Spalte eingetragen und die Dateien gelöscht (Verzeichnisse müssen erstmal noch dableiben, kommen aber auch bald weg). Außerdem habe ich Verweise auf das alte Backend gelöscht, was eine Änderung in den PageIDs ergab. Diese musste dann in den Menüs übernommen werden, so dass doch relativ viele Änderungen zusammenkamen. Deswegen bitte ich aus diesem Grund hoffentlich fürs letzte Mal um eine Neuinstallation. Alle Änderungen stehen in Revistion 65.

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