API16:JCacheView/get
From Joomla! Documentation
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.
Contents |
Description
Get the cached view data
Syntax
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 |
Returns
boolean True if the cache is hit (false else)
Defined in
libraries/joomla/cache/handler/view.php
Importing
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(); $pathway->setPathway($data['pathway']); } // 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 ob_start(); ob_implicit_flush(false); $view->$method(); $data = ob_get_contents(); ob_end_clean(); 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
Examples
<CodeExamplesForm />
