View fragment caching. This is primarily used to cache small parts of a view that rarely change. For instance, you may want to cache the footer of your template because it has very little dynamic content. Or you could cache a user profile page and delete the fragment when the user updates.
For obvious reasons, fragment caching should not be applied to any content that contains forms.
Multiple language (I18n) support was added in v3.0.4.
Class declared in SYSPATH/classes/fragment.php on line 3.
boolean
$i18nlink to thisuse multilingual fragment support?
bool FALSE
integer
$lifetimelink to thisdefault number of seconds to cache for
integer 30
array
$_cacheslink to thislist of buffer => cache key
array(0)
Delete a cached fragment.
Fragment::
delete
(
$key
);
string
$name
required - Fragment nameboolean
$i18n
= NULL - Multilingual fragment supportvoid
public
static
function
delete
(
$name
,
$i18n
= NULL)
{
// Invalid the cache
Kohana::cache(Fragment::_cache_key(
$name
,
$i18n
), NULL, -3600);
}
Load a fragment from cache and display it. Multiple fragments can be nested with different life times.
if
( ! Fragment::load(
'footer'
)) {
// Anything that is echo'ed here will be saved
Fragment::save();
}
string
$name
required - Fragment nameinteger
$lifetime
= NULL - Fragment cache lifetimeboolean
$i18n
= NULL - Multilingual fragment supportboolean
public
static
function
load(
$name
,
$lifetime
= NULL,
$i18n
= NULL)
{
// Set the cache lifetime
$lifetime
= (
$lifetime
=== NULL) ? Fragment::
$lifetime
: (int)
$lifetime
;
// Get the cache key name
$cache_key
= Fragment::_cache_key(
$name
,
$i18n
);
if
(
$fragment
= Kohana::cache(
$cache_key
, NULL,
$lifetime
))
{
// Display the cached fragment now
echo
$fragment
;
return
TRUE;
}
else
{
// Start the output buffer
ob_start();
// Store the cache key by the buffer level
Fragment::
$_caches
[ob_get_level()] =
$cache_key
;
return
FALSE;
}
}
Saves the currently open fragment in the cache.
Fragment::save();
void
public
static
function
save()
{
// Get the buffer level
$level
= ob_get_level();
if
(isset(Fragment::
$_caches
[
$level
]))
{
// Get the cache key based on the level
$cache_key
= Fragment::
$_caches
[
$level
];
// Delete the cache key, we don't need it anymore
unset(Fragment::
$_caches
[
$level
]);
// Get the output buffer and display it at the same time
$fragment
= ob_get_flush();
// Cache the fragment
Kohana::cache(
$cache_key
,
$fragment
);
}
}
Generate the cache key name for a fragment.
$key
= Fragment::_cache_key(
'footer'
, TRUE);
string
$name
required - Fragment nameboolean
$i18n
= NULL - Multilingual fragment supportstring
protected
static
function
_cache_key(
$name
,
$i18n
= NULL)
{
if
(
$i18n
=== NULL)
{
// Use the default setting
$i18n
= Fragment::
$i18n
;
}
// Language prefix for cache key
$i18n
= (
$i18n
=== TRUE) ? I18n::lang() :
''
;
// Note: $i18n and $name need to be delimited to prevent naming collisions
return
'Fragment::cache('
.
$i18n
.
'+'
.
$name
.
')'
;
}