TYPO3 eid : AJAX i nie tylko Artur Cichosz Quintinity Interactive
eid czyli extension ID Alternatywna rendering engine TYPO3 Bardzo okrojone srodowisko TYPO3 Podstawowe stale systemowe Dostep do bazy danych localconf.php / ext_localconf.php => czesciowo zaladowane rozszerzenia bez $TCA
Co z tego mamy? Krotki czas odpowiedzi. Standard / typenum=x < 1 sec eid < 0,2 sec
eid zastosowanie : 1. deklaracja EXT:myExt/ext_localconf.php <?php $TYPO3_CONF_VARS['FE']['eID_include']['hello_eID'] = 'EXT:myExt/eID_myTest.php';?>
eid - zastosowanie: 2. scrypt EXT:myExt/eID_myTest.php <?php if (!defined ('PATH_typo3conf')) die ('Could not access this script directly!'); echo 'Hello World at '. date('c');?>
eid - zastosowanie: 3. wywolanie URL: http://www.myproject.pl/?eid=hello_eid OUTPUT: Hello World at 2011-11-04T19:15:28+01:00 CET
AJAX & eid request AJAX Server eid event AJAX Client jquery & Co. response AJAX App TYPO3 content
AJAX App <script type="text/javascript" src="typo3conf/ext/myext/pi1/ajaxtest.js"></script> <input type="button" id="button" onclick="doajax()" value="do AJAX" /> <div id="ajaxoutput"> </div>
AJAX Client / jquery EXT:myExt/pi1/ajaxTest.js function doajax(){ $.ajax({ url: "index.php", type: "GET", cache: false, async: true, data: { eid: "hello_eid",, datatype: "json", success: function(response) { $("#ajaxoutput").html(response[`content`]);, error: function(xmlhttprequest, textstatus, errorthrown) { alert(xmlhttprequest.responsetext); ); return false;
AJAX serwer / eid EXT:myExt/eID_myTest.php <?php if (!defined ('PATH_typo3conf')) die ('Could not access this script directly!'); class ajax_controller { function construct() { tslib_eidtools::connectdb(); //Connect to database function dispatch(){ $data['content'] = 'Hello World at '. date('c'). ' CET'; echo json_encode($data); try { $controller = t3lib_div::makeinstance('ajax_controller'); $controller->dispatch(); catch(exception $e) { header('http/1.1 500 Internal Server Error'); echo $e->getmessage();?>
eid & FE-User session (+ $GLOBALS['TCA']) <?php if (!defined ('PATH_typo3conf')) die ('Could not access this script directly!'); class ajax_controller { var $feuserobj; function construct() { tslib_eidtools::connectdb(); //Connect to database $this->feuserobj = tslib_eidtools::initfeuser(); // Initialize FE user object function dispatch(){ $data['content'] = 'Hello World at '. date('c'). ' CET'; echo json_encode($data); try { $controller = t3lib_div::makeinstance('ajax_controller'); $controller->dispatch(); catch(exception $e) { header('http/1.1 500 Internal Server Error'); echo $e->getmessage();?>
eid + $GLOBALS['TSFE'] <?php [...] function construct() { tslib_eidtools::connectdb(); //Connect to database $this->feuserobj = tslib_eidtools::initfeuser(); // Initialize FE user object // create tsfe and page object instances: $temp_tsfeclassname = t3lib_div::makeinstanceclassname('tslib_fe'); $TSFE = new $temp_tsfeclassname($typo3_conf_vars, $page=($_get['id']?$_get['id']:1), 0, true); $GLOBALS['TSFE'] = & $TSFE; $TSFE->sys_page = t3lib_div::makeinstance('t3lib_pageselect'); // template object $TSFE->tmpl = t3lib_div::makeinstance('t3lib_tstemplate'); $TSFE->tmpl->init(); // fetch rootline and extract ts setup: $TSFE->rootLine = $TSFE->sys_page->getRootLine(intval($page)); $TSFE->getConfigArray(); [...]?> // transfer user session to TSFE-Object $TSFE->fe_user = $feuserobj; $TSFE->initUserGroups();
eid & TYPO3 plugins <?php [...] function dispatch(){ // instantiate plugin object include_once('typo3conf/ext/myext/pi1/class.tx_myext_pi1.php'); $piobj = t3lib_div::makeinstance("tx_myext_pi1"); // cobj needed for link operations $piobj->cobj = t3lib_div::makeinstance('tslib_cobj'); $piconfig = $TSFE->tmpl->setup['plugin.']["{$piObj->prefixId."]; $piconfig['whattoshow'] = 'ajaxtest'; $data = $piobj->main('',$piconfig); echo json_encode($data); [...]?>
eid & Cache (EXT:enetcache) <?php [...] function construct() { tslib_eidtools::connectdb(); //Connect to database # init caching framework $GLOBALS['typo3CacheManager'] = t3lib_div::makeinstance('t3lib_cache_manager'); $GLOBALS['typo3CacheFactory'] = t3lib_div::makeinstance('t3lib_cache_factory'); $GLOBALS['typo3CacheFactory']->setCacheManager($GLOBALS['typo3CacheManager']); t3lib_cache::initpagecache(); function dispatch() { $cacheid = Array("eID-Test"=>1); $cached = t3lib_div::makeinstance('tx_enetcache')->get($cacheid, false); if ($cached) { $data= $cached; else { $data['content'] = 'Hello World at '. date('c'). ' CET'; $cachetags[] = 'eid_content'; t3lib_div::makeinstance('tx_enetcache')->set( $cacheid, $data, $cachetags, '3600', false ); echo json_encode($data); [...]?>
Dziekuje za uwage!