kostenloser Webspace werbefrei: lima-city


Metadaten objektorientiert mit PHP einbinden

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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?
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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 :cool:



    Viele Grüße,
    F.


    Beitrag zuletzt geändert: 5.12.2011 19:15:36 von ferdinand24
  4. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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 :cool:



    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?
  5. 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.
  6. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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!
  7. 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? ;)
  8. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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?
  9. <?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 ;-)
  10. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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?
  11. 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...
  12. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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?
  13. 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...
  14. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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
  15. 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';

  16. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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)
  17. 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";
  18. Autor dieses Themas

    php-oop

    php-oop hat kostenlosen Webspace.

    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!
  19. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!