本文整理汇总了PHP中JCache::getWorkarounds方法的典型用法代码示例。如果您正苦于以下问题:PHP JCache::getWorkarounds方法的具体用法?PHP JCache::getWorkarounds怎么用?PHP JCache::getWorkarounds使用的例子?那么恭喜您, 这里精选的方法代码示例或许可以为您提供帮助。您也可以进一步了解该方法所在类JCache
的用法示例。
在下文中一共展示了JCache::getWorkarounds方法的5个代码示例,这些例子默认根据受欢迎程度排序。您可以为喜欢或者感觉有用的代码点赞,您的评价将有助于系统推荐出更棒的PHP代码示例。
示例1: get
/**
* Executes a cacheable callback if not found in cache else returns cached output and result
*
* @param callable $callback Callback or string shorthand for a callback
* @param array $args Callback arguments
* @param mixed $id Cache ID
* @param boolean $wrkarounds True to use wrkarounds
* @param array $woptions Workaround options
*
* @return mixed Result of the callback
*
* @since 11.1
*/
public function get($callback, $args = array(), $id = false, $wrkarounds = false, $woptions = array())
{
if (!$id) {
// Generate an ID
$id = $this->_makeId($callback, $args);
}
$data = $this->cache->get($id);
$locktest = new stdClass();
$locktest->locked = null;
$locktest->locklooped = null;
if ($data === false) {
$locktest = $this->cache->lock($id);
if ($locktest->locked == true && $locktest->locklooped == true) {
$data = $this->cache->get($id);
}
}
$coptions = array();
if ($data !== false) {
$cached = unserialize(trim($data));
$coptions['mergehead'] = isset($woptions['mergehead']) ? $woptions['mergehead'] : 0;
$output = $wrkarounds == false ? $cached['output'] : JCache::getWorkarounds($cached['output'], $coptions);
$result = $cached['result'];
if ($locktest->locked == true) {
$this->cache->unlock($id);
}
} else {
if (!is_array($args)) {
$referenceArgs = !empty($args) ? array(&$args) : array();
} else {
$referenceArgs =& $args;
}
if ($locktest->locked == false) {
$locktest = $this->cache->lock($id);
}
if (isset($woptions['modulemode']) && $woptions['modulemode'] == 1) {
$document = JFactory::getDocument();
$coptions['modulemode'] = 1;
if (method_exists($document, 'getHeadData')) {
$coptions['headerbefore'] = $document->getHeadData();
}
} else {
$coptions['modulemode'] = 0;
}
ob_start();
ob_implicit_flush(false);
$result = call_user_func_array($callback, $referenceArgs);
$output = ob_get_clean();
$coptions['nopathway'] = isset($woptions['nopathway']) ? $woptions['nopathway'] : 1;
$coptions['nohead'] = isset($woptions['nohead']) ? $woptions['nohead'] : 1;
$coptions['nomodules'] = isset($woptions['nomodules']) ? $woptions['nomodules'] : 1;
$cached = array('output' => $wrkarounds == false ? $output : JCache::setWorkarounds($output, $coptions), 'result' => $result);
// Store the cache data
$this->cache->store(serialize($cached), $id);
if ($locktest->locked == true) {
$this->cache->unlock($id);
}
}
echo $output;
return $result;
}
示例2: get
/**
* Get the cached view data
*
* @param object $view The view object to cache output for
* @param string $method The method name of the view method to cache output for
* @param mixed $id The cache data ID
* @param boolean $wrkarounds True to enable workarounds.
*
* @return boolean True if the cache is hit (false else)
*
* @since 11.1
*/
public function get($view, $method = 'display', $id = false, $wrkarounds = true)
{
// If an id is not given generate it from the request
if ($id == false) {
$id = $this->_makeId($view, $method);
}
$data = $this->cache->get($id);
$locktest = new stdClass();
$locktest->locked = null;
$locktest->locklooped = null;
if ($data === false) {
$locktest = $this->cache->lock($id, null);
/*
* If the loop is completed and returned true it means the lock has been set.
* If looped is true try to get the cached data again; it could exist now.
*/
if ($locktest->locked == true && $locktest->locklooped == true) {
$data = $this->cache->get($id);
}
// False means that locking is either turned off or maxtime has been exceeded. Execute the view.
}
if ($data !== false) {
$data = unserialize(trim($data));
if ($wrkarounds === true) {
echo JCache::getWorkarounds($data);
} else {
// No workarounds, so all data is stored in one piece
echo isset($data) ? $data : null;
}
if ($locktest->locked == true) {
$this->cache->unlock($id);
}
return true;
}
// No hit so we have to execute the view
if (method_exists($view, $method)) {
// If previous lock failed try again
if ($locktest->locked == false) {
$locktest = $this->cache->lock($id);
}
// Capture and echo output
ob_start();
ob_implicit_flush(false);
$view->{$method}();
$data = ob_get_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 = $wrkarounds == true ? JCache::setWorkarounds($data) : $data;
// Store the cache data
$this->cache->store(serialize($cached), $id);
if ($locktest->locked == true) {
$this->cache->unlock($id);
}
}
return false;
}
示例3: get
/**
* Get the cached page data
*
* @param string $id The cache data id
* @param string $group The cache data group
* @param boolean $wrkarounds True to use wrkarounds
*
* @return boolean True if the cache is hit (false else)
*
* @since 11.1
*/
public function get()
{
$numargs = func_num_args();
$id = $numargs > 0 ? func_get_arg(0) : false;
$group = $numargs > 1 ? func_get_arg(1) : 'page';
$wrkarounds = $numargs > 2 ? func_get_arg(2) : true;
// Initialise variables.
$data = false;
// If an id is not given, generate it from the request
if ($id == false) {
$id = $this->_makeId();
}
// If the etag matches the page id ... set a no change header and exit : utilize browser cache
if (!headers_sent() && isset($_SERVER['HTTP_IF_NONE_MATCH'])) {
$etag = stripslashes($_SERVER['HTTP_IF_NONE_MATCH']);
if ($etag == $id) {
$browserCache = isset($this->options['browsercache']) ? $this->options['browsercache'] : false;
if ($browserCache) {
$this->_noChange();
}
}
}
// We got a cache hit... set the etag header and echo the page data
$data = $this->cache->get($id, $group);
$this->_locktest = new stdClass();
$this->_locktest->locked = null;
$this->_locktest->locklooped = null;
if ($data === false) {
$this->_locktest = $this->cache->lock($id, $group);
if ($this->_locktest->locked == true && $this->_locktest->locklooped == true) {
$data = $this->cache->get($id, $group);
}
}
if ($data !== false) {
$data = unserialize(trim($data));
if ($wrkarounds === true) {
$data = JCache::getWorkarounds($data);
}
$this->_setEtag($id);
if ($this->_locktest->locked == true) {
$this->cache->unlock($id, $group);
}
return $data;
}
// Set id and group placeholders
$this->_id = $id;
$this->_group = $group;
return false;
}
示例4: get
/**
* Executes a cacheable callback if not found in cache else returns cached output and result
*
* @param mixed $callback Callback or string shorthand for a callback
* @param array $args Callback arguments
* @param mixed $id Cache ID
* @param boolean $wrkarounds True to use wrkarounds
* @param array $woptions Workaround options
*
* @return mixed Result of the callback
*
* @since 11.1
*/
public function get($callback, $args = array(), $id = false, $wrkarounds = false, $woptions = array())
{
// 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);
}
if (!$id) {
// Generate an ID
$id = $this->_makeId($callback, $args);
}
$data = $this->cache->get($id);
$locktest = new stdClass();
$locktest->locked = null;
$locktest->locklooped = null;
if ($data === false) {
$locktest = $this->cache->lock($id);
if ($locktest->locked == true && $locktest->locklooped == true) {
$data = $this->cache->get($id);
}
}
$coptions = array();
if ($data !== false) {
$cached = unserialize(trim($data));
$coptions['mergehead'] = isset($woptions['mergehead']) ? $woptions['mergehead'] : 0;
$output = $wrkarounds == false ? $cached['output'] : JCache::getWorkarounds($cached['output'], $coptions);
$result = $cached['result'];
if ($locktest->locked == true) {
$this->cache->unlock($id);
}
} else {
if (!is_array($args)) {
$referenceArgs = !empty($args) ? array(&$args) : array();
} else {
$referenceArgs =& $args;
}
if ($locktest->locked == false) {
$locktest = $this->cache->lock($id);
}
if (isset($woptions['modulemode']) && $woptions['modulemode'] == 1) {
$document = JFactory::getDocument();
$coptions['modulemode'] = 1;
if (method_exists($document, 'getHeadData')) {
$coptions['headerbefore'] = $document->getHeadData();
}
} else {
$coptions['modulemode'] = 0;
}
ob_start();
ob_implicit_flush(false);
$result = call_user_func_array($callback, $referenceArgs);
$output = ob_get_clean();
$coptions['nopathway'] = isset($woptions['nopathway']) ? $woptions['nopathway'] : 1;
$coptions['nohead'] = isset($woptions['nohead']) ? $woptions['nohead'] : 1;
$coptions['nomodules'] = isset($woptions['nomodules']) ? $woptions['nomodules'] : 1;
$cached = array('output' => $wrkarounds == false ? $output : JCache::setWorkarounds($output, $coptions), 'result' => $result);
// Store the cache data
$this->cache->store(serialize($cached), $id);
if ($locktest->locked == true) {
$this->cache->unlock($id);
}
}
echo $output;
return $result;
}
示例5: getBuffer
/**
* Get the contents of a document include
*
* @param string $type The type of renderer
* @param string $name The name of the element to render
* @param array $attribs Associative array of remaining attributes.
*
* @return The output of the renderer
* @since 1.0
*/
public function getBuffer($type = null, $name = null, $attribs = array())
{
// If no type is specified, return the whole buffer
if ($type === null) {
return parent::$_buffer;
}
$result = null;
if (isset(parent::$_buffer[$type][$name])) {
return parent::$_buffer[$type][$name];
}
// If the buffer has been explicitly turned off don't display or attempt to render
if ($result === false) {
return null;
}
$renderer = $this->loadRenderer($type);
if ($this->_caching == true && $type == 'modules') {
$cache = JFactory::getCache('com_modules', '');
$hash = md5(serialize(array($name, $attribs, $result, $renderer)));
$cbuffer = $cache->get('cbuffer_' . $type);
if (isset($cbuffer[$hash])) {
return JCache::getWorkarounds($cbuffer[$hash], array('mergehead' => 1));
} else {
$options = array();
$options['nopathway'] = 1;
$options['nomodules'] = 1;
$options['modulemode'] = 1;
$this->setBuffer($renderer->render($name, $attribs, $result), $type, $name);
$data = parent::$_buffer[$type][$name];
$tmpdata = JCache::setWorkarounds($data, $options);
$cbuffer[$hash] = $tmpdata;
$cache->store($cbuffer, 'cbuffer_' . $type);
}
} else {
$this->setBuffer($renderer->render($name, $attribs, $result), $type, $name);
}
return parent::$_buffer[$type][$name];
}