簡體   English   中英

域的Realurl配置組合語言的獲取參數

[英]Realurl config combination of domain an get-parameter for language

Hidiho,

我有一個TYPO3-Site,每個語言都有很多翻譯。

如果具有特定域,則用於翻譯的Realurl-config可以正常工作。 例如domainname.com,domainname.de,domainname.es等。

現在我想添加一個新的翻譯(葡萄牙語),但是我沒有域名。 我想使用url domainname.com/pt進行新翻譯。

RealUrl是否支持這種不同的使用方式?

后端中的預覽無法正常工作。 語言菜單包含正確的鏈接,但是當打開它時,我得到了標准語言(en)。

在TS中:

configname {
    baseURL = https://www.domainname.com
    sys_language_uid = 0
    language = en
    locale_all = en_EN
    htmlTag_langKey = en
}

[globalVar = GP:L = 0]
configname {
    sys_language_uid = 0
    language = en
    locale_all = en_EN
    htmlTag_langKey = en
}
[global]

[globalVar = GP:L = 1]
configname {
    sys_language_uid = 1
    language = de
    locale_all = de_DE
    htmlTag_langKey = de
    baseURL = https://www.domainname.de
}
[global]

....

#new config for portuguese
[globalVar = GP:L = 3]
    configname {
        sys_language_uid = 3
        language = pt
        locale_all = pt_PT
        htmlTag_langKey = pt
    }
[global]

也許我不知道為此目的正確配置realurl_conf.php。

它來了:

$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
'preVars' => array(
    array(
        'GETvar' => 'L',
        'valueMap' => array(
            'pt' => '3',
        ),
        'valueDefault' => '',
        'noMatch' => 'bypass',
    ),
),
....
);

$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS'] = array(
'encode' => array(
    array(
        'GETvar' => 'L',
        'value' => '',
        'ifDifferentToCurrent' => true,
        'useConfiguration' => '_DEFAULT',
        'urlPrepend' => 'https://www.domainname.com',
    ),
    array(
        'GETvar' => 'L',
        'value' => '0',
        'ifDifferentToCurrent' => true,
        'useConfiguration' => '_DEFAULT',
        'urlPrepend' => 'https://www.domainname.com'
    ),
    array(
        'GETvar' => 'L',
        'value' => '1',
        'ifDifferentToCurrent' => true,
        'useConfiguration' => '_DEFAULT',
        'urlPrepend' => 'https://www.domainname.de'
    ),

    array(
        'GETvar' => 'L',
        'value' => '2',
        'ifDifferentToCurrent' => true,
        'useConfiguration' => '_DEFAULT',
        'urlPrepend' => 'https://www.domainname.es'
    ),

    array(
        'GETvar' => 'L',
        'value' => '4',
        'ifDifferentToCurrent' => true,
        'useConfiguration' => '_DEFAULT',
        'urlPrepend' => 'https://www.domainname.cn'
    ),

    array(
        'GETvar' => 'L',
        'value' => '6',
        'ifDifferentToCurrent' => true,
        'useConfiguration' => '_DEFAULT',
        'urlPrepend' => 'https://www.domainname.com'
    ),

),

'decode' => array(
    'www.domainname.com' => array(
        'GETvars' => array(
            'L' => '0',
        ),
        'useConfiguration' => '_DEFAULT',
    ),

    'www.domainname.de' => array(
        'GETvars' => array(
            'L' => '1',
        ),
        'useConfiguration' => '_DEFAULT'
    ),

    'www.domainname.es' => array(
        'GETvars' => array(
            'L' => '2',
        ),
        'useConfiguration' => '_DEFAULT'
    ),

    'www.domainname.cn' => array(
        'GETvars' => array(
            'L' => '4',
        ),
        'useConfiguration' => '_DEFAULT'
    ),
   ),
);

有什么建議要說realurl它必須使用它的語言3嗎?

Multilanguange / Multidomain配置並非易事……盡管我從未混合使用不同的模式。

乍看之下,最大的問題是您的域配置全部使用相同的[_default]配置-我總是為每個域創建專用的數組,如下所示:

// [_default] stuff

$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.de']  = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.de']['pagePath']['rootpage_id'] = 1;
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.com']  = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['whatever.com']['pagePath']['rootpage_id'] = 1;

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DOMAINS']['encode'] = array(
    array(
        'GETvar' => 'L',
        'value' => '0',
        'useConfiguration' => 'whatever.de',
        'urlPrepend' => 'http://whatever.de',
        'ifDifferentToCurrent' => true,
    ),
    array(
        'GETvar' => 'L',
        'value' => '1',
        'useConfiguration' => 'whatever.com',
        'urlPrepend' => 'http://whatever.com',
        'ifDifferentToCurrent' => true,
    ),
// ...
);

$GLOBALS['TYPO3_CONF_VARS']['EXTCONF']['realurl']['_DOMAINS']['decode'] = array(
    'whatever.de' => array(
        'GETvars' => array(
            'L' => '0',
        ),
        'useConfiguration' => 'whatever.de'
    ),
    'whatever.com' => array(
        'GETvars' => array(
            'L' => '1',
        ),
        'useConfiguration' => 'whatever.com'
    ),
// ...
);

