Sobota, 5 listopad 2011
Transkrypt
Sobota, 5 listopad 2011
Sobota, 5 listopad 2011 TYPO3 eID : AJAX i nie tylko Artur Cichosz Quintinity Interactive Sobota, 5 listopad 2011 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 Sobota, 5 listopad 2011 Co z tego mamy? Krotki czas odpowiedzi. Standard / typeNum=X eID < 1 sec < 0,2 sec Sobota, 5 listopad 2011 eID – zastosowanie : 1. deklaracja EXT:myExt/ext_localconf.php <?php $TYPO3_CONF_VARS['FE']['eID_include']['hello_eID'] = 'EXT:myExt/eID_myTest.php'; ?> Sobota, 5 listopad 2011 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'); ?> Sobota, 5 listopad 2011 eID - zastosowanie: 3. wywolanie URL: http://www.myproject.pl/?eID=hello_eID OUTPUT: Hello World at 2011-11-04T19:15:28+01:00 CET Sobota, 5 listopad 2011 AJAX & eID AJAX Server eID request AJAX Client event jQuery & Co. content AJAX App TYPO3 Sobota, 5 listopad 2011 response 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> Sobota, 5 listopad 2011 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; } Sobota, 5 listopad 2011 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(); } ?> Sobota, 5 listopad 2011 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(); } ?> Sobota, 5 listopad 2011 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(); } [...] ?> Sobota, 5 listopad 2011 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); } [...] ?> Sobota, 5 listopad 2011 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); } [...] ?> Sobota, 5 listopad 2011 Dziekuje za uwage! Sobota, 5 listopad 2011