繁体   English   中英

带有新闻ID的Typo3 RealURL新闻链接

[英]Typo3 RealURL news links with news id

我希望新闻文章的网址采用以下格式: http : //domain.com/news/news-title-for-seo-and-usability-324/

我只希望新闻ID用于解码,而标题仅用于SEO。

如何使用RealURL,CoolURI或其他任何内容来完成它?

编辑:到目前为止,我设法通过以下两个userfuncs完成了我想要做的事情:

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的标题?

也许有一种更简单的方法可以执行此操作,但是使用钩子在RealUrl中绝对可以实现。 关键字是“ encodeTitle_userProc”,请参见此处: http ://docs.typo3.org/typo3cms/extensions/realurl/1.12.7/Realurl/ClasstxRealurlAdvancedphp/Configuration/Index.html?highlight=encodetitle_userproc

这是一个简单的示例,用于从URL中删除注册的标志:

RealUrlConfig:

'product' => array(
    array(
        'GETvar' => 'tx_myextension[product]',
        'lookUpTable' => array(
            ....
            'useUniqueCache_conf' => array(
                'strtolower' => 1,
                'spaceCharacter' => '-',
                'encodeTitle_userProc' => 'EXT:tx_myextension/Classes/Hooks/RealUrlUserFunc.php:&Tx_Myextension_Hooks_RealUrlUserFunc->user_productsTitle',
            ),
            ...
        ),
    ),
),

和钩子类:

class Tx_Myextension_Hooks_RealUrlUserFunc {
    function user_productsTitle($params) {
        return preg_replace('/[R]{1}/', '', $params['processedTitle']);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM