Metadaten objektorientiert mit PHP einbinden
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
after
anfang
array
ausgabe
code
copyright
distribution
ende
frage
funktion
index
inhalt
methode
page
problem
programmieren
quatsch
type
url
zeile
-
Hallo !
Ich bin neu hier.
Ich möchte meine Seite gerne objektorientiert umschreiben. Bei den Meta Angaben habe ich ein paar Probleme. Ich habe eine Page.class.php. Diese wird in jede Unterseite eingebunden. In der Page.class.php steht folgendes:
function set_meta() { $meta = '<meta name="' . $name . '" content="' . $content . '">'; return $meta; } function get_meta($description, $keywords) { $this->meta = array(); $this->meta[] = array( 'name' => 'author', 'content' => '', 'name' => 'publisher', 'content' => '', 'name' => 'copyright', 'content' => '', 'name' => 'robots', 'content' => '', 'name' => 'revisit-after', 'content' => '', 'name' => 'content-language', 'content' => '', 'name' => 'date-creation-yyyymmdd', 'content' => '', 'name' => 'date-revision-yyyymmdd', 'content' => '', 'name' => 'description', 'content' => '$description', 'name' => 'keywords', 'content' => '$keywords', 'name' => 'page-type', 'content' => '', 'name' => 'audience', 'content' => '', 'name' => 'distribution', 'content' => '', ); }
In die leeren Felder kommt dann natürlich noch der content rein.
Ich weiß nicht, ob die Page.class.php richtig ist.
Was muss ich jetzt in meine index.php schreiben, damit das alles angezeigt wird? -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Uff... bisschen chaotisch.
Hast Du denn generell schonmal mit Klassen und Objekten in PHP gearbeitet?!
Wenn das Deine gesamte Page.class.php ist, dann fehlt da eine ganze Menge
Du hast dort in erster Linie zwei Funktionen, die nichts tun. Die zweite definiert ein (ungültiges) Array mit den Metadaten, die erste gibt einen (!) Meta-Tag aus, aber ohne definiert zu haben, wo die Werte eigentlich herkommen...
Mal ganz schnell herumgebastelt:
<?php class Page{ private $meta; public function __construct(){ $this->meta = array( array('name' => 'author', 'content' => ''), array('name' => 'publisher', 'content' => '') //usw... ); } function set_meta() { foreach($this->meta AS $singlemeta){ $out .= '<meta name="' . $singlemeta['name'] . '" content="' . $singlemeta['content'] . '">\n'; } return $out; } } ?>
In der index.php musst Du die Klasse dann entsprechend initialisieren und die Methode aufrufen:
$foobar = new Page; echo $foobar->set_meta();
Aber nimm Dir vllt. ersteinmal was anderes vor
Viele Grüße,
F.
Beitrag zuletzt geändert: 5.12.2011 19:15:36 von ferdinand24 -
ferdinand24 schrieb:
Uff... bisschen chaotisch.
Hast Du denn generell schonmal mit Klassen und Objekten in PHP gearbeitet?!
Wenn das Deine gesamte Page.class.php ist, dann fehlt da eine ganze Menge
Du hast dort in erster Linie zwei Funktionen, die nichts tun. Die zweite definiert ein (ungültiges) Array mit den Metadaten, die erste gibt einen (!) Meta-Tag aus, aber ohne definiert zu haben, wo die Werte eigentlich herkommen...
Mal ganz schnell herumgebastelt:
<?php class Page{ private $meta; public function __construct(){ $this->meta = array( array('name' => 'author', 'content' => ''), array('name' => 'publisher', 'content' => '') //usw... ); } function set_meta() { foreach($this->meta AS $singlemeta){ $out .= '<meta name="' . $singlemeta['name'] . '" content="' . $singlemeta['content'] . '">\n'; } return $out; } } ?>
In der index.php musst Du die Klasse dann entsprechend initialisieren und die Methode aufrufen:
$foobar = new Page; echo $foobar->set_meta();
Aber nimm Dir vllt. ersteinmal was anderes vor
Viele Grüße,
F.
Hallo !
Erstmal danke dafür.
Ich lerne gerade objektorientiert zu programmieren, und bin noch ganz am Anfang.
Eine Frage habe ich aber. Wo kommt denn die Variable $singlemeta her? Die ist garnicht definiert, oder? -
Ich lerne gerade objektorientiert zu programmieren, und bin noch ganz am Anfang.
Eine Frage habe ich aber. Wo kommt denn die Variable $singlemeta her? Die ist garnicht definiert, oder?
Du kannst innerhalb von Methoden lokale Variablen verwenden, die auch nur innerhalb des Funktionsblocks gültig sind. -
ferdinand24 schrieb:
Ich lerne gerade objektorientiert zu programmieren, und bin noch ganz am Anfang.
Eine Frage habe ich aber. Wo kommt denn die Variable $singlemeta her? Die ist garnicht definiert, oder?
Du kannst innerhalb von Methoden lokale Variablen verwenden, die auch nur innerhalb des Funktionsblocks gültig sind.
Ok, danke!
Ich werde den Code mal testen! -
Mal eine ganz andere Frage: Hältst Du es wirklich für sinnvoll, ALLE Metatags dynamisch zu generieren, sofern die Verwendung der einzelnen Tags überhaupt sinnvoll ist? ;)
-
fatfreddy schrieb:
Mal eine ganz andere Frage: Hältst Du es wirklich für sinnvoll, ALLE Metatags dynamisch zu generieren, sofern die Verwendung der einzelnen Tags überhaupt sinnvoll ist? ;)
Nein, ist es nicht.
Darum wollte ich die Metatags in der index.php ungefähr so einbinden:
$foobar->set_meta('description', 'keywords')
Also, dass ich die Description und die Keywords bei jeder Seite eingebe, und alles andere gleich bleibt.
Kannst du mir den Code umschreiben? -
<?php class Page{ private $meta = array(); public function get_meta() { foreach($this->meta AS $singlemeta){ $out .= '<meta name="' . $singlemeta['name'] . '" content="' . $singlemeta['content'] . '">\n'; } return $out; } public function set_meta($desc, $content){ $this->meta[] = array('name' => $desc, 'content' => $content); } } ?>
Aber bemüh Dich mal bitte demnächst selbst... Es muss ja nicht perfekt sein, aber ein Lösungsansatz wäre schon gut, damit Du wenigstens selbst noch ein bisschen mitdenkst -
Ich habe das ganze jetzt ein wenig umgeschrieben:
function set_meta($description, $keywords) { $this->meta[] = array( 'name' => 'author', 'content' => '', 'name' => 'publisher', 'content' => '', 'name' => 'copyright', 'content' => '', 'name' => 'robots', 'content' => 'index, follow', 'name' => 'revisit-after', 'content' => '', 'name' => 'content-language', 'content' => 'de,ch,at', 'name' => 'description', 'content' => '$description', 'name' => 'keywords', 'content' => '$keywords', 'name' => 'page-type', 'content' => 'Private Homepage', 'name' => 'audience', 'content' => 'Alle', 'name' => 'distribution', 'content' => 'global', ); } function get_meta() { foreach ($this->meta AS $metatag) $meta .= '<meta name="' . $metatag['name'] . '" content="' . $metatag['content'] . '">'; return $meta; }
Das Problem bei dem Code ist, dass mir nur 'name' => 'distribution', 'content' => 'global', ausgegeben wird, und nicht die anderen. Woran kann das liegen?
Welche Metatags davon sind wirklich sinnvoll? -
Der Code, den Du gerade nochmal gepostet hast, ist auch Quatsch.
Du überschreibst ja die Werte immer wieder. Du musst für jeden Metatag ein eigenes Array als Element von $meta definieren, so wie ich das im zweiten Post schon geschrieben habe...
Jetzt habe ich Dein Ansinnen auch erst verstanden - also Du möchtest mit der Methode set_meta() einzelne Parameter des ganzen "Metataghaushalts" setzen?
Dann übergib der Funktion ein Array mit den Werten, das ist flexibler, als so viele Argumente zu übergeben... -
ferdinand24 schrieb:
Der Code, den Du gerade nochmal gepostet hast, ist auch Quatsch.
Du überschreibst ja die Werte immer wieder. Du musst für jeden Metatag ein eigenes Array als Element von $meta definieren, so wie ich das im zweiten Post schon geschrieben habe...
Jetzt habe ich Dein Ansinnen auch erst verstanden - also Du möchtest mit der Methode set_meta() einzelne Parameter des ganzen "Metataghaushalts" setzen?
Dann übergib der Funktion ein Array mit den Werten, das ist flexibler, als so viele Argumente zu übergeben...
Ich habe den Code nochmal umgeschrieben:
function set_meta($description, $keywords) { $this->meta = array( array('name' => 'author', 'content' => 'David Lohmann'), array('name' => 'publisher', 'content' => 'David Lohmann'), array('name' => 'copyright', 'content' => 'David Lohmann'), array('name' => 'robots', 'content' => 'index, follow'), array('name' => 'revisit-after', 'content' => '3 days'), array('name' => 'content-language', 'content' => 'de,ch,at'), array('name' => 'description', 'content' => '$description'), array('name' => 'keywords', 'content' => '$keywords'), array('name' => 'page-type', 'content' => 'Private Homepage'), array('name' => 'audience', 'content' => 'Alle'), array('name' => 'distribution', 'content' => 'global') ); foreach ($this->meta AS $metatag) $meta .= '<meta name="' . $metatag['name'] . '" content="' . $metatag['content'] . '">'; echo $meta; }
Jetzt ist nur noch ein Problem, dass der der description die Variable $description ausgegeben wird, und nicht der Inhalt der Variable. Wie kann ich das noch ändern? -
Jetzt ist nur noch ein Problem, dass der der description die Variable $description ausgegeben wird, und nicht der Inhalt der Variable. Wie kann ich das noch ändern?
Na denk mal einen Moment selbst drüber nach...
Die Strings fasst Du in Quotes ein, weil es Ausdrücke sind.
Variablen müsstest Du, damit sie nicht als Ausdrücke gewertet werden, also ohne Quotes dem Arrayelement zuweisen... -
ferdinand24 schrieb:
Jetzt ist nur noch ein Problem, dass der der description die Variable $description ausgegeben wird, und nicht der Inhalt der Variable. Wie kann ich das noch ändern?
Na denk mal einen Moment selbst drüber nach...
Die Strings fasst Du in Quotes ein, weil es Ausdrücke sind.
Variablen müsstest Du, damit sie nicht als Ausdrücke gewertet werden, also ohne Quotes dem Arrayelement zuweisen...
Achso, sorry ;) Also, so:
array('name' => 'description', 'content' => $description), array('name' => 'keywords', 'content' => $keywords),
Könntest du mir bei der Ausgabe
foreach ($this->meta AS $metatag) $meta .= '<meta name="' . $metatag['name'] . '" content="' . $metatag['content'] . '">'; echo $meta;
am Ende noch was einfügen, damit jeder Metatag in einer Zeile steht. Ich weiß, dass es mit \n geht, aber ich weiß nicht, wo das hinkommt -
Könntest du mir bei der Ausgabe am Ende noch was einfügen, damit jeder Metatag in einer Zeile steht. Ich weiß, dass es mit \n geht, aber ich weiß nicht, wo das hinkommt
\n ist ein Newline-Zeichen und das kommt natürlich da hin, wo eine neue Zeile anfangen soll:
$meta .= '<meta name="' . $metatag['name'] . '" content="' . $metatag['content'] . '">\n';
-
ferdinand24 schrieb:
Könntest du mir bei der Ausgabe am Ende noch was einfügen, damit jeder Metatag in einer Zeile steht. Ich weiß, dass es mit \n geht, aber ich weiß nicht, wo das hinkommt
\n ist ein Newline-Zeichen und das kommt natürlich da hin, wo eine neue Zeile anfangen soll:
$meta .= '<meta name="' . $metatag['name'] . '" content="' . $metatag['content'] . '">\n';
Das habe ich so schon versucht, aber dann wird auf der Startseite: \n\n\n\n\n\n\n\n\n\n\n ausgegeben (für jedes Metatag ein \n) -
Das habe ich so schon versucht, aber dann wird auf der Startseite: \n\n\n\n\n\n\n\n\n\n\n ausgegeben (für jedes Metatag ein \n)
Okay, warum auch immer, aber das liegt an den Single-Quotes. Mit Double-Quotes geht es:
$out .= "<meta name=\"" . $singlemeta['name'] . "\" content=\"" . $singlemeta['content'] . "\">\n";
-
ferdinand24 schrieb:
Das habe ich so schon versucht, aber dann wird auf der Startseite: \n\n\n\n\n\n\n\n\n\n\n ausgegeben (für jedes Metatag ein \n)
Okay, warum auch immer, aber das liegt an den Single-Quotes. Mit Double-Quotes geht es:
$out .= "<meta name=\"" . $singlemeta['name'] . "\" content=\"" . $singlemeta['content'] . "\">\n";
Okay, vielen Dank!
Jetzt funktioniert es! -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage