ja mialem juz do czynienia z xajax i mam gotowe biblioteki na integracje z zend framework
ponizej kod podstawowych:
główna biblioteka:
wrx_Ajax
<?php
require_once('xajax/xajax.inc.php');
class wrx_Ajax {
/**
* tablica przechowujaca ustawienia
*
* @var array
*/
'requestURI'=>'',
'prefix'=>'wrxajax_',
'encoding'=>'utf-8',
'debug'=>false,
'xajaxDir'=>'/libs/xajax'
);
/**
* zmienna przechowujaca instancje xajax
*
* @var xajax
*/
/**
* zmienna przechowujaca instancje xajaxResponse
*
* @var xajaxResponse
*/
private static $_ajaxResponse=null; /**
* ustawia adres do ktorego ma sie odwolac ajax
*
* @param string $uri
*/
public static function setRequestURI
($uri){ self::$_config['requestURI']=wrx::config()->dir->base.$uri;
}
/**
* zwraca xajax
*
* @return xajax
*/
self::$_config['xajaxDir']=wrx::config()->dir->base.self::$_config['xajaxDir'];
self::$_ajax=new xajax(
self::$_config['requestURI'],
self::$_config['prefix'],
self::$_config['encoding'],
wrx::debug()
);
}
return self::$_ajax;
}
/**
* zwraca xajaxResponse
*
* @return xajaxResponse
*/
public static function getResp
(){ if (is_null(self::$_ajaxResponse)) { self::$_config['xajaxDir']=WRX_BASEURL.self::$_config['xajaxDir'];
self::$_ajaxResponse=new xajaxResponse(
self::$_config['encoding'],
false
);
}
return self::$_ajaxResponse;
}
/**
* wiaze javascript wygenerowany przez xajax z szablonem na stronie
*
*/
public static function postSetup
(){ wrx_Template::instance()->assign('wrx_Ajax',self::$_ajax->getJavascript(self::$_config['xajaxDir']));
}
/**
* resetuje instancje xajax i xajaxResponse
*
*/
self::$_ajax=null;
self::$_ajaxResponse=null;
self::setRequestURI('/libs/xajax');
}
/**
* ustawia grupy funkcji uformowanych w klasy jednoczesnie inicjalizujac
* klase systemowa wrx_Ajax_Default, grupy funkcji to klasy dziedziczace
* po wrx_Ajax_Library ktore leza w przestrzeni nazw aplikacji.
* opcjonalnie mozna zarejestrowac grupe ktora nie nalezy do przestrzeni nazw ap
likacji
*
* @param string $groupName
* @param bool $useNamespace
*/
public static function setupGroup
($groupName,$useNamespace=true){ self::setRequestURI('/wrxajax/'.$groupName);
if ($useNamespace) {
$groupName=wrx::config()->appnamespace.'_Ajax_'.$groupName;
}
$obj=new $groupName;
$objWrx=new wrx_Ajax_Default();
self::postSetup();
}
}
?>
biblioteka po ktorej maja dziedziczyc klasy z konkretnymi funkcjonalnosciami:
wrx_Ajax_Library
<?php
class wrx_Ajax_Library {
/**
* A prefix for all ajax functions to aid automatic xajax registration
*/
protected $_ajaxFuncPrefix = 'wrxajax';
/**
* Do things
*/
public function __construct () {
$this->registerFunctions();
}
/**
* Register all needed functions with xajax.
*
* All ajax function names must begin with self::$ajaxFuncPrefix, followed by
* an uppercase letter. They will be exported with that name, minus the prefix,
* and with the first letter in lowercase. So axFoo() would end up as the
* Javascript function xajax_foo()
*/
protected function registerFunctions() {
$methods = get_class_methods($this);
foreach ($methods as $m) {
$p = $this->_ajaxFuncPrefix;
$m2 = preg_replace("/^{$p}([A-Z])/e", "strtolower('$1')", $m); wrx_Ajax
::get()->registerFunction(array($m2, &$this, $m)); }
}
}
}
?>
i kontroler do zilustrowania obslugi
<?php
class Ajax_ProcessController extends Zend_Controller_Action {
public function preDispatch(){
//code executed before action
}
public function indexAction(){
}
public function runAction(){
$obj=$this->_getParam('ajax_action');
wrx_Ajax::setupGroup($obj);
wrx_Ajax::get()->processRequests();
}
}
public function __call($func,$args){
$this->_redirect('/');
}
public function postDispatch(){
//code executed after action
}
}
?>
ogolnie zasada dzialania jest prosta. po wywolaniu jakiejs akcji na samym poczatku wywolujemy wrx_Ajax::setupGroup('grupa') gdzie grupa w domysle to suffix nazwy klasy(w tym wypadku dla namespace wrx bedzie: wrx_Ajax_Group) z metodami do obsluzenia ajax (wedlug standardowego dzialania xajax) zarejestrowane zostana tylko metody z poczatkiem nazwy 'wrxajax' (moje rozszerzenie frameworku zend'a) mozna jako drugi parametr podac "false" i wtedy bedzie brana pod uwage klasa nazywajaca sie "Group" (w tym przykladzie). kazda taka grupa musi dziedziczyc po wrx_Ajax_Library (zawiera metody rejestrujace metody w xajax) jednoczesnie musi istniec jeden adres do ktorego ma sie odwolac ajax.
jezeli potrzebowalbys dokladniejszego opisu dzialania to daj znac na werexx [ at} gmail\.com
Ten post edytował werek 24.04.2007, 20:01:41