Topic: [alpha] Dynamic registering Methods and Classes
Hi,
yesterday i had a session with CtC about how we can register Classes and/or Functions dynamicly.
The sense behind that is, how we can call an ajax-function, which includes another php-class, and that class provides new ajax-functions.
After a little time we get a first solution :
[code php]
index.php
<?php
ini_set("display_errors",1);
error_reporting(E_ALL ^E_NOTICE);
session_start();
require_once( 'class1.php');
$core = './xajax/xajax_core';
require_once( $core . '/xajax.inc.php' );
$xajax = new xajax();
$xajax->configure('javascript URI', 'xajax/');
$class1 = new class1($xajax);
$configuration = $_SESSION['object_loader_configuration'];
if ( is_array( $configuration ) )
{
//$session = print_r( $_SESSION );
//echo $session;
foreach ($configuration as $className => $classConfiguration)
{
foreach ($classConfiguration as $includeFile => $methods)
{
require $includeFile;
$class = new $className( $xajax );
foreach ($methods as $method)
{
$xajax->register(XAJAX_FUNCTION, array(&$class, $method));
}
}
}
}
$xajax->processRequest();
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/2000/REC-xhtml1-20
tional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Dynamic Classes </title>
<?php $xajax->printJavascript(); ?>
</head>
<body>
<h1>classTesT</h1>
<?=$class1->proceed()?>
<?=$session?>
</body>
</html>
[/code]
[code php]
class1.php
<?php
class class1
{
public function __construct( $xajax )
{
$this->xajax = $xajax;
$xajax->registerFunction(array('ajax_class1_test', $this, 'ajax_class1_test' ) );
$xajax->registerFunction(array('ajax_class1_test2', $this, 'ajax_class1_test2' ) );
}
public function proceed()
{
return '<a href="javascript:void(0);" onclick="xajax_ajax_class1_test2()">removeme</a><br><a href="javascript:void(0);" onclick="xajax_ajax_class1_test()">test</a><div id="test"></div>';
}
public function ajax_class1_test()
{
$response = new xajaxResponse();
require_once( 'class2.php');
$class2 = new class2($this->xajax);
$configuration = array();
if (isset($_SESSION['object_loader_configuration']))
{
$configuration = $_SESSION['object_loader_configuration'];
}
$configuration['class2'] = array(
'class2.php' => array(
'ajax_class2_test'
)
);
$_SESSION['object_loader_configuration'] = $configuration;
$response->assign('test', 'innerHTML', $class2->proceed() );
return $response;
}
public function ajax_class1_test2()
{
$response = new xajaxResponse();
$configuration = array();
if (isset($_SESSION['object_loader_configuration']))
{
$configuration = $_SESSION['object_loader_configuration'];
if ( array_key_exists( 'class2', $configuration ) )
{
unset( $configuration['class2'] );
}
}
$_SESSION['object_loader_configuration'] = $configuration;
$response->append('test', 'innerHTML', 'but it will not work' );
return $response;
}
}
?>
[/code]
[code php]
class2.php
<?php
class class2
{
public function __construct( $xajax )
{
}
public function proceed()
{
return '<a href="javascript:void(0);" onclick="xajax.request( { xjxfun: \'ajax_class2_test\' }, { parameters: arguments } );">test</a>';
}
public function ajax_class2_test()
{
$response = new xajaxResponse();
$response->alert('Hello World');
return $response;
}
}
?>
[/code]
maybe we or CtC will write a plugin for that.
Greets
Oliver
Last edited by m[e]ntor (2008-02-08 8:25:01 AM)