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

Podobne dokumenty