我希望我的新闻文章 URL 采用以下形式:http ://domain.com/news/news-title-for-seo-and-usability-324/
而且我只希望新闻 id 用于解码,并且仅出于 SEO 目的添加标题。
如何使用 RealURL、CoolURI 或其他任何东西来完成它?
编辑:到目前为止,我设法用以下两个用户函数做我想做的事:
array(
'GETvar' => 'tx_news_pi1[news]',
'userFunc' => 'EXT:speciality/Classes/Hooks/RealUrlUserFunc.php:&Tx_Speciality_Hooks_RealUrlUserFunc->main',
'lookUpTable_fake' => array(
'table' => 'tx_news_domain_model_news',
'id_field' => 'uid',
'alias_field' => 'title',
'addWhereClause' => ' AND NOT deleted AND NOT hidden',
'useUniqueCache' => 1,
'useUniqueCache_conf' => array(
'strtolower' => 1,
'spaceCharacter' => '-',
'encodeTitle_userProc' => 'EXT:speciality/Classes/Hooks/RealUrlUserFunc.php:&Tx_Speciality_Hooks_RealUrlUserFunc->user_newsid',
),
),
),
和用户函数:
class Tx_Speciality_Hooks_RealUrlUserFunc {
public function main(array $params, $parent) {
$this->pObj = $parent;
if($params['decodeAlias']) {
return $this->alias2id($params);
} else {
return $this->id2alias($params);
}
}
function alias2id($params){
return array_pop(explode('-', $params['value']));
}
function id2alias($params){
return $this->pObj->lookUpTranslation($params['setup']['lookUpTable_fake'], $params['value'], FALSE);
}
function user_newsid($params) {
if($params['pObj']->orig_paramKeyValues['tx_news_pi1[news]'])
return $params['processedTitle'] ."-". $params['pObj']->orig_paramKeyValues['tx_news_pi1[news]'];
else
return $params['processedTitle'];
}
}
到目前为止唯一的问题是lookUpTranslation 是一个受保护的函数,所以我不得不临时破解Realurl 来公开该函数。
那么如何以正确的方式从我的 userfunc 编码标题?