php - 如何: access typoscript variables from php outside of a controller context?

标签 php controller typo3 typoscript extbase

我想从全局 php 脚本访问一些 typescript 变量,这样我就没有 Controller 上下文可以使用。通常我从 Controller 内部获取这些变量,代码如下:

$this->settings['HallURL'];

不在 Controller 上下文中时如何获得相同的结果?这些变量在我的扩展 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:似乎没有很好的方法来做到这一点,所以这就是我到目前为止所要做的 - 在每个扩展中,我在设置文件中声明公共(public)变量,如下所示:

   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 文件本身调用设置,我必须做一些像这样的黑客操作:

/** 
 * 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 "";

最佳答案

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

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

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

关于php - 如何: access typoscript variables from php outside of a controller context?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22536965/

相关文章:

php - MySQL同时查找小写字母和大写字母的搜索问题

ruby-on-rails - Ruby on Rails 修改而不是编辑

typo3 - 如何在typo3 7 TCA 中添加自定义向导?

typo3 - 如何在自定义位置的 typo3 Dam 模块中插入自定义字段?

php - 无法在 SQLite 表中插入字符串,但可以插入数字

php - 如何找到图像中的主色?

javascript - AngularJS 工厂变量变得未定义

javascript - ng-重复对象中的名称数组,但不起作用

mysql - TYPO3 MySQL 选择查询,在 phpMyAdmin 中有效,但在 TYPO3 中无效

javascript - 如何根据单击元素的位置使元素出现在右侧或左侧?