Zum Inhalt springen

Metatags im Seitenbaum vererben

Erstellt am 4. Juli 2007 · 6 Antworten · letzte Antwort am 5. Juli 2007

Tags: SEO, Frage

.​joe ·

Hi,

ich hab jetzt 2 Extensions für Metatags getestet. Bei beiden habe ich ein Problem festgestellt.

Also was ich suche:

Wenn ich in einer Wurzelseite Metatags angebe dann hätte ich gerne, dass diese auf alle Unterseiten automatisch übertragen werden und durch Angaben in den Unterseiten noch spezifische zusätzliche hinzugefügt werden können.

Zum andern hatte ich das Problem das offenbar gerne der Seitentyp "Erweitert" zum Eintragen der Metatags verwendet wird. Soweit ja sicherlich sinnvoll, allerdings sind bei mir die Wurzelseiten meist nur Shortcuts zu einer Unterseite um die Navigationsstruktur zu erhalten.

Hoffe ihr könnt mir helfen.

Kilkenny ·

Hallo .joe,
spricht etwas dagegen dies in ein ext. Template zu packen? etwa so:

page.meta {
   KEYWORDS = 
   DESCRIPTION = 
   AUTHOR = 
   PUBLISHER = 
   COPYRIGHT = 
   REVISIT-AFTER = 30 days
   AUDIENCE = all
   ROBOTS = all,index,follow
   PAGE-TOPIC = 
   LANGUAGE = deutsch,de
}

ext. Templates vererben sich ja nach unten hin und können auf anderen Seiten angepasst werden.

Ach ja, wenn du etwas unter "Erweitert" einstellst und dann in "Shortcut" umwandelst, dann funktionieren die Einstellungen aus "Erweitert" noch immer, daher kannst du da ruhig kurz hin und her switchen und Daten anpassen.

Gruß
Kilkenny

.​joe ·

Hi,

ja das würde funktionieren, aber ich möchte meinen Redakteuren das Template eigentlich grundsätzlich ersparen. Genau wie tricksereien zwischen Erweitert/Shortcut wechseln.

Tricksen kann ich im Hintergrund genug, aber nach außen muss das wenigstens ein wenig professionell wirken 😉

.​joe ·

Hi just2b.

Auf diesen Schnippsel bin ich schon mehrfach gestoßen von dir beim Suchen.
Aber das löst doch mein Problem nicht. Denn dort wird einfach auf eine Standarddefinition zugegriffen wenn keine explizit vorgegeben sind.

Das ist aber nicht direkt das was ich mir vorgestellt hatte.

.​joe ·

Ich hab mir nun mal Gedanken gemacht wie ich das selbst implementieren könnte.

Es reicht ja eigentlich eine Klasse, welche einmal in der Datenbank ausgehend von der aktuellen Seite aufwärts sucht welche Metatags angezeigt werden sollen.

Über die Methoden dachte ich mir könnte man dann die einzelnen Eigenschaften abfragen die dabei gefunden wurden.

Bei eben dieser Abfrage bin ich jetzt allerdings auf ein Problem gestoßen 🙁

page.meta.description = USER
page.meta.description.userFunc = user_meta->description

Das schreibt mir dann nur "USER" in den Metatag.

Über

page.meta.description.preUserFunc = user_meta->description

hat es dann geklappt das zumindest die Funktionsrückgabe angezeigt wird. Um zu testen ob bei einem zweiten Aufruf auf der gleichen Instanz gearbeitet wird habe ich einfach mal einen internen Zähler eingebaut. Ergebnis: Jeder Aufruf hat seine eigene Instanz.
Da es ineffizient wäre die Datenbank zweimal zu durchsuchen nur weil Description und dann auch Keywords benötigt werden hatte ich gehofft das man auf einer Instanz arbeiten kann. Andere Variante wäre das Ergebnis in einer globalen Variable abzulegen.
Werde ich dann wohl auch tun müssen wenn es nicht anders geht. Vielleicht wisst ihr da ja was.

.​joe ·

Hab nun etwas funktionierendes.

Für alle die mal auf das Problem stoßen schreibe ich nochmal zusammengefasst was ich geändert habe:

In der Datei typo3conf/extTables.php folgende Zeilen hinzufügen um im Seitentyp Shortcut und Standard die Felder Stichworte und Beschreibung zu erhalten:

$GLOBALS['TCA']['pages']['types']['4']['showitem'] = 'hidden;;;;1-1-1, doktype, title;;3;;2-2-2, keywords, description;;;;4-4-4, subtitle, nav_hide, shortcut;;;;3-3-3, shortcut_mode, TSconfig;;6;nowrap;5-5-5, storage_pid;;7, l18n_cfg;';
$GLOBALS['TCA']['pages']['types']['1']['showitem'] = 'hidden;;;;1-1-1, doktype;;2;button, title;;3;;2-2-2, keywords, description;;;;4-4-4, subtitle, nav_hide, TSconfig;;6;nowrap;5-5-5, storage_pid;;7, l18n_cfg';

Die Datei user_meta.php in einem beliebigen Verzeichnis ablegen:

<?
class user_meta {
	function getData() {
		global $user_meta_data;
		
		if(!is_array($user_meta_data)) {
			$id = $GLOBALS['TSFE']->page['uid'];
			$data = array();
			while($id!=0) {
				$getrow = mysql(TYPO3_db, "SELECT pid, description, keywords FROM pages WHERE uid='".$id."'");

	  			$row = mysql_fetch_array($getrow,MYSQL_ASSOC);

	  			if($data['description']=="" && $row['description']!="")
	  				$data['description'] = $row['description'];			
	  			if($row['keywords']!="") {
		  			if($data['keywords']=="")
		  				$data['keywords']=$row['keywords'];
		  			else
			  			$data['keywords']=$row['keywords'].",".$data['keywords'];
		  		}
	  			
	  			$id = $row['pid'];
			}
			$user_meta_data=$data;
		}
		return $user_meta_data;
	}
	
	function description($content, $conf) {
		$data = $this->getData();
		return $data['description'];
	}
	
	function keywords($content, $conf) {
		$data = $this->getData();
		return $data['keywords'];
	}
}
?>

Und zu guter letzt im Haupttemplate:

includeLibs.user_meta = beliebigesVerzeichnis/user_meta.php
page.meta.description.preUserFunc =user_meta->description
page.meta.keywords.preUserFunc =user_meta->keywords

Für Anregungen wie man das ganze "schöner" gestalten kann bin ich nach wie vor zu haben.