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

Seiteneinstellungen in der Klasse Page

Code & Blog Logo

Code & Blog Logo

In verschiedenen Dateien wird nun auf die aktuelle Seite zugegriffen. Dies soll nun so sein, dass alle Zugriff darauf über die Klasse Page laufen. Dies wird auch der Grundstein für die spätere Breadcrump Navigation.

In der Klasse stehen aber bisher nur die DB-Properties (id, alias, title). Sie bekommt die Funktion getContent, welche den Inhalt ausgibt.

Die Klasse sieht folgendermaßen aus:

<?PHP
class Page{
  var $id = -1;
  var $alias = '';
  var $title = '';
  
  function loadProperties($alias){
    global $dbpraefix;
    $res = mysql_query("SELECT id,title FROM ".$dbpraefix."pages 
                        WHERE alias = '".$alias."'");
    if($row = mysql_fetch_row($res)){
      $this->id = $row[0];
      $this->title = $row[1];
      $this->alias = $alias;
    }
  }

  function getContent(){
    include(filterfilename("../content/articles/".$this->alias));
  }
}
?>

Die derzeit aktuelle Seite muss jetzt natürlich auch von überall zugreifbar sein. Da diese Klasse nicht statisch seien soll (damit auch mehrere Objekte der Klasse erstellt werden können), müssen wir diese global erstellen. Dies geschieht erstmal in der index.php (Hauptverzeichnis):

<?PHP
  include("system/dbconnect.php");
  include("system/settings.php");
  include("system/classes/page.php");
  include("system/classes/skincontroller.php");
  include("system/filterfilename.php");
  include("system/sys.php");
  $currentpage = new Page();
  $currentpage->loadProperties($_GET['include']);
  include(SkinController::getCurrentSkinPath()."/index.php");
?>

Nun soll auch in der Klasse sys nur noch auf dieses Objekt zugegriffen werden können. Hier entfällt deswegen auch ein LEFT Join. Schau’s dir an:

<?PHP
class sys{
  function includeContent(){
    global $currentpage;
    $currentpage->getContent();
  }

  function includeHeader(){
    global $dbpraefix,$currentpage;
    echo "<title>".$currentpage->title."</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
                        WHERE page = '".$currentpage->id."'");
    while($row = mysql_fetch_row($res)){
      echo "<meta name="".$row[0]."" content="".$row[1]."" />";
    }
  }
}
?>

Kommentare

Akini schrieb am 28.10.2009:

Hi, ich hab eine Frage wozu ist diese Funktion sinvoll?? mfg Akini

Stefan Wienströer schrieb am 29.10.2009:

Welche von denen? Eigentlich sind die alle dazu da, um viel Spielraum in den Skins zu zulassen. Der Content wird zentral an einer Stelle eingelesen, damit man ihn zum Beispiel schnell von Dateien auf die DB umstellen kann usw. Die Meta-Daten sind in der Datenbank gespeichert, so dass sie auch ein nicht-Entwickler später im Admin-Menü bearbeiten kann.

Fawi Nemani schrieb am 01.04.2010:

Hallo! In welche Ordner und in Welche Datei kommen Teil 1 (ganz oben) Code? bye

Stefan Wienströer schrieb am 01.04.2010:

/system/classes/page.php

Lennart schrieb am 01.04.2010:

Großes Lob an dich für diesen Blog. Nur bekomme ich, nachdem ich die Klasse Page eingerichtet hatte, folgende Fehlermeldung wenn ich: http://localhost/index.php?include=testseite.php eingebe, folgende Fehlermeldung: Warning: include(C:xampphtdocscontentarticles) function.include]: failed to open stream: Permission denied in C:xampphtdocssystemclassespage.php on line 19

Stefan Wienströer schrieb am 01.04.2010:

Dankeschön! Kannste mal des Ordners /system/content/articles prüfen?

Lennart schrieb am 01.04.2010:

Das ging ja schnell mit der Antwort. Leider werde ich aus deiner Antwort nicht wirklich schlau. In dem Ordner System gibt es keinen Content Ordner und auch wenn ich dort einen hin kopiere ändert sich nichts. Und übrigens, bevor ich die Page Klasse integriert hatte, hat alles funktioniert. Mit freundlichen Grüßen Lennart

Stefan Wienströer schrieb am 01.04.2010:

der Ordner content befindet sich im Hauptverzeichnis. Wenn er und sein Unterordner articles noch nicht vorhanden ist, kannst Du diese ja mal anlegen. Sollte es dann noch nicht funktionieren, kannst Du mal einen Rechtsklick darauf machen. Danach Eigenschaften und Sicherheit. Dort gibst Du einfach mal alle Rechte frei(nur zum Testen)

Steffen schrieb am 20.07.2010:

http://localhost/index.php?include=testseite liefert Fatal error: Call to a member function getContent() on a non-object in C:xampphtdocssystemsys.php on line 5

Steffen schrieb am 20.07.2010:

Ach, hatte 'include("system/classes/page.php");' vergessen... *blush*

Markus schrieb am 15.08.2010:

Hab ich was übersehen oder ist die Tabelle "cms_Pages" noch gar nicht angelegt? oO

Markus schrieb am 15.08.2010:

Ach tut mir Leid, die ist ja doch da ^^ Also mir gefällt das "Tutorial" bis jetzt sehr gut =D

BartM schrieb am 28.01.2011:

Bekomme diese meldung nachdem ich die klasse page eingerichtet habe : Warning: sys::include(content/articles/testseitephp.php) [function.sys-include]: failed to open stream: No such file or directory in C:Programmexampphtdocscmssystemsys.php on line 4 Warning: sys::include() [function.include]: Failed opening 'content/articles/testseitephp.php' for inclusion (include_path='.;C:Programmexamppphppear') in C:Programmexampphtdocscmssystemsys.php on line 4

Stefan Wienströer schrieb am 29.01.2011:

Deine filterfilename funktion scheint etwas falsch zu laufen. Irgendwo wird aus Testseite testseitephp.php. Richtig wäre testseite.php.

jULiM schrieb am 15.05.2011:

Ich habe eine Frage: kann es sein, dass bei den angegebenen Variablen ein Befehl fehlt, der die dynamischen Informationen aus der Datenbank liest? Bei mir funktioniert das Ganze nämlich nur, wenn ich bspw bei "var $title = 'testseite2' " eingebe. Doch dann wird logischerweise nur die Testseite2 ausgegeben... Jemand ne Idee?

jULiM schrieb am 17.05.2011:

Läuft wieder alles...;) Hab mich nur durch die .htaccess Datei verwirren lassen.

Todoer schrieb am 26.11.2011:

Wann haben wir den eigentlich die Tabelle "cms_meta_local" erstellt? Bisher habe ich die noch nicht anlegen müssen... oder sollte das "cms_meta_global" heissen?... wieso den dann eigentlich diese "UNION"?? :(

Todoer schrieb am 26.11.2011:

Oh Opps... sehe gerade das ich eine seite übersprungen habe Oo ... sorry.