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

Meta Daten erstellen Teil 2 (CMS)

Die Metadaten des CMS-Tutorials werden heute ausgelesen und gespeichert. Im letzten Beitrag haben wir bereits die Klasse Meta erstellt und ein Formular für die Meta Daten beim Seite Bearbeiten angezeigt.

Mit der system/classes/meta.php geht es auch direkt weiter. Wir haben dort bereits die Methoden load und save erstellt, die nun mit Leben befüllt werden:

    public function load(){
      global $dbpraefix;
      $res = mysql_query("SELECT name, content
                          FROM ".$dbpraefix."meta_local
                          WHERE page = '".$this->pageid."'");
      while($row = mysql_fetch_row($res)){
        if(strtolower($row['name'] == 'description')){
          $this->description = $row['content'];
        }
        else if(strtolower($row['name'] == 'keywords')){
          $this->keywords = $row['content'];
        }
        else if(strtolower($row['name'] == 'robots')){
          $this->robots = $row['content'];
        }
      }
    }
    
    public function save(){
      global $dbpraefix;
      mysql_query("DELETE FROM ".$dbpraefix."meta_local WHERE page = '".$this->pageid."'");
      if(trim($this->keywords) != ""){
        mysql_query("INSERT INTO ".$dbpraefix."meta_local (page,               name      , content)
                                                    VALUES('".$this->pageid."','keywords','".$this->keywords."')");
      }
      if(trim($this->description) != ""){
        mysql_query("insert into ".$dbpraefix."meta_local (page,               name      , content)
                                                    VALUES('".$this->pageid."','description','".$this->description."')");
      }
      if(trim(strtolower($this->robots)) != 'index, follow'){
        mysql_query("insert into ".$dbpraefix."meta_local (page,               name      , content)
                                                    VALUES('".$this->pageid."','robots','".$this->robots."')");
      }                                        
    }

Das ist glaub ich nicht weiter zu erklären. Die Funktion save muss noch in der Klasse /system/classes/page.php aufgerufen werden. Dies geschieht auch in einer Funktion namens save:

  function save(){
    global $dbpraefix;
    $res = mysql_query("UPDATE ".$dbpraefix."pages SET
                              title = '".$this->title."',
                              alias = '".$this->alias."',
                              menu = '".$this->menu."' 
                        WHERE id = '".$this->id."'");
    $this->meta->save();
    if($res){
      $args['title'] = $this->title;
      $args['alias'] = $this->alias;
      $args['menu']  = $this->menu;
      $args['id']    = $this->id;
      EventManager::raiseEvent("page_saved","../",$args);
    }
    return $res;
  }

Zu guter letzt müssen in der Datei /admin/includes/site-edit.php noch die eingebenen Daten in die Meta-Klasse geschreiben werden. Das geht so:

<?php
  if($_POST['save']){
    $page->deleteContent("../");
    $page->meta->description = $_POST['meta-description'];
    $page->meta->keywords = $_POST['meta-keywords'];
    $page->meta->robots = $_POST['meta-robots'];
    $page->save();
    $page->writeContent("../",$_POST['content']);
    $content = $_POST['content'];
  }
?>

Jetzt könnt ihr für eine Seite Meta-Daten erstellen und testen, ob sie auf der Seite richtig eingefügt werden.

Kommentare

jULiM schrieb am 22.06.2011:

Irgendwie will das nicht ganz funktionieren... Die Meta-Daten werden gespeichert, verlasse ich aber die Bearbeitungsseite und rufe sie wieder auf, so sind die Angaben verschwunden!?! Und wenn ich dann die Seite bearbeite, wird auch der Eintrag in der MySQL-DB gelöscht. Hat irgendjemand eine Idee? Danke!

Stefan Wienströer schrieb am 22.06.2011:

Sind sie denn vorher in der DB vorhanden?

jULiM schrieb am 22.06.2011:

Jein. Wenn ich die Meta-Daten eingebe und auf Ändern klicke, werden sie in der Datenbank erfolgreich gespeichert. Möchte ich nun irgendwann die Seite wieder bearbeiten, erscheinen die eingegeben Daten NICHT in den Textboxen. Sobald ich wieder Ändern klicke werden die MySQL-Daten überschrieben... Ich vermute, dass etwas beim Auslesen der bestehenden Daten schiefgeht. Habs übrigens mit deinem nächsten Einstiegspunkt probiert und parallel auf meinen Server geladen. Auch da scheint es dasselbe Problem zu geben...(?)

Stefan Wienströer schrieb am 23.06.2011:

dann mach mal ein print_r auf die $page und schau nach, ob die dort drin stehen. Wenn nicht musst du mal das Select ausgeben und testen

jULiM schrieb am 23.06.2011:

Also das er mir bei der $page rausgeschmissen nachdem ich es frisch abgespeichert habe: Seite Object ( [id] =&gt; 1 [alias] =&gt; testseite [title] =&gt; Testseite [ownerid] =&gt; -1 [owner] =&gt; [menu] =&gt; 1 [meta] =&gt; Meta Object ( [pageid] =&gt; 1 [description] =&gt; Testseite [keywords] =&gt; [robots] =&gt; index, follow ) ) 1 D.h. dass er sie abspeichert. Wenn ich aber die Seite erneut bearbeiten will, ist die Angabe aus der Textbox verschwunden. Und wenn ich anschließend auf Ändern klicke, verschwindet sie auch aus der DB...:(

jULiM schrieb am 25.06.2011:

Hat sich mittlerweile erledigt... Ich habe die Funktion komplett umgeschrieben und vereinfacht... die Klasse "Meta" und die Datenbank "meta_local" fällt komplett weg...

jULiM schrieb am 25.06.2011:

Ach Stefan: Ich würde die Auflistung der Seiten im Admin-Menüpunkt "Seiten" nicht nach dem Titel sondern nach der ID der Seite sortieren...

Stefan Wienströer schrieb am 25.06.2011:

wieso?

jULiM schrieb am 25.06.2011:

So sind die Seiten, die man zuletzt erstellt hat immer am Schluss der Liste... Finde das übersichtlicher als wenn alles nach Titeln sortiert ist. Ansichtssache ;) Andere Frage: Hast du schon eine Funktion eingebaut, die beim erstellen automatisch einen Eintrag in das Hauptmenü erzeugt?

jULiM schrieb am 25.06.2011:

Die Frage hat sich auch erledigt...;)