TYPO3 7.6:如何在外部PHP文件中获取TypoScript声明的页面变量
在TYPO3 404外部PHP文件中获取页面TypoScript变量的方法
我懂你这种头疼的情况——在TYPO3里用TypoScript定义了页面变量,结果在404错误处理的外部PHP文件里死活找不到访问的路子,打印全局变量又太杂根本看不全。给你几个实用的方法,亲测有效:
直接访问TSFE的TypoScript配置数组
在正常的前端请求中,页面的TypoScript配置会被解析到$GLOBALS['TSFE']->tmpl->setup数组里。你定义的page.10.variables对应的数组路径是$GLOBALS['TSFE']->tmpl->setup['page.']['10.']['variables.'](注意TypoScript里的每个带.的节点,在数组里都会保留带.的键名)。你可以这样写代码:// 先检查TSFE对象和目标变量是否存在,避免报错 if (isset($GLOBALS['TSFE']) && isset($GLOBALS['TSFE']->tmpl->setup['page.']['10.']['variables.'])) { $pageVariables = $GLOBALS['TSFE']->tmpl->setup['page.']['10.']['variables.']; // 获取你定义的someId值 $someId = $pageVariables['someId.']['value']; var_dump($someId); // 输出55 }要是怕找错路径,可以先打印
$GLOBALS['TSFE']->tmpl->setup['page.']['10.'],范围小了就容易定位了。当TSFE未初始化时,手动加载配置
有些404处理的PHP文件可能是直接被调用的,没有完整初始化前端环境,这时候就需要手动初始化TSFE来加载TypoScript:// 适配TYPO3 6.x/7.x版本的写法 define('TYPO3_MODE', 'FE'); require_once(PATH_t3lib . 'class.t3lib_div.php'); require_once(PATH_tslib . 'class.tslib_fe.php'); // 创建并初始化TSFE实例 $GLOBALS['TSFE'] = t3lib_div::makeInstance('tslib_fe'); $GLOBALS['TSFE']->initFEuser(); $GLOBALS['TSFE']->initPageAndRootline(); $GLOBALS['TSFE']->initTemplate(); $GLOBALS['TSFE']->getConfigArray(); // 现在就能获取变量了 $pageVariables = $GLOBALS['TSFE']->tmpl->setup['page.']['10.']['variables.'] ?? []; var_dump($pageVariables);如果你用的是TYPO3 9+的新版本,类名和路径有变化,改成这样:
use TYPO3\CMS\Core\Utility\GeneralUtility; use TYPO3\CMS\Frontend\Controller\TypoScriptFrontendController; // 替换成你的404页面UID $pageUid = 123; $tsfe = GeneralUtility::makeInstance(TypoScriptFrontendController::class, $GLOBALS['TYPO3_CONF_VARS'], $pageUid, 0); $tsfe->initFEuser(); $tsfe->initPageAndRootline(); $tsfe->initTemplate(); $tsfe->getConfigArray(); $variables = $tsfe->tmpl->setup['page.']['10.']['variables.'] ?? [];解析复杂TypoScript对象的值
要是你的变量不是简单的TEXT.value,而是用了更复杂的TypoScript对象(比如从数据库取值、拼接内容),直接取value可能得不到最终结果,这时候要用TYPO3的内容对象API来解析:if (isset($GLOBALS['TSFE']->cObj) && isset($pageVariables['someId.'])) { $parsedValue = $GLOBALS['TSFE']->cObj->cObjGetSingle($pageVariables['someId.']['value'], $pageVariables['someId.']); var_dump($parsedValue); }
内容的提问来源于stack exchange,提问作者distante
相关产品推荐
相关产品推荐