但是最干凈的解決方案肯定是獲取必要的.pt域,恕我直言。

現在我想添加一個新的翻譯(葡萄牙語),但是我沒有域名。 我想使用url domainname.com/pt進行新翻譯。

RealUrl是否支持這種不同的使用方式?

不,不是的。 它可以是域,也可以是語言段。

謝謝你們的回答。

我找到了解決方案。 全部都放棄了編碼/解碼塊和preVars。 另外,出於我的目的(骯臟的修復),我特別迷上了UrlDecoder(函數setRequestVariables(){...})。 一種配置足以使real_url工作來混合多域參數和語言參數。

realurl_conf.php

$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'] = array(
    'init' => array(
        'enableCHashCache' => true,
        'appendMissingSlash' => 'ifNotFile',
        'enableUrlDecodeCache' => true,
        'emptyUrlReturnValue' => '/',
    ),
    'preVars' => array(
        array(
            'GETvar' => 'L',
            'valueMap' => array(
                'en' => '0',
                'de' => '1',
                'es' => '2',
                'pt' => '3',
                'cn' => '4',
                'it' => '5',
                'us' => '6',
                'fr' => '7',
            ),
            'valueDefault' => 'en',
            'noMatch' => 'bypass',
        ),
    ),
    ...
);

現在,結束碼/解碼塊:

$TYPO3_CONF_VARS['EXTCONF']['realurl']['example.org'] = $TYPO3_CONF_VARS['EXTCONF']['realurl']['_DEFAULT'];
$TYPO3_CONF_VARS['EXTCONF']['realurl']['_DOMAINS'] = array(
    'encode' => array(
        array(
            'GETvar' => 'L',
            'value' => '0',
            'useConfiguration' => 'example.org',
            'urlPrepend' => 'https://www.example.org'
        ),
        array(
            'GETvar' => 'L',
            'value' => '1',
            'useConfiguration' => 'example.org',
            'urlPrepend' => 'https://www.example.de'
        ),
        array(
            'GETvar' => 'L',
            'value' => '2',
            'useConfiguration' => 'example.org',
            'urlPrepend' => 'https://www.example.es'
        ),
        array(
            'GETvar' => 'L',
            'value' => '3',
            'useConfiguration' => 'example.org',
            'urlPrepend' => 'https://www.example.org/pt'
        ),
        array(
            'GETvar' => 'L',
            'value' => '4',
            'useConfiguration' => 'example.org',
            'urlPrepend' => 'https://www.example.cn'
        ),
        array(
            'GETvar' => 'L',
            'value' => '6',
            'useConfiguration' => 'example.org',
            'urlPrepend' => 'https://www.example.org/us'
        ),
        array(
            'GETvar' => 'L',
            'value' => '7',
            'useConfiguration' => 'example.org',
            'urlPrepend' => 'https://www.example.org/fr'
        )
    ),

    'decode' => array(
        'example.com' => array(
            'GETvars' => array(
                'L' => '0',
            ),
            'useConfiguration' => 'example.org'
        ),
        'example.de' => array(
            'GETvars' => array(
                'L' => '1',
            ),
            'useConfiguration' => 'example.org'
        ),
        'example.es' => array(
            'GETvars' => array(
                'L' => '2',
            ),
            'useConfiguration' => 'example.org'
        ),
        'example.pt' => array(
            'GETvars' => array(
                'L' => '3',
            ),
            'useConfiguration' => 'example.org'
        ),
        'example.cn' => array(
            'GETvars' => array(
                'L' => '4',
            ),
            'useConfiguration' => 'example.org'
        ),
        'example.us' => array(
            'GETvars' => array(
                'L' => '6',
            ),
            'useConfiguration' => 'example.org'
        ),
        'example.fr' => array(
            'GETvars' => array(
                'L' => '7',
            ),
            'useConfiguration' => 'example.org'
        )
    )
);

RealurlUrlDecoder.php

use DmitryDulepov\Realurl\Cache\UrlCacheEntry;
class RealurlUrlDecoder extends \DmitryDulepov\Realurl\Decoder\UrlDecoder {


    /**
     * Sets variables after the decoding.
     *
     * @param UrlCacheEntry $cacheEntry
     */
    public function setRequestVariables(UrlCacheEntry $cacheEntry) {

        $languageWithoutDomain = array(
            3 => '/pt/',
            6 => '/us/',
            7 => '/fr/',
        );

        if (in_array(substr($_SERVER['REQUEST_URI'], 0, 4), $languageWithoutDomain)) {
            foreach ($languageWithoutDomain as $key => $value) {
                 if(substr($_SERVER['REQUEST_URI'], 0, 4) == $value){
                    $requestVariables = $cacheEntry->getRequestVariables();
                    if(isset($requestVariables['L'])){
                        $requestVariables['L'] = $key;
                        $cacheEntry->setRequestVariables($requestVariables);
                    } 
                }
             }
         }

        parent::setRequestVariables($cacheEntry);

    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM