Um die URLs für Extbase Detail-Views zu kürzen sind mehrere Schritte erforderlich. Zunächst muss die Reihenfolge der Actions in der ext_localconf.php getauscht werden, so dass die show-Action die erste ist und somit per default aufgerufen wird. Dann konfiguriert man das Plugin über die setup.txt mit den Parametern "skipDefaultArguments" sowie "callDefaultActionIfActionCantBeResolved". Das bewirkt, dass default Parameter (in diesem Falle unsere Action "show") nicht an die URL gehängt werden und dass die default Action (die erste aus der ext_localconf.php) aufgerufen wird, wenn keine andere Action per Parameter übergeben wird. Anschließend wird RealURL über das Segment "fixedPostVars" für die Seite der Detailansicht der Extension Datensätze konfiguriert.
typo3conf/ext/blog/ext_localconf.php
\TYPO3\CMS\Extbase\Utility\ExtensionUtility::configurePlugin(
'Vendor.' . $_EXTKEY,
'Pi1',
array(
'Post' => 'show, list, listLatest',
),
array(
)
);
typo3conf/ext/blog/Configuration/Typoscript/setup.txt
plugin.tx_blog {
features {
skipDefaultArguments = 1
}
mvc {
callDefaultActionIfActionCantBeResolved = 1
}
}
typo3conf/realurl_conf.php
'fixedPostVars' => array(
'blogDetailPage' => array(
array(
'GETvar' => 'tx_blog_pi1[post]',
'lookUpTable' => array(
'table' => 'tx_blog_domain_model_post',
'id_field' => 'uid',
'alias_field' => 'title',
'enable404forInvalidAlias' => 1,
'addWhereClause' => ' AND NOT deleted',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-'
),
),
),
),
'5' => 'blogDetailPage', // Pid der Detailansicht
),
Das Resultat sind schöne kurze und bei Suchmaschinen besonders beliebte URLs für die Detailansichten der Datensätze:
http://www.domain.ltd/blog.html
http://www.domain.ltd/blog/post/das-ist-ein-toller-post.html
Das Ganze lässt sich noch etwas weiter optimieren für den Fall, dass sich die List-View und die Detail-View auf der gleichen Seite befinden sollen. Hier muss zusätzlich in der showAction() des Controllers der Parameter $post optional sein und wenn dieser NULL ist, ein forward() auf die listAction stattfinden.
Welche Variante die bessere aus SEO-Sicht ist, darüber könnte man nun ausgiebig diskutieren. Beide Varianten haben ihre Vor- und Nachteile. Das Ergebnis wäre jedenfalls wie folgt:
http://www.domain.ltd/blog.html
http://www.domain.ltd/blog/das-ist-ein-toller-post.html
Kommentare
IMO gehört in den fixedPostVars Array bei lookuptable noch der Eintrag 'enable404forInvalidAlias' => 1 dazu. Das bewirkt, dass der Server Status 404 zurück gibt, wenn zB ein Artikel gelöscht oder falsch verlinkt wurde, statt Status 500.
Gruß aus Münster,
Gunnar
// Pid der Detailansicht
'5' => array(
änderst in
'myConfig' => array(
...
),
'15' => 'myConfig', // Pid der Detailansicht
kannst du die config für mehrere Seiten nutzen zb:
'15' => 'myConfig', // Pid der Detailansicht 1
'16' => 'myConfig', // Pid der Detailansicht 2
'20' => 'myConfig', // Pid der Detailansicht 3
genau das hab ich lange gesucht :-)
Gruß Alex