Рубрики : (TYPO3, Советы и трюки)
Использование FrontEnd методов в BackEnd TYPO3
Метки : BackEnd, FrontEnd, PHP, TYPO3, TypoScript
Недавно модифицировал админку (backend) и задумался над вопросом как использовать функциональность frontend, например TypoScript конфигурация, генерация картинок, парсинг шаблона. Прогуглив нашел решение. Поскольку в админке другая логика, приходится подключать библиотеки для FrontEnd.
// plugin-baseclass
require_once(PATH_tslib.'class.tslib_pibase.php');
// classes for retrieving the typoscript configuration of the current page
require_once(PATH_t3lib.'class.t3lib_page.php');
require_once(PATH_t3lib.'class.t3lib_tstemplate.php');
require_once(PATH_t3lib.'class.t3lib_tsparser_ext.php');
// class for rendering content, retrieving and substituting markers in templates,...
require_once(PATH_tslib.'class.tslib_content.php');
// tools
require_once(PATH_t3lib.'class.t3lib_div.php');
// extensionmanager
require_once(PATH_t3lib.'class.t3lib_extmgm.php');
require_once(PATH_t3lib.'config_default.php');
// basic configuration of TYPO3 - can be configured via the install tool
require_once(PATH_typo3conf.'localconf.php');
// main frontend class
require_once(PATH_tslib.'class.tslib_fe.php');
// classes for user authentication for frontend and backendusers, sessionmanagement
require_once(PATH_t3lib.'class.t3lib_userauth.php');
require_once(PATH_tslib.'class.tslib_feuserauth.php');
class myFEOutput extends tslib_pibase {
var $id;
var $conf;
function main(){
return "hello world!";
}
}
// creating a fake TSFE object
$TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');
// retrieving the id of the current page
$id = isset($HTTP_GET_VARS['id'])?$HTTP_GET_VARS['id']:0;
// configure the TSFE object
$GLOBALS['TSFE'] = new $TSFEclassName($TYPO3_CONF_VARS, $id, '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();
// create a plugin object
$plugin = t3lib_div::makeInstance('myFEOutput');
// assign a contentobject for rendering content
$plugin->cObj = t3lib_div::makeInstance('tslib_cObj');
$sysPageObj = t3lib_div::makeInstance('t3lib_pageSelect');
// retrieve rootline
$rootLine = $sysPageObj->getRootLine($id);
// create a Typoscript parser object
$TSObj = t3lib_div::makeInstance('t3lib_tsparser_ext');
$TSObj->tt_track = 0;
$TSObj->init();
// parse the templates
$TSObj->runThroughTemplates($rootLine);
$TSObj->generateConfig();
$plugin->conf = $TSObj->setup['plugin.']['myFEOutput.'];
// output html
echo($plugin->main());
require_once(PATH_tslib.'class.tslib_pibase.php');
// classes for retrieving the typoscript configuration of the current page
require_once(PATH_t3lib.'class.t3lib_page.php');
require_once(PATH_t3lib.'class.t3lib_tstemplate.php');
require_once(PATH_t3lib.'class.t3lib_tsparser_ext.php');
// class for rendering content, retrieving and substituting markers in templates,...
require_once(PATH_tslib.'class.tslib_content.php');
// tools
require_once(PATH_t3lib.'class.t3lib_div.php');
// extensionmanager
require_once(PATH_t3lib.'class.t3lib_extmgm.php');
require_once(PATH_t3lib.'config_default.php');
// basic configuration of TYPO3 - can be configured via the install tool
require_once(PATH_typo3conf.'localconf.php');
// main frontend class
require_once(PATH_tslib.'class.tslib_fe.php');
// classes for user authentication for frontend and backendusers, sessionmanagement
require_once(PATH_t3lib.'class.t3lib_userauth.php');
require_once(PATH_tslib.'class.tslib_feuserauth.php');
class myFEOutput extends tslib_pibase {
var $id;
var $conf;
function main(){
return "hello world!";
}
}
// creating a fake TSFE object
$TSFEclassName = t3lib_div::makeInstanceClassName('tslib_fe');
// retrieving the id of the current page
$id = isset($HTTP_GET_VARS['id'])?$HTTP_GET_VARS['id']:0;
// configure the TSFE object
$GLOBALS['TSFE'] = new $TSFEclassName($TYPO3_CONF_VARS, $id, '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();
// create a plugin object
$plugin = t3lib_div::makeInstance('myFEOutput');
// assign a contentobject for rendering content
$plugin->cObj = t3lib_div::makeInstance('tslib_cObj');
$sysPageObj = t3lib_div::makeInstance('t3lib_pageSelect');
// retrieve rootline
$rootLine = $sysPageObj->getRootLine($id);
// create a Typoscript parser object
$TSObj = t3lib_div::makeInstance('t3lib_tsparser_ext');
$TSObj->tt_track = 0;
$TSObj->init();
// parse the templates
$TSObj->runThroughTemplates($rootLine);
$TSObj->generateConfig();
$plugin->conf = $TSObj->setup['plugin.']['myFEOutput.'];
// output html
echo($plugin->main());


#На мой взгляд тут не хватает (missing important thing):
#после всех импортов (after all imports)
require_once(PATH_t3lib.’class.t3lib_timetrack.php’);
# до инициализации TSFE (before TSFE init)
$temp_TTclassName = t3lib_div::makeInstanceClassName(‘t3lib_timeTrack’);
$GLOBALS['TT'] = new $temp_TTclassName();
$GLOBALS['TT']->start();
# без этого на Typo3 например как у меня 4.2.10
# получим Fatal error: Call to a member function push() # on a non-object in //typo3/typo3/sysext/cms/tslib/class.tslib_fe.php on line 893