Die TYPO3-Extensions RealUrl und tt_news sind wohl die am öftesten verwendeten Extensions überhaupt. Doch oft sieht man Programmierer daran scheitern, die sprechenden Pfade noch weiter zu optimieren und zu verkürzen.
Dass sich ein Pfad wie
example.com/news/ article/2011/05/04/ eine-nachricht-mit-ttnews-und-realurl.html
schon besser anhört als ohne RealUrl
example.com/index.php ?id=123&tx_ttnews[tt_news]=456
ist jedem klar. Auch die Tatsache, dass Suchmaschinen sprechende Links höher bewerten, ist auch längst kein Geheimnis mehr.
Aber trotzdem ist hier noch nicht das Ende des Optimums erreicht. Bei Google sind zahlreiche Foren-Einträge von verzweifelten Programmierern findbar, die gern z. B. die Unterordner für das Datum aus der Url entfernen wollen, dabei allerdings gescheitert sind.
Hierzu meine Lösung, wie der News-Pfad auf ein Minimum beschränkt werden kann. In meinem Fall ist die Seite mit der Id 14 meine SinglePid, also die Seite, auf welcher die News im Detail angezeigt werden. Benutzt habe ich die RealUrl-Version 1.10 und tt_news 3.0.1. Der Code-Ausschnitt gehört in die realurl_conf.php im Verzeichnis /typo3conf/ bzw. in die entsprechende PHP-Datei, je nachdem wie sie benannt wurde:
...
// sucht diesen Abschnitt in der RealUrl-Config-Datei oder neu hinzufuegen
'fixedPostVars' => array(
// hier muss nun eure SinglePid statt der 14 rein
'14' => array(
// der folgende Teil ist Standard und aus der tt_news-Doku entnommen
array(
'GETvar' => 'tx_ttnews[tt_news]',
'lookUpTable' => array(
'table' => 'tt_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
),
...
Mit Hilfe dieses kleines Snippets werden fortan News unter der Url "artikel/hier-kommt-der-news-titel.html" erreichbar sein. Ein weiterer Vorteil ist, dass der Seitentitel für die SinglePid (in meinem Fall "Artikel") im Link verwendet wird und auch Mehrsprachigkeit kein Problem darstellt.
Ich habe das bei FiedoMedia.de so gelöst, dass ich noch eine übergeordnete Seite namens "News" erstellt habe, somit sind alle Nachrichten unter /news/artikel/seitentitel/ erreichbar.
Analog dazu ist der Code-Ausschnitt auch mit jeder anderen Extension, welche eine Single-Ansicht bietet, und RealUrl kompatibel:
...
// sucht euch wieder diesen Abschnitt in der RealUrl-Config-Datei
'fixedPostVars' => array(
// hier muss wieder die SinglePid der Extension eingetragen werden
'14' => array(
array(
// hier der $_GET Parameter eurer Extension, der umgewandelt wird
'GETvar' => 'tx_meineextension_pi1[uid]',
'lookUpTable' => array(
// in welcher DB-Tabelle stehen die Werte der Extension?
'table' => 'tx_meineextension_tabellenname',
// nach welchem Feld soll gefiltert werden?
'id_field' => 'uid',
// welches Feld soll fuer die Url verwendet werden?
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
),
...
Sollten Sie Anregungen, Fragen oder Kommentare zu meinem Snippet haben, zögern Sie nicht, die Kommentarfunktion zu benutzen oder diese Seite mit anderen zu teilen. Ich freue mich über jegliches Feedback.
Das wäre echt coll!
Danke für die Lösung!
was mache ich, wenn ich mehrere singleseiten im strukturbaum verteilt habe?
gruß
Solar
verstehe ich nicht ganz. Ich verwende folgenden Code:
'postVarSets' => array(
'_DEFAULT' => array(
'browse' => array(
array( 'GETvar' => 'tx_ttnews[pointer]', 'valueMap' => array('weiter' => '1','weiter' => '2',)),),
// news kategorien
'kategorie' => array (
array(
'GETvar' => 'tx_ttnews[cat]',
'lookUpTable' => array(
'table' => 'tt_news_cat',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
// news artikel
'datum' => array(
array(
'GETvar' => 'tx_ttnews[year]' ,
),
array(
'GETvar' => 'tx_ttnews[month]' ,
),
array(
'GETvar' => 'tx_ttnews[day]' ,
),
array(
'GETvar' => 'tx_ttnews[tt_news]',
'lookUpTable' => array(
'table' => 'tt_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
),
),
Hier kann ich die Ausgabe in der URL steuern wie ich möchte.
Was mein Problem ist, dass sobald ich meine URL nur auf den "Titel meiner News.html" beschränke ich nach dann sowas wie "Titel meiner News.html?undganzvielschrottdahinter" bekomme
Das mit meiner Variante und mit der oben genannten macht kein Unterschied.
Kann mir da einer helfen?
Grüße
Robert
cooler Artikel, jedoch funktioniert es leider mit meiner Config nicht:
<?php
$TYPO3_CONF_VARS['FE']['addRootLineFields'].= ',tx_realurl_pathsegment';
$TYPO3_CONF_VARS['EXTCONF']['realurl'] = array(
'_DEFAULT' => array(
'init' => array(
'enableCHashCache' => 1,
'appendMissingSlash' => 'ifNotFile',
'enableUrlDecodeCache' => 1,
'enableUrlEncodeCache' => 1,
'postVarSet_failureMode' => '',
),
'redirects' => array(),
'preVars' => array(
array(
'GETvar' => 'no_cache',
'valueMap' => array(
'nc' => 1,
),
'noMatch' => 'bypass',
),
array(
'GETvar' => 'L',
'valueMap' => array(
# 'de' => '0',
'en' => '1',
),
'valueDefault' => 'de',
'noMatch' => 'bypass',
),
),
'pagePath' => array(
'type' => 'user',
'userFunc' => 'EXT:realurl/class.tx_realurl_advanced.php:&tx_realurl_advanced->main',
'spaceCharacter' => '-',
'languageGetVar' => 'L',
'expireDays' => 7,
'rootpage_id' => 1,
'firstHitPathCache' => 1,
),
'fixedPostVars' => array(
// hier muss nun eure SinglePid statt der 14 rein
'25' => array(
// der folgende Teil ist Standard und aus der tt_news-Doku entnommen
array(
'GETvar' => 'tx_ttnews[tt_news]',
'lookUpTable' => array(
'table' => 'tt_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
),
),
'postVarSets' => array(
'_DEFAULT' => array(
// news archive parameters
'archive' => array(
array(
'GETvar' => 'tx_ttnews[year]' ,
),
array(
'GETvar' => 'tx_ttnews[month]' ,
'valueMap' => array(
'january' => '01',
'february' => '02',
'march' => '03',
'april' => '04',
'may' => '05',
'june' => '06',
'july' => '07',
'august' => '08',
'september' => '09',
'october' => '10',
'november' => '11',
'december' => '12',
)
),
),
// news pagebrowser
'browse' => array(
array(
'GETvar' => 'tx_ttnews[pointer]',
),
),
// news categories
'select_category' => array (
array(
'GETvar' => 'tx_ttnews[cat]',
),
),
// news articles and searchwords
'article' => array(
array(
'GETvar' => 'tx_ttnews[tt_news]',
'lookUpTable' => array(
'table' => 'tt_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
),
),
),
array(
'GETvar' => 'tx_ttnews[backPid]',
),
array(
'GETvar' => 'tx_ttnews[swords]',
),
),
),
),
// configure filenames for different pagetypes
'fileName' => array(
'defaultToHTMLsuffixOnPrev' => 1,
'index' => array(
'print.html' => array(
'keyValues' => array(
'type' => 98,
),
),
'rss.xml' => array(
'keyValues' => array(
'type' => 100,
),
),
'rss091.xml' => array(
'keyValues' => array(
'type' => 101,
),
),
'rdf.xml' => array(
'keyValues' => array(
'type' => 102,
),
),
'atom.xml' => array(
'keyValues' => array(
'type' => 103,
),
),
),
),
),
);
?>
Ich bekomme immer "page not found" "Reason: Segment "presse-detail" was not a keyword for a postVarSet as expected on page with id=1."
ID=1 ist meine Root page.
Der link ist: http://www.example.de/presse-detail/test-news-1.html
Ich bin schon am Verzweifeln...
Vielen Dank schon mal!