如何:在控制器上下文之外从php访问typoscript变量?

时间:2014-03-20 15:01:31

标签: php controller typo3 typoscript extbase

我想从全局php脚本访问一些typoscript变量,所以我没有一个控制器上下文可以使用。通常我从控制器内部获取这些变量,代码如下:

$this->settings['HallURL'];

如果不在控制器环境中,我怎么能得到同样的东西?变量在我的扩展setup.txt中定义,如下所示:

plugin.tx_bpsmessagecentre {
    settings {
        # cat=plugin.tx_bpsmessagecentre//a; type=string; label=Default URL
        HallURL= Defualt URL
    }
}

由于

PS:我试过这个,但它只在执行扩展名为bpscore时有效,但我希望能够从多个扩展中访问同一个变量(在bpscore的setup.settings中设置)。

$GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscore."]["settings."]["HallURL"];
PS:似乎没有很好的方法可以做到这一点,所以这就是我到目前为止所做的事情 - 在每个扩展中,我在设置文件中声明了常见变量,如下所示:

   plugin.tx_bpsmessagecentre {
        settings {
            # cat=plugin.tx_bpsmessagecentre//a; type=string; label=Default URL
            HallURL= {$siteURL}
        }
    }

typo3包含的常见TS脚本定义了如下变量:

siteURL = mydomain.com

然后在global.php我定义函数如下:

/**
 * getSettings
 * @param string $plugin  the name of the plugin whose settings to get
 * @return array
 */
function getSettings($plugin='tx_bpscore'){
    return $GLOBALS['TSFE']->tmpl->setup['plugin.'][$plugin."."]["settings."];
}

我只是在任何扩展名中的任何地方打电话:

$settings = getSettings('tx_something'); 
$url = $settings["HallURL"];

当然,如果我在Controller上下文中,我可以跳过它,只需调用

$this->settings["HallURL"];

当然有一个问题是,如果我要求global.php文件本身的设置,我必须像这样做一些hacky:

/** 
 * add a  part for each extension
 */
function getDebugb( ){
    if(isset($GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscore."]["settings."]["DEBUGB"]))
    return $GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscore."]["settings."]["DEBUGB"];
    if(isset($GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpsmessagecentre."]["settings."]["DEBUGB"]))
    return $GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpsmessagecentre."]["settings."]["DEBUGB"];
    if(isset($GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscoupons."]["settings."]["DEBUGB"]))
    return $GLOBALS['TSFE']->tmpl->setup['plugin.']["tx_bpscoupons."]["settings."]["DEBUGB"];
    return "";

2 个答案:

答案 0 :(得分:2)

最简单的方法是在所有扩展程序中使用共享设置,例如:

lib.tx_extension_share = {}
tx_extension.settings.share =< lib.tx_extension_share

您也可以询问$GLOBALS['TSFE']->tmpl->setup['tx_extension.']['key']。 但请记住,从概念的角度来看,这并不是很简洁(OOP,SoC)。

答案 1 :(得分:0)

使用ConfigurationManager。

\TYPO3\CMS\Extbase\Configuration\ConfigurationManager->getConfiguration

尝试使用三个CONFIGURATION_TYPE来查看可以获得的内容。你可以从typoscript设置中获得任何东西。

例如,如果您处于Controller上下文

$settings = $configurationManager->getConfiguration(\TYPO3\CMS\Extbase\Configuration\ConfigurationManagerInterface::CONFIGURATION_TYPE_SETTINGS);

将为您提供当前扩展程序的设置。