Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Typo3带有新闻id的RealURL新闻链接_Typo3_Realurl - Fatal编程技术网

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

Typo3带有新闻id的RealURL新闻链接,typo3,realurl,Typo3,Realurl,我希望我的新闻文章URL采用以下形式: 我只希望在解码中使用新闻id,而标题仅用于SEO目的 我如何用RealURL、CoolURI或其他任何东西来完成它 编辑:到目前为止,我通过以下两个userfunc实现了我想要的功能: array( 'GETvar' => 'tx_news_pi1[news]', 'userFunc' => 'EXT:speciality/Classes/Hooks/RealUrlUserFunc.php:&Tx_Speciality_Hooks_Re

我希望我的新闻文章URL采用以下形式:

我只希望在解码中使用新闻id,而标题仅用于SEO目的

我如何用RealURL、CoolURI或其他任何东西来完成它

编辑:到目前为止,我通过以下两个userfunc实现了我想要的功能:

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'];
}
}
以及用户函数:

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\u 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']);
    }
}

谢谢!我将检查它是否有效,然后将您的答案标记为已接受。到目前为止,我已经成功地完成了编码部分:
class Tx_Speciality_Hooks_RealUrlUserFunc{function user_newsid($params){if($params['pObj']->orig_paramKeyValues['Tx news_pi1[news]])return$params['processedTitle'.-“$params['pObj']->orig_paramKeyValues['pObj']['tx_news_pi1[news]]..html';否则返回$params['processedTitle']}
但我不知道如何绕过基于查找的解码,并基于链接中给出的新闻uid进行解码。。。