mirror of
https://github.com/e107inc/e107.git
synced 2025-01-17 12:48:24 +01:00
286 lines
7.3 KiB
PHP
286 lines
7.3 KiB
PHP
<?php
|
|
|
|
/**
|
|
* @file
|
|
* Functions for use with e107's Ajax API.
|
|
*/
|
|
|
|
|
|
/**
|
|
* Class e_ajax_class.
|
|
*
|
|
* Functions for e107's Ajax API.
|
|
*
|
|
* E107's Ajax API is used to dynamically update parts of a page's HTML
|
|
* based on data from the server. Upon a specified event, such as a button
|
|
* click, a callback function is triggered which performs server-side logic and
|
|
* may return updated markup, which is then replaced on-the-fly with no page
|
|
* refresh necessary.
|
|
*
|
|
* This framework creates a PHP macro language that allows the server to
|
|
* instruct JavaScript to perform actions on the client browser.
|
|
*
|
|
* When responding to Ajax requests, the server should do what it needs to do
|
|
* for that request, then create a commands array. This commands array will
|
|
* be converted to a JSON object and returned to the client, which will then
|
|
* iterate over the array and process it like a macro language.
|
|
*
|
|
* Each command item is an associative array which will be converted to a
|
|
* command object on the JavaScript side. $command_item['command'] is the type
|
|
* of command, e.g. 'alert' or 'replace'. The command array may contain any other
|
|
* data that the command needs to process, e.g. 'method', 'target', 'settings',
|
|
* etc.
|
|
*
|
|
* Commands are usually created with a couple of helper functions, so they
|
|
* look like this:
|
|
* @code
|
|
* $ajax = e107::ajax();
|
|
*
|
|
* $commands = array();
|
|
* // Merge array into e107.settings javascript object.
|
|
* $commands[] = $ajax->commandSettings(array('foo' => 'bar'));
|
|
* // Remove 'disabled' attribute from the '#object-1' element.
|
|
* $commands[] = $ajax->commandInvoke('#object-1', 'removeAttr', array('disabled'));
|
|
* // Insert HTML content into the '#object-1' element.
|
|
* $commands[] = $ajax->commandInsert('#object-1', 'html', 'some html content');
|
|
*
|
|
* // This method returns with data in JSON format. It sets the header for
|
|
* // JavaScript output.
|
|
* $ajax->response($commands);
|
|
* @endcode
|
|
*/
|
|
class e_ajax
|
|
{
|
|
|
|
/**
|
|
* Constructor.
|
|
* Use {@link getInstance()}, direct instantiating is not possible for signleton
|
|
* objects.
|
|
*/
|
|
public function __construct()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* @return void
|
|
*/
|
|
protected function _init()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Cloning is not allowed.
|
|
*/
|
|
private function __clone()
|
|
{
|
|
}
|
|
|
|
/**
|
|
* Returns data in JSON format.
|
|
*
|
|
* This function should be used for JavaScript callback functions returning
|
|
* data in JSON format. It sets the header for JavaScript output.
|
|
*
|
|
* @param $var
|
|
* (optional) If set, the variable will be converted to JSON and output.
|
|
*/
|
|
public function response($var = null)
|
|
{
|
|
// We are returning JSON, so tell the browser.
|
|
header('Content-Type: application/json');
|
|
|
|
if(isset($var))
|
|
{
|
|
echo $this->render($var);
|
|
}
|
|
}
|
|
|
|
/**
|
|
* Renders a commands array into JSON.
|
|
*
|
|
* @param array $commands
|
|
* A list of macro commands generated by the use of e107::ajax()->command*
|
|
* methods.
|
|
*
|
|
* @return string
|
|
*/
|
|
public function render($commands = array())
|
|
{
|
|
$tp = e107::getParser();
|
|
return $tp->toJSON($commands);
|
|
}
|
|
|
|
/**
|
|
* Creates an Ajax 'alert' command.
|
|
*
|
|
* The 'alert' command instructs the client to display a JavaScript alert
|
|
* dialog box.
|
|
*
|
|
* @param $text
|
|
* The message string to display to the user.
|
|
*
|
|
* @return array
|
|
* An array suitable for use with the e107::ajax()->render() function.
|
|
*/
|
|
public function commandAlert($text)
|
|
{
|
|
return array(
|
|
'command' => 'alert',
|
|
'text' => $text,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Creates an Ajax 'insert' command.
|
|
*
|
|
* This command instructs the client to insert the given HTML.
|
|
*
|
|
* @param $target
|
|
* A jQuery target selector.
|
|
* @param $method
|
|
* Selected method fo DOM manipulation:
|
|
* 'replaceWith', 'append', 'prepend', 'before', 'after', 'html'
|
|
* @param $html
|
|
* The data to use with the jQuery method.
|
|
*
|
|
* @return array
|
|
* An array suitable for use with the e107::ajax()->render() function.
|
|
*/
|
|
public function commandInsert($target, $method, $html)
|
|
{
|
|
return array(
|
|
'command' => 'insert',
|
|
'method' => $method,
|
|
'target' => $target,
|
|
'data' => $html,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Creates an Ajax 'remove' command.
|
|
*
|
|
* The 'remove' command instructs the client to use jQuery's remove() method
|
|
* to remove each of elements matched by the given target, and everything
|
|
* within them.
|
|
*
|
|
* @param $target
|
|
* A jQuery selector string.
|
|
*
|
|
* @return array
|
|
* An array suitable for use with the e107::ajax()->render() function.
|
|
*
|
|
* @see http://docs.jquery.com/Manipulation/remove#expr
|
|
*/
|
|
public function commandRemove($target)
|
|
{
|
|
return array(
|
|
'command' => 'remove',
|
|
'target' => $target,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Creates an Ajax 'css' command.
|
|
*
|
|
* The 'css' command will instruct the client to use the jQuery css() method
|
|
* to apply the CSS arguments to elements matched by the given target.
|
|
*
|
|
* @param $target
|
|
* A jQuery selector string.
|
|
* @param $argument
|
|
* An array of key/value pairs to set in the CSS for the target.
|
|
*
|
|
* @return array
|
|
* An array suitable for use with the e107::ajax()->render() function.
|
|
*
|
|
* @see http://docs.jquery.com/CSS/css#properties
|
|
*/
|
|
public function commandCSS($target, $argument)
|
|
{
|
|
return array(
|
|
'command' => 'css',
|
|
'target' => $target,
|
|
'argument' => $argument,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Creates an Ajax 'settings' command.
|
|
*
|
|
* The 'settings' command instructs the client to extend e107.settings with
|
|
* the given array.
|
|
*
|
|
* @param $settings
|
|
* An array of key/value pairs to add to the settings. This will be utilized
|
|
* for all commands after this if they do not include their own settings
|
|
* array.
|
|
*
|
|
* @return array
|
|
* An array suitable for use with the e107::ajax()->render() function.
|
|
*/
|
|
public function commandSettings($settings)
|
|
{
|
|
return array(
|
|
'command' => 'settings',
|
|
'settings' => $settings,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Creates an Ajax 'data' command.
|
|
*
|
|
* The 'data' command instructs the client to attach the name=value pair of
|
|
* data to the target via jQuery's data cache.
|
|
*
|
|
* @param $target
|
|
* A jQuery selector string.
|
|
* @param $name
|
|
* The name or key (in the key value pair) of the data attached to this
|
|
* target.
|
|
* @param $value
|
|
* The value of the data. Not just limited to strings can be any format.
|
|
*
|
|
* @return array
|
|
* An array suitable for use with the e107::ajax()->render() function.
|
|
*
|
|
* @see http://docs.jquery.com/Core/data#namevalue
|
|
*/
|
|
public function commandData($target, $name, $value)
|
|
{
|
|
return array(
|
|
'command' => 'data',
|
|
'target' => $target,
|
|
'name' => $name,
|
|
'value' => $value,
|
|
);
|
|
}
|
|
|
|
/**
|
|
* Creates an Ajax 'invoke' command.
|
|
*
|
|
* The 'invoke' command will instruct the client to invoke the given jQuery
|
|
* method with the supplied arguments on the elements matched by the given
|
|
* target. Intended for simple jQuery commands, such as attr(), addClass(),
|
|
* removeClass(), toggleClass(), etc.
|
|
*
|
|
* @param $target
|
|
* A jQuery selector string.
|
|
* @param $method
|
|
* The jQuery method to invoke.
|
|
* @param $arguments
|
|
* (optional) A list of arguments to the jQuery $method, if any.
|
|
*
|
|
* @return array
|
|
* An array suitable for use with the e107::ajax()->render() function.
|
|
*/
|
|
public function commandInvoke($target, $method, array $arguments = array())
|
|
{
|
|
return array(
|
|
'command' => 'invoke',
|
|
'target' => $target,
|
|
'method' => $method,
|
|
'arguments' => $arguments,
|
|
);
|
|
}
|
|
|
|
} |