Zum Inhalt springen

Seitentitel dynamisch ändern?

Erstellt am 16. Mai 2006 · 24 Antworten · letzte Antwort am 29. Januar 2010 · Seite 1 von 2

Tags: SEO, Frage

Tastendrücker ·

Hallo Rène,

das sieht doch eigentlich ganz prima aus. Läuft die Extension denn tatsächlich im USER-Modus? Es reicht vielleicht nicht aus, wenn man das USER_INT-Setzen in der Extension selber auskommentiert.

Schau mal in deinem Haupttemplate in den Typo Script Object Browser in die Rubrik "plugins" und suche nach dem Namen deiner Extension. Ich tippe, sie ist da noch als USER_INT drin.

Schönen Gruß
Sven

steffenk ·
$GLOBALS['TSFE']->set_no_cache();

das sollte man vermeiden ! Das wiederspricht auch dem Typ USER

Ansonsten wie Sven gesagt hat, man kann den Typ auch im ObjectBrowser ändern, ausserdem noch in der ext_localconf.php

t3lib_extMgm::addPItoST43($_EXTKEY,'pi1/class.tx_sksoftlinks_pi1.php','_pi1','list_type',1);

Die 1 ist USER, 0 ist USER_INT

rene_afew ·

Hallo!
Ich habe jetzt im TS meine Ext. ausdrücklich als 'USER' definiert...

plugin.tx_t3xapplikation_pi1 >
plugin.tx_t3xapplikation_pi1 = USER
plugin.tx_t3xapplikation_pi1 {
...
}

...das sehe ich auch im Objekt-Browser.

Leider kommt jetzt meine SingleView nicht mehr.

In meiner SingleView wird eine Sedcard gezeigt - also ein Foto und Daten, die aus der Datenbank ausgelesen werden. Kann es am Inhalt der SingleView liegen?

Warum will meine SingleView nur im USER_INT Modus laufen? Das ...set_no_cache() habe ich jetzt auch weggeleassen.
Gruß Renè

Tastendrücker ·

Hi René,

das kann natürlich viele Ursachen haben. Wie verlinkst du denn zwischen Listen- und Detailansicht? Wodurch unterscheidet dein FE-Plugin (sprich die PHP-Klasse) zwischen den beiden Zuständen? Da würde ich beim Debuggen mal ansetzen. Ist einfach ein zu weites Feld, um hier "mal eben" was Schlaues dazu zu sagen.

Schönen Gruß
Sven

rene_afew ·

Hallo Sven,

So ist der Aufbau meiner pi1/class.tx_t3xMyExt_pi1.php

class tx_t3xMyExt_pi1 extends tslib_pibase {
	var $prefixId = 'tx_t3xMyExt_pi1'; // Same as class name
	var $scriptRelPath = 'pi1/class.tx_t3xMyExt_pi1.php';	// Path to this                      script relative to the extension dir.
	var $extKey = 't3x_MyExt';	// The extension key.
...
function main($content,$conf) {
	
	                $this->conf=$conf;
                        $this->pi_setPiVarDefaults();
                        $this->pi_loadLL();                      
                        $this->pi_USER_INT_obj=1;                                                               
                        
                        // Variablen setzen
                        $content='';                    
                        $marker=array();
                        
          // START Funktionsweichen
                
                       // zur SingleView
                             if (!empty($this->piVars['showUid']))
                            {
                                $content = $this->singleView($this->piVars['showUid'], $this->conf);
                            }
                            
                       // zur ListView
                            else
                            {
                              $content = $this->listView( $this->conf, $this->piVars['uid']);
                            } 
                             
          // STOP Funktionsweichen
          
                        return $this->pi_wrapInBaseClass($content);
                        
            }

# ----------------------------------------------------

	function listView($conf,$uid='') {
...
                        $sql="...'";
                        $res = $GLOBALS['TYPO3_DB']->sql_query($sql);
while($row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res)) {
...
}
return $content;
}
# ----------------------------------------------------
	function singleView($showUid,$conf) {
                       // für die Seite das Caching **deaktivieren** so???
                       // $GLOBALS['TSFE']->set_no_cache();	
...
                        $sql="...'";
                        $res = $GLOBALS['TYPO3_DB']->sql_query($sql);
while($row = $GLOBALS["TYPO3_DB"]->sql_fetch_assoc($res)) {
...
                       $GLOBALS['TSFE']->page['title'] = $row["mein_seitentitel"];
                       $GLOBALS['TSFE']->indexedDocTitle = $row["mein_seitentitel"]; 
...
}
return $content;
}
}

Wie gesagt im USER_INT Modus läuft die Ext. bestens. Schalte ich den USER Modus gibt es keine SingleView mehr.

tt_news läuft übrigens bei mir im USER Modus und jede tt_news SingleView bekommt einen eigenen Title-Tag.

Kannst du oben schon irgendetwas entdecken, was den USER Modus verhindert??
Gruß Renè

Tastendrücker ·

Hi Renè,

kurz und auf die Schnelle:

Zum einen setzt du in der main-Methode die Extension wieder in den USER_INT-Modus, das solltest du besser nicht tun. Ich setze bei meinen Extensions immer

$this->pi_USER_INT_obj=0;

Zum anderen: Die Extension entscheidet offensichtlich anhand $this->piVars['showUid'], in welchem Modus sie laufen soll. Woher kommt dieser Wert? Passiert das über die Verlinkung?
In deinem Quelltext sehe ich keine entsprechende Input-Verarbeitung. Ist da ein Wert drin, wenn du die Extension im Single-Modus aufrufst?
Ich würd mal ein

t3lib_div::debug($this->piVars['showUid']);

in die main-Methode setzen und nachschauen, ob die showUid tatsächlich ankommt.
Wenn nicht, musst du dich sicherlich noch um die Verarbeitung der $_GET-Variablen kümmern.

Schönen Gruß
Sven

rene_afew ·

Hallo!
Ich habe jetzt die Lösung gefunden Und zwar lag es daran, dass das TypoScript Setup nicht vollständig war. Dies mußte ich zum Setup meiner Ext. ergänzen:

 includeLibs.tx_t3x_myExt = EXT:t3x_myExt/pi1/class.tx_t3x_myExt_pi1.php
 plugin.tx_t3x_myExt_pi1 >
 plugin.tx_t3x_myExt_pi1 = USER
 
plugin.tx_t3x_myExt_pi1 {

 userFunc = tx_t3x_myExt_pi1->main
...
}

Jetzt klappt es mit der dynamischen Erzeugung der Seitentitel :-)
Dank nochmal an Sven und steffenk!
Renè

Orion3000 ·

Hallo,

das Thema ist schon alt, aber das Problem noch immer aktuell.

ich hab nämlich das gleiche.

Meine Ext ist vom Typ USER , unter "userFunc" ruf ich auch die richtige Funktion auf ( -> main ) .

und in meiner DetailView steht auch ziemlich weit oben:

$GLOBALS['TSFE']->page['title'] = "Test";
$GLOBALS['TSFE']->indexedDocTitle = "TEST";
( mit einer vorhergehenden DB abfrage )

jetzt eine Bitte an die Meister: wo ist mein Fehler?

Winddancer ·

Hallo zusammen,

das Thema ist ja leider schon etwas älter, aber ich quäle mich da gerade auch mit rum.

Ich lasse meine Extension als User_int laufen, da ich ständig user Eingaben verarbeite und die Extension nicht cachen soll / darf.

Nun suche ich nach einer Möglichkeit den Seitentitel zu beeinflussen. Ist das mit Extension, die als User_int laufen einfach generell nicht möglich?!?!

Viele Grüße

Sven

Sturmi ·

Hallo,

ich glaube es sollte so funktionieren:

Schreibe in deiner Extension einfach mal

$GLOBALS['TSFE']->additionalHeaderData[$this->prefixId] = "<title>Mein Titel</title>";

Damit du aber keine doppelten Title-Tags hast, solltest du den Standard-Title ausschalten mit:

config.noPageTitle = 2

Bitte gebe hier bescheid, ob es so klappte.

Winddancer ·

Hallo Sturmi,

danke erst mal für Deine Antwort. Hatte mir das gestern noch etwas genauer angesehen und anders gelöst.

Wie ich festgestellt habe, wir bei einer Extension, die als user_int läuft, bereits die komplette Seite generiert und in die

$GLOBALS['TSFE']->content

geschrieben. Im Gegensatz zum User Object, wo ich den Titel der Seite per

$GLOBALS['TSFE']->page['title'] = "mein titel"

setzen kann.

Da ich nur in meiner Extension den Titel überschreiben möchte, sonst aber mein normales TS für den Page Title greifen soll, suche und ersetze ich einfach den fertigen Inhalt per regulärem Ausdruck. funktioniert prima. 😉

$GLOBALS['TSFE']->content = ereg_replace("<title>.+<\/title>","<title>".$newpagetitle."</title>",$GLOBALS['TSFE']->content);

(und ja ich weiss, dass ereg_replace veraltet ist... ändere ich noch. 😉)

Sturmi ·

Dafür extra ereg_replace anwerfen, was wieder mehr Arbeit für den Server bedeutet? Dann würde ich eher preg_replace nehmen, da es schneller ist. Den u.s. Code kannst du doch einfach auf der Seite einfügen, wo sich dein Plugin befindet, oder?

Winddancer ·

und um mich noch mal selbst zu zitieren...

(und ja ich weiss, dass ereg_replace veraltet ist... ändere ich noch. 😉)

War nur ne quick & dirty Lösung um die Funktionalität zu prüfen.

Da sich das Plugin über diverse Seiten verteilt (leider auch nicht nur in einem Strang des Seitenbaums), wäre das mit "relativ" viel Arbeit verbunden. Allerdings denke ich nicht, dass dein preg_replace soviel Last erzeugt.

GoSnA ·

Um auch mal meinen Senf dazu zu geben:

Das ganze klappt auch ohne USER_INT und Co.

Einfach per

$GLOBALS['TSFE']->page['title'] = $row['title'];
$GLOBALS['TSFE']->indexedDocTitle = $row['title'];

den titel setzen und die Verlinkungen der Detail-Seite vernünftig realisieren

$markerArray['###TITLE###'] = $this->pi_linkTP_keepPIvars($row['title'],array('showUid' => $row['uid']),true,0,0);

wichtig dabei ist der dritte wert (true) diese Option setzt ein "cHash" Parameter an die URL welches dem Cache sagt, das dies eine andere Seite als die Startseite ist. Dann klappts auch mit dem Titel, zumindest bei mir 😉

GoSnA ·

Naja, wenn du in deinem Formular die Aktion mit hilfe eines Links erstellst in dem der CHASH drin steht sollte das ohne Probleme Funktionieren.

Winddancer ·

Nunja, eigentlich ist der cHash dafür da, Caching für Extension zu ermöglichen, die Parameter per GET Variablen erhalten bspw. index.php?id=3&myextension[​color]=blue.

Allerdings übergebe ich generell alle Werte per POST und es ist außerdem möglich, dass Zugriffe / Datenübergaben von außen erfolgen. Daher weiss ich im Vorfeld schlichtweg nicht welche Parameter eingereicht werden, was mich mit zwei Optionen zurücklässt:

1. Den Cache für die Seite komplette deaktivieren - was nur unnötig Last und Zeit kosten würde.

2. Die Extension als User_int Objekt laufen lassen. Dann wird die Extension zwar nicht mehr gecached, allerdings ist das bei derartigen Usereingaben meiner Meinung nach auch garnicht anders möglich.

Ich lasse mich aber auch gerne eines besseren belehren!

Grüße

Sven