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

Lokale Meta-Daten speichern / auslesen

Code & Blog Logo

Code & Blog Logo

Die lokalen Meta-Daten werden pro Seite gespeichert. Hierfür gibt es die Tabelle cms_meta_local. Sie hat 3 Spalten, eine für den Namen der Eigenschaft, eine für die Seitenid und eine für den Inhalt. Der SQL-Query dafür sieht so aus.

CREATE TABLE `cms_meta_local` (
`name` VARCHAR( 100 ) NOT NULL ,
`page` integer NOT NULL ,
`content` VARCHAR( 100 ) NOT NULL ,
PRIMARY KEY ( `name` )
) TYPE = MYISAM


Um das nachher zu testen, benötigen wir ein paar Einträge. Hierfür habe ich die keywords und description der Seite testseite(id 1) hinzugefügt.

INSERT INTO `cms_meta_local` ( `name` , `page` , `content` )
VALUES (
'description', '1', 'Die ist eine Testseite'
), (
'keywords', '1', 'Test'
);

Nun muss die Datei sys ergänzt werden. Hierfür wird einfach der SQL-Befehl zum auslesen der Globalen Meta-Tags erweitert. Dies geschieht mit einem zweitem Select, welcher über Union einfach angehängt wird. Mit dem Left Join, können wir die Bindung hinzufügen, dass auch nur die Seiten des alias angezeigt werden.

So sieht das neue Script aus:

<?PHP
class sys{
  function includeContent(){
    include(filterfilename("../content/articles/".$_GET['include']));
  }
  function includeHeader(){
    global $dbpraefix;
    echo "<title>Kommt in einen sp&auml;teren Beitrag</title>
          <meta http-equiv="Content-Type" content="text/html;
            charset=iso-8859-1" />";

    $res = mysql_query("SELECT name, content
            FROM ".$dbpraefix."meta_global
            UNION SELECT name, content
            FROM ".$dbpraefix."meta_local
            LEFT JOIN ".$dbpraefix."pages 
            ON ".$dbpraefix."pages.id = ".$dbpraefix."meta_local.page
            WHERE ".$dbpraefix."pages.alias = '".$_GET['include']."'");
    while($row = mysql_fetch_row($res)){
      echo "<meta name="".$row[0]."" content="".$row[1]."" />";
    }
  }
}
?>

Kommentare

Kay schrieb am 02.07.2009:

Servus, kleine Anmerkung: Überall sonst lässt du $_GET['include'] auf Schadcode prüfen bzw. entsprechend bereinigen. Aber bei der Abfrage hier vergisst du es (SQL-Injection sei hier als Stichwort genannt -&gt; http://de.wikipedia.org/wiki/SQL-Injection). Das solltest du schnellstens beheben. Ansonsten werde ich deinem bisher sehr guten Tut weiterhin folgen (denn ich hatte auch just vor ein eigenes CMS zu basteln) und hoffe du verlierst nicht die Lust dabei. Gruss Kay

Stefan Wienströer schrieb am 02.07.2009:

Uups, kanns übersehen, danke für den Hinweis. Werd gleich nen Artikel davon schreiben.

zilli schrieb am 29.04.2010:

Hallo, ich bin gerade bei diesem Punkt angelangt. Also den header einzubinden. Das habe ich gestern auch soweit geschafft. Heute morgen allerdings stand nach dem öffnen der Seite über den Browser im header ein Tag und eine Datei von einem externem Server. Kann es leider nicht mehr genau sagen, da ich umgehend alles gelöscht habe. Handelt es sich dabei um das von Kay angesprochene Sicherheitsproblem? Grüße zilli

Stefan Wienströer schrieb am 29.04.2010:

Ich denke wenn Du dein CMS noch nicht öffentlich hast, sollte es kein Problem sein. Das Problem wurde in einen späteren Beitrag behoben.

zilli schrieb am 29.04.2010:

Ich hatte es ja halt leider öffentlich, jetzt aber nicht mehr. Schon krass wie schnell die sind. ;)

Pascal schrieb am 17.07.2010:

Hi, ich möchte nur die Funktion zum Einfügen des Headers benutzen. Muss ich bei der Funktion auch die Eingabe überprüfen? (Kommen ja von der MySQL Datenbank)

Stefan Wienströer schrieb am 17.07.2010:

Was genau meinst du mit Eingabe überprüfen?

Mathy schrieb am 19.08.2010:

Erster Absatz: [...]Die lokalen Meta-Daten werden pro Seite gespeichert. Hierfür gibt es die Tabelle cms_meta_global.[...] cms_meta_local ?!

Twister schrieb am 23.08.2010:

Hi! Erst ma: Super, dieses Tutorial - danke für die viele Arbeit XD Dann aber zu meiner Frage. Bis jetzt bin ich bis auf einem kleinen Stolperer (bei der Einbindung des globalen Headers habe ich noch die Testseite immer laden wollen ^^) super mitgekommen. Jetzt bin ich nahezu ratlos -.-. Aus irgendeinen Grund lassen sich die lokalen Tags nicht einbinden. Leider weiß ich auch nicht genau, wo ich suchen soll. Eventuell einen Ratschlag? lg, Twister

Twister schrieb am 24.08.2010:

Ich denke es hat sich erledigt. Im nächsten Schritt ist mir aufgefallen, dass irgendwas mit der Where-Bedingung bei der DB-Abfrage nicht gepasst hat. Eine Ausgabe von $alias auf der Seite page.php hat es mir auch dann gezeicgt. Dieses war testseite.htm, was natürlich nicht mit der alias in der DB (nur testseite) nicht übereinstimmt. Habe dann mithilfe von substr .htm herausgefiltert, nun funktioniert alles. Keine Ahnung, ob das ein Problem mit dem Code (hier) war, oder ich es nur übersehen habe. lg