我需要在调度程序任务中创建指向前端网站的链接。我搜索并环顾四周,我发现的是一个启动TSFE的示例脚本。之后我可以启动tslib_cObj来创建一些链接;我想。
但是当我尝试使用$ cObj-> typoLink_URL(1)创建一个typolink时,我得到的是一个递归错误; FE。或任何其他允许创建typolink的方法。
以下是我用来在$ GLOBALS中启动TSFE的脚本,就像在前端的扩展中工作一样:
<?php
function initTSFE($pageUid = 1, $overrule = FALSE) {
// declare
$temp_TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');
// begin
if (!is_object($GLOBALS['TT']) || $overrule === TRUE) {
$GLOBALS['TT'] = new t3lib_timeTrack;
$GLOBALS['TT']->start();
}
if ((!is_object($GLOBALS['TSFE']) || $overrule === TRUE) && is_int($pageUid)) {
// builds TSFE object
$GLOBALS['TSFE'] = new $temp_TSFEclassName($GLOBALS['TYPO3_CONF_VARS'],
$pageUid, $type=0, $no_cache=0, $cHash='', $jumpurl='', $MP='', $RDCT='');
// builds rootline
$GLOBALS['TSFE']->sys_page = t3lib_div::makeInstance('t3lib_pageSelect');
$rootLine = $GLOBALS['TSFE']->sys_page->getRootLine($pageUid);
// init template
$GLOBALS['TSFE']->tmpl = t3lib_div::makeInstance('t3lib_tsparser_ext');
$GLOBALS['TSFE']->tmpl->tt_track = 0;// Do not log time-performance information
$GLOBALS['TSFE']->tmpl->init();
// this generates the constants/config + hierarchy info for the template.
$GLOBALS['TSFE']->tmpl->runThroughTemplates($rootLine, $start_template_uid=0);
$GLOBALS['TSFE']->tmpl->generateConfig();
$GLOBALS['TSFE']->tmpl->loaded=1;
// get config array and other init from pagegen
$GLOBALS['TSFE']->getConfigArray();
$GLOBALS['TSFE']->linkVars = ''.$GLOBALS['TSFE']->config['config']['linkVars'];
if ($GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP']) {
foreach (t3lib_div::trimExplode(',',$GLOBALS['TSFE']->config['config']['simulateStaticDocuments_pEnc_onlyP'],1) as $temp_p) {
$GLOBALS['TSFE']->pEncAllowedParamNames[$temp_p]=1;
}
}
// builds a cObj
$GLOBALS['TSFE']->newCObj();
}
}
我在调度程序任务中尝试的是以下内容:
<?php
public function execute() {
$this->initTSFE();
$cObj = t3lib_div::makeInstance('tslib_cObj');
var_dump($cObj->getTypoLink_URL(1));exit;
}
这通过调度程序执行此任务时向我显示以下结果: http://i.imgur.com/DHzys.png
非常感谢任何帮助=)
注意:getTypoLink_URL中的1值确实作为Typo3中的页面存在。
答案 0 :(得分:1)
我尝试使用的initTSFE()方法似乎有问题。我不确定是什么,但我找到了一个似乎有用的不同版本:
public function initTSFE($pageUid=1) {
require_once(PATH_tslib.'class.tslib_fe.php');
require_once(PATH_t3lib.'class.t3lib_userauth.php');
require_once(PATH_tslib.'class.tslib_feuserauth.php');
require_once(PATH_t3lib.'class.t3lib_cs.php');
require_once(PATH_tslib.'class.tslib_content.php');
require_once(PATH_t3lib.'class.t3lib_tstemplate.php');
require_once(PATH_t3lib.'class.t3lib_page.php');
$TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');
if (!is_object($GLOBALS['TT'])) {
$GLOBALS['TT'] = new t3lib_timeTrack;
$GLOBALS['TT']->start();
}
// Create the TSFE class.
$GLOBALS['TSFE'] = new $TSFEclassName($GLOBALS['TYPO3_CONF_VARS'],$pageUid,'0',1,'','','','');
$GLOBALS['TSFE']->connectToMySQL();
$GLOBALS['TSFE']->initFEuser();
$GLOBALS['TSFE']->fetch_the_id();
$GLOBALS['TSFE']->getPageAndRootline();
$GLOBALS['TSFE']->initTemplate();
$GLOBALS['TSFE']->tmpl->getFileName_backPath = PATH_site;
$GLOBALS['TSFE']->forceTemplateParsing = 1;
$GLOBALS['TSFE']->getConfigArray();
}