API16

JCacheCallback/get

From Joomla! Documentation

< API16:JCacheCallback
Revision as of 17:38, 22 March 2010 by Doxiki (talk | contribs) (New page: ===Description=== Executes a cacheable callback if not found in cache else returns cached output and result <span class="editsection" style="font-size:76%;"> <nowiki>[</nowiki>[[Descr...)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

The "API16" namespace is an archived namespace. This page contains information for a Joomla! version which is no longer supported. It exists only as a historical reference, it will not be improved and its content may be incomplete and/or contain broken links.

Description[edit]

Executes a cacheable callback if not found in cache else returns cached output and result

[Edit Descripton]

Template:Description:JCacheCallback/get

Syntax[edit]

get($callback, $args, $id=false)
Parameter Name Default Value Description
$callback Callback or string shorthand for a callback
$args Callback arguments
$id false

Returns[edit]

mixed Result of the callback

Defined in[edit]

libraries/joomla/cache/handler/callback.php

Importing[edit]

jimport( 'joomla.cache.handler.callback' );

Source Body[edit]

function get($callback, $args, $id=false)
{
        // Normalize callback
        if (is_array($callback)) {
                // We have a standard php callback array -- do nothing
        } elseif (strstr($callback, '::')) {
                // This is shorthand for a static method callback classname::methodname
                list($class, $method) = explode('::', $callback);
                $callback = array(trim($class), trim($method));
        } elseif (strstr($callback, '->')) {
                /*
                 * This is a really not so smart way of doing this... we provide this for backward compatability but this
                 * WILL!!! disappear in a future version.  If you are using this syntax change your code to use the standard
                 * PHP callback array syntax: <http://php.net/callback>
                 *
                 * We have to use some silly global notation to pull it off and this is very unreliable
                 */
                list($object_123456789, $method) = explode('->', $callback);
                global $$object_123456789;
                $callback = array($$object_123456789, $method);
        } else {
                // We have just a standard function -- do nothing
        }

        if (!$id) {
                // Generate an ID
                $id = $this->_makeId($callback, $args);
        }

        // Get the storage handler and get callback cache data by id and group
        $data = parent::get($id);
        if ($data !== false) {
                $cached = unserialize($data);
                $output = $cached['output'];
                $result = $cached['result'];
        } else {
                ob_start();
                ob_implicit_flush(false);

                $result = call_user_func_array($callback, $args);
                $output = ob_get_contents();

                ob_end_clean();

                $cached = array();
                $cached['output'] = $output;
                $cached['result'] = $result;
                // Store the cache data
                $this->store(serialize($cached), $id);
        }

        echo $output;
        return $result;
}

[Edit See Also] Template:SeeAlso:JCacheCallback/get

Examples[edit]

<CodeExamplesForm />