From Joomla! Documentation

< API16:JCacheView
Revision as of 04:59, 30 March 2010 by Doxiki (Talk | contribs)

Replacement filing cabinet.png
This Namespace has been archived - Please Do Not Edit or Create Pages in this namespace. Pages contain information for a Joomla! version which is no longer supported. It exists only as a historical reference, will not be improved and its content may be incomplete.


Get the cached view data

[Edit Descripton]



get(&$view, $method, $id=false)
Parameter Name Default Value Description
&$view $view The view object to cache output for
$method $method The method name of the view method to cache output for
$id false $group The cache data group


boolean True if the cache is hit (false else)

Defined in



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

Source Body

function get(&$view, $method, $id=false)
        // Initialise variables.
        $app = &JFactory::getApplication();
        $data = false;
        // If an id is not given generate it from the request
        if ($id == false) {
                $id = $this->_makeId($view, $method);
        $data = parent::get($id);
        if ($data !== false) {
                $data           = unserialize($data);
                $document       = &JFactory::getDocument();
                // Get the document head out of the cache.
                $document->setHeadData((isset($data['head'])) ? $data['head'] : array());
                // If the pathway buffer is set in the cache data, get it.
                if (isset($data['pathway']) && is_array($data['pathway']))
                        // Push the pathway data into the pathway object.
                        $pathway = &$app->getPathWay();
                // If a module buffer is set in the cache data, get it.
                if (isset($data['module']) && is_array($data['module']))
                        // Iterate through the module positions and push them into the document buffer.
                        foreach ($data['module'] as $name => $contents) {
                                $document->setBuffer($contents, 'module', $name);
                // Get the document body out of the cache.
                echo (isset($data['body'])) ? $data['body'] : null;
                return true;
         * No hit so we have to execute the view
        if (method_exists($view, $method))
                $document = &JFactory::getDocument();
                // Get the modules buffer before component execution.
                $buffer1 = $document->getBuffer();
                // Make sure the module buffer is an array.
                if (!isset($buffer1['module']) || !is_array($buffer1['module'])) {
                        $buffer1['module'] = array();
                // Capture and echo output
                $data = ob_get_contents();
                echo $data;
                 * For a view we have a special case.  We need to cache not only the output from the view, but the state
                 * of the document head after the view has been rendered.  This will allow us to properly cache any attached
                 * scripts or stylesheets or links or any other modifications that the view has made to the document object
                $cached = array();
                // View body data
                $cached['body'] = $data;
                // Document head data
                $cached['head'] = $document->getHeadData();
                // Pathway data
                $pathway                        = &$app->getPathWay();
                $cached['pathway']      = $pathway->getPathway();
                // Get the module buffer after component execution.
                $buffer2 = $document->getBuffer();
                // Make sure the module buffer is an array.
                if (!isset($buffer2['module']) || !is_array($buffer2['module'])) {
                        $buffer2['module'] = array();
                // Compare the second module buffer against the first buffer.
                $cached['module'] = array_diff_assoc($buffer2['module'], $buffer1['module']);
                // Store the cache data
                $this->store(serialize($cached), $id);
        return false;

[Edit See Also] SeeAlso:JCacheView/get


<CodeExamplesForm />