mirror of
https://github.com/torrentpier/torrentpier
synced 2025-08-22 14:23:57 -07:00
r412
очистка мемкеша общий сброс кеша git-svn-id: https://torrentpier2.googlecode.com/svn/trunk@412 a8ac35ab-4ca4-ca47-4c2d-a49a94f06293
This commit is contained in:
parent
779a8c6321
commit
dd9425231e
7 changed files with 110 additions and 70 deletions
|
@ -9,6 +9,23 @@ $user_id = $this->request['user_id'];
|
||||||
|
|
||||||
switch($mode)
|
switch($mode)
|
||||||
{
|
{
|
||||||
|
case 'clear_cache':
|
||||||
|
$gc_cache = array(
|
||||||
|
'tr_cache',
|
||||||
|
'bb_cache',
|
||||||
|
'session_cache',
|
||||||
|
'bb_login_err',
|
||||||
|
'bb_cap_sid',
|
||||||
|
);
|
||||||
|
|
||||||
|
foreach ($gc_cache as $cache_name)
|
||||||
|
{
|
||||||
|
CACHE($cache_name)->rm();
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->response['cache_html'] = $lang['ALL_CACHE_CLEARED'];
|
||||||
|
break;
|
||||||
|
|
||||||
case 'delete_profile':
|
case 'delete_profile':
|
||||||
if ($userdata['user_id'] == $user_id) $this->ajax_die($lang['USER_DELETE_ME']);
|
if ($userdata['user_id'] == $user_id) $this->ajax_die($lang['USER_DELETE_ME']);
|
||||||
if (empty($this->request['confirmed'])) $this->prompt_for_confirm($lang['USER_DELETE_CONFIRM']);
|
if (empty($this->request['confirmed'])) $this->prompt_for_confirm($lang['USER_DELETE_CONFIRM']);
|
||||||
|
|
|
@ -251,8 +251,8 @@ class cache_common
|
||||||
*/
|
*/
|
||||||
function get ($name, $get_miss_key_callback = '', $prefix = '', $ttl = 604800)
|
function get ($name, $get_miss_key_callback = '', $prefix = '', $ttl = 604800)
|
||||||
{
|
{
|
||||||
if ($get_miss_key_callback) return $get_miss_key_callback($name);
|
if ($get_miss_key_callback) return $get_miss_key_callback($prefix . $name);
|
||||||
return is_array($name) ? array() : false;
|
return is_array($prefix . $name) ? array() : false;
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* Store value of variable
|
* Store value of variable
|
||||||
|
@ -377,7 +377,7 @@ class cache_memcache extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return ($this->connected) ? $this->memcache->get($name) : false;
|
return ($this->connected) ? $this->memcache->get($prefix . $name) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function set ($name, $value, $ttl = 0, $prefix = '')
|
function set ($name, $value, $ttl = 0, $prefix = '')
|
||||||
|
@ -390,20 +390,21 @@ class cache_memcache extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return ($this->connected) ? $this->memcache->set($name, $value, false, $ttl) : false;
|
return ($this->connected) ? $this->memcache->set($prefix . $name, $value, false, $ttl) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function rm ($name = '', $prefix = '')
|
function rm ($name = '', $prefix = '')
|
||||||
{
|
{
|
||||||
if (!$this->connected) $this->connect();
|
if (!$this->connected) $this->connect();
|
||||||
|
|
||||||
$this->cur_query = "cache->rm('$name')";
|
if($name)
|
||||||
$this->debug('start');
|
{
|
||||||
$this->debug('stop');
|
return ($this->connected) ? $this->memcache->delete($prefix . $name) : false;
|
||||||
$this->cur_query = null;
|
}
|
||||||
$this->num_queries++;
|
else
|
||||||
|
{
|
||||||
return ($this->connected) ? $this->memcache->delete($name) : false;
|
return ($this->connected) ? $this->memcache->flush() : false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_installed ()
|
function is_installed ()
|
||||||
|
@ -440,9 +441,9 @@ class cache_sqlite extends cache_common
|
||||||
{
|
{
|
||||||
if (empty($name))
|
if (empty($name))
|
||||||
{
|
{
|
||||||
return is_array($name) ? array() : false;
|
return is_array( $name) ? array() : false;
|
||||||
}
|
}
|
||||||
$this->db->shard($prefix.$name);
|
$this->db->shard($name);
|
||||||
$cached_items = array();
|
$cached_items = array();
|
||||||
$prefix_len = strlen($prefix);
|
$prefix_len = strlen($prefix);
|
||||||
$prefix_sql = sqlite_escape_string($prefix);
|
$prefix_sql = sqlite_escape_string($prefix);
|
||||||
|
@ -470,12 +471,12 @@ class cache_sqlite extends cache_common
|
||||||
{
|
{
|
||||||
foreach ($get_miss_key_callback($miss_key) as $k => $v)
|
foreach ($get_miss_key_callback($miss_key) as $k => $v)
|
||||||
{
|
{
|
||||||
$this->set($prefix.$k, $v, $ttl);
|
$this->set($prefix . $k, $v, $ttl);
|
||||||
$cached_items[$k] = $v;
|
$cached_items[$k] = $v;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
// return
|
// return
|
||||||
if (is_array($name))
|
if (is_array($prefix . $name))
|
||||||
{
|
{
|
||||||
return $cached_items;
|
return $cached_items;
|
||||||
}
|
}
|
||||||
|
@ -487,8 +488,8 @@ class cache_sqlite extends cache_common
|
||||||
|
|
||||||
function set ($name, $value, $ttl = 604800, $prefix = '')
|
function set ($name, $value, $ttl = 604800, $prefix = '')
|
||||||
{
|
{
|
||||||
$this->db->shard($prefix.$name);
|
$this->db->shard($prefix . $name);
|
||||||
$name_sql = sqlite_escape_string($prefix.$name);
|
$name_sql = sqlite_escape_string($prefix . $name);
|
||||||
$expire = TIMENOW + $ttl;
|
$expire = TIMENOW + $ttl;
|
||||||
$value_sql = sqlite_escape_string(serialize($value));
|
$value_sql = sqlite_escape_string(serialize($value));
|
||||||
|
|
||||||
|
@ -498,10 +499,10 @@ class cache_sqlite extends cache_common
|
||||||
|
|
||||||
function rm ($name = '', $prefix = '')
|
function rm ($name = '', $prefix = '')
|
||||||
{
|
{
|
||||||
if($name)
|
if($prefix . $name)
|
||||||
{
|
{
|
||||||
$this->db->shard($prefix.$name);
|
$this->db->shard($prefix . $name);
|
||||||
$result = $this->db->query("DELETE FROM ". $this->cfg['table_name'] ." WHERE cache_name = '". sqlite_escape_string($prefix.$name) ."'");
|
$result = $this->db->query("DELETE FROM ". $this->cfg['table_name'] ." WHERE cache_name = '". sqlite_escape_string($prefix . $name) ."'");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -665,10 +666,10 @@ class sqlite_common extends cache_common
|
||||||
|
|
||||||
function rm ($name = '', $prefix = '')
|
function rm ($name = '', $prefix = '')
|
||||||
{
|
{
|
||||||
if($name)
|
if($prefix . $name)
|
||||||
{
|
{
|
||||||
$this->db->shard($prefix.$name);
|
$this->db->shard($prefix . $name);
|
||||||
$result = $this->db->query("DELETE FROM ". $this->cfg['table_name'] ." WHERE cache_name = '". sqlite_escape_string($prefix.$name) ."'");
|
$result = $this->db->query("DELETE FROM ". $this->cfg['table_name'] ." WHERE cache_name = '". sqlite_escape_string($prefix . $name) ."'");
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
@ -738,7 +739,7 @@ class cache_redis extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return ($this->connected) ? unserialize($this->redis->get($name)) : false;
|
return ($this->connected) ? unserialize($this->redis->get($prefix . $name)) : false;
|
||||||
}
|
}
|
||||||
|
|
||||||
function set ($name, $value, $ttl = 0, $prefix = '')
|
function set ($name, $value, $ttl = 0, $prefix = '')
|
||||||
|
@ -748,11 +749,11 @@ class cache_redis extends cache_common
|
||||||
$this->cur_query = "cache->set('$name')";
|
$this->cur_query = "cache->set('$name')";
|
||||||
$this->debug('start');
|
$this->debug('start');
|
||||||
|
|
||||||
if($this->redis->set($name, serialize($value)))
|
if($this->redis->set($prefix . $name, serialize($value)))
|
||||||
{
|
{
|
||||||
if ($ttl > 0)
|
if ($ttl > 0)
|
||||||
{
|
{
|
||||||
$this->redis->expire($name, $ttl);
|
$this->redis->expire($prefix . $name, $ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
$this->debug('stop');
|
$this->debug('stop');
|
||||||
|
@ -771,13 +772,7 @@ class cache_redis extends cache_common
|
||||||
{
|
{
|
||||||
if (!$this->connected) $this->connect();
|
if (!$this->connected) $this->connect();
|
||||||
|
|
||||||
$this->cur_query = "cache->rm('$name')";
|
return ($this->connected) ? $this->redis->del($prefix . $name) : false;
|
||||||
$this->debug('start');
|
|
||||||
$this->debug('stop');
|
|
||||||
$this->cur_query = null;
|
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
return ($this->connected) ? $this->redis->del($name) : false;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_installed ()
|
function is_installed ()
|
||||||
|
@ -808,7 +803,7 @@ class cache_eaccelerator extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return eaccelerator_get($name);
|
return eaccelerator_get($prefix . $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
function set ($name, $value, $ttl = 0, $prefix = '')
|
function set ($name, $value, $ttl = 0, $prefix = '')
|
||||||
|
@ -819,18 +814,12 @@ class cache_eaccelerator extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return eaccelerator_put($name, $value, $ttl);
|
return eaccelerator_put($prefix . $name, $value, $ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
function rm ($name = '', $prefix = '')
|
function rm ($name = '', $prefix = '')
|
||||||
{
|
{
|
||||||
$this->cur_query = "cache->rm('$name')";
|
return eaccelerator_rm($prefix . $name);
|
||||||
$this->debug('start');
|
|
||||||
$this->debug('stop');
|
|
||||||
$this->cur_query = null;
|
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
return eaccelerator_rm($name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_installed ()
|
function is_installed ()
|
||||||
|
@ -861,7 +850,7 @@ class cache_apc extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return apc_fetch($name);
|
return apc_fetch($prefix . $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
function set ($name, $value, $ttl = 0, $prefix = '')
|
function set ($name, $value, $ttl = 0, $prefix = '')
|
||||||
|
@ -872,18 +861,12 @@ class cache_apc extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return apc_store($name, $value, $ttl);
|
return apc_store($prefix . $name, $value, $ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
function rm ($name = '', $prefix = '')
|
function rm ($name = '', $prefix = '')
|
||||||
{
|
{
|
||||||
$this->cur_query = "cache->rm('$name')";
|
return apc_delete($prefix . $name);
|
||||||
$this->debug('start');
|
|
||||||
$this->debug('stop');
|
|
||||||
$this->cur_query = null;
|
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
return apc_delete($name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_installed ()
|
function is_installed ()
|
||||||
|
@ -914,7 +897,7 @@ class cache_xcache extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return xcache_get($name);
|
return xcache_get($prefix . $name);
|
||||||
}
|
}
|
||||||
|
|
||||||
function set ($name, $value, $ttl = 0, $prefix = '')
|
function set ($name, $value, $ttl = 0, $prefix = '')
|
||||||
|
@ -925,18 +908,12 @@ class cache_xcache extends cache_common
|
||||||
$this->cur_query = null;
|
$this->cur_query = null;
|
||||||
$this->num_queries++;
|
$this->num_queries++;
|
||||||
|
|
||||||
return xcache_set($name, $value, $ttl);
|
return xcache_set($prefix . $name, $value, $ttl);
|
||||||
}
|
}
|
||||||
|
|
||||||
function rm ($name = '', $prefix = '')
|
function rm ($name = '', $prefix = '')
|
||||||
{
|
{
|
||||||
$this->cur_query = "cache->rm('$name')";
|
return xcache_unset($prefix . $name);
|
||||||
$this->debug('start');
|
|
||||||
$this->debug('stop');
|
|
||||||
$this->cur_query = null;
|
|
||||||
$this->num_queries++;
|
|
||||||
|
|
||||||
return xcache_unset($name);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
function is_installed ()
|
function is_installed ()
|
||||||
|
@ -959,7 +936,7 @@ class cache_file extends cache_common
|
||||||
|
|
||||||
function get ($name, $get_miss_key_callback = '', $prefix = '', $ttl = 0)
|
function get ($name, $get_miss_key_callback = '', $prefix = '', $ttl = 0)
|
||||||
{
|
{
|
||||||
$filename = $this->dir . clean_filename($name) . '.php';
|
$filename = $this->dir . clean_filename($prefix . $name) . '.php';
|
||||||
|
|
||||||
$this->cur_query = "cache->set('$name')";
|
$this->cur_query = "cache->set('$name')";
|
||||||
$this->debug('start');
|
$this->debug('start');
|
||||||
|
@ -985,7 +962,7 @@ class cache_file extends cache_common
|
||||||
$this->cur_query = "cache->set('$name')";
|
$this->cur_query = "cache->set('$name')";
|
||||||
$this->debug('start');
|
$this->debug('start');
|
||||||
|
|
||||||
$filename = $this->dir . clean_filename($name) . '.php';
|
$filename = $this->dir . clean_filename($prefix . $name) . '.php';
|
||||||
$expire = TIMENOW + $ttl;
|
$expire = TIMENOW + $ttl;
|
||||||
$cache_data = array(
|
$cache_data = array(
|
||||||
'expire' => $expire,
|
'expire' => $expire,
|
||||||
|
@ -1007,9 +984,9 @@ class cache_file extends cache_common
|
||||||
function rm ($name = '', $prefix = '')
|
function rm ($name = '', $prefix = '')
|
||||||
{
|
{
|
||||||
$clear = false;
|
$clear = false;
|
||||||
if($name)
|
if($prefix . $name)
|
||||||
{
|
{
|
||||||
$filename = $this->dir . clean_filename($name) . '.php';
|
$filename = $this->dir . clean_filename($prefix . $name) . '.php';
|
||||||
if (file_exists($filename))
|
if (file_exists($filename))
|
||||||
{
|
{
|
||||||
$clear = (bool) unlink($filename);
|
$clear = (bool) unlink($filename);
|
||||||
|
@ -1037,6 +1014,36 @@ class cache_file extends cache_common
|
||||||
}
|
}
|
||||||
return $clear;
|
return $clear;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
function gc ($expire_time = TIMENOW)
|
||||||
|
{
|
||||||
|
$clear = false;
|
||||||
|
|
||||||
|
if (is_dir($this->dir))
|
||||||
|
{
|
||||||
|
if ($dh = opendir($this->dir))
|
||||||
|
{
|
||||||
|
while (($file = readdir($dh)) !== false)
|
||||||
|
{
|
||||||
|
if ($file != "." && $file != "..")
|
||||||
|
{
|
||||||
|
$filename = $this->dir . $file;
|
||||||
|
|
||||||
|
require($filename);
|
||||||
|
|
||||||
|
if(!empty($filecache['expire']) && ($filecache['expire'] < $expire_time))
|
||||||
|
{
|
||||||
|
unlink($filename);
|
||||||
|
$clear = true;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
closedir($dh);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return $clear;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -52,7 +52,7 @@ $bb_cfg = $tr_cfg = $page_cfg = array();
|
||||||
|
|
||||||
// Increase number of revision after update
|
// Increase number of revision after update
|
||||||
$bb_cfg['tp_version'] = '2.5 Beta';
|
$bb_cfg['tp_version'] = '2.5 Beta';
|
||||||
$bb_cfg['tp_release_state'] = 'R411';
|
$bb_cfg['tp_release_state'] = 'R412';
|
||||||
$bb_cfg['tp_release_date'] = '05-05-2012';
|
$bb_cfg['tp_release_date'] = '05-05-2012';
|
||||||
|
|
||||||
// Database
|
// Database
|
||||||
|
|
|
@ -96,7 +96,8 @@ $lang['CLICK_RETURN_MODCP'] = 'Click %sHere%s to return to the Moderator Control
|
||||||
$lang['CLICK_RETURN_GROUP'] = 'Click %sHere%s to return to group information';
|
$lang['CLICK_RETURN_GROUP'] = 'Click %sHere%s to return to group information';
|
||||||
|
|
||||||
$lang['ADMIN_PANEL'] = 'Go to Administration Panel';
|
$lang['ADMIN_PANEL'] = 'Go to Administration Panel';
|
||||||
|
$lang['ALL_CACHE'] = 'All cache';
|
||||||
|
$lang['ALL_CACHE_CLEARED'] = 'Cache cleared';
|
||||||
$lang['BOARD_DISABLE'] = 'Sorry, but this board is currently unavailable. Please try again later.';
|
$lang['BOARD_DISABLE'] = 'Sorry, but this board is currently unavailable. Please try again later.';
|
||||||
|
|
||||||
$lang['LOADING'] = 'Loading...';
|
$lang['LOADING'] = 'Loading...';
|
||||||
|
|
|
@ -54,7 +54,7 @@ $lang['FORUM_STATS'] = 'Статистика Форумов';
|
||||||
$lang['ADMIN_INDEX'] = 'Главная страница';
|
$lang['ADMIN_INDEX'] = 'Главная страница';
|
||||||
$lang['CREATE_PROFILE'] = 'Создать аккаунт';
|
$lang['CREATE_PROFILE'] = 'Создать аккаунт';
|
||||||
|
|
||||||
$lang['TP_VERSION'] = 'Версия TorrenPier';
|
$lang['TP_VERSION'] = 'Версия TorrenPier II';
|
||||||
$lang['TP_RELEASE_DATE'] = 'Дата выпуска';
|
$lang['TP_RELEASE_DATE'] = 'Дата выпуска';
|
||||||
|
|
||||||
$lang['CLICK_RETURN_ADMIN_INDEX'] = '%sВернуться на главную страницу администраторского раздела%s';
|
$lang['CLICK_RETURN_ADMIN_INDEX'] = '%sВернуться на главную страницу администраторского раздела%s';
|
||||||
|
@ -539,7 +539,7 @@ $lang['NOFTP_CONFIG'] = 'Попытка закачать файл настрое
|
||||||
//
|
//
|
||||||
// Version Check
|
// Version Check
|
||||||
//
|
//
|
||||||
$lang['VERSION_INFORMATION'] = 'Информация о версии TorrentPier';
|
$lang['VERSION_INFORMATION'] = 'Информация о версии TorrentPier II';
|
||||||
|
|
||||||
//
|
//
|
||||||
// Login attempts configuration
|
// Login attempts configuration
|
||||||
|
|
|
@ -99,7 +99,8 @@ $lang['CLICK_RETURN_MODCP'] = '%sВернуться к панели модера
|
||||||
$lang['CLICK_RETURN_GROUP'] = '%sВернуться к информации о группах%s';
|
$lang['CLICK_RETURN_GROUP'] = '%sВернуться к информации о группах%s';
|
||||||
|
|
||||||
$lang['ADMIN_PANEL'] = 'Администраторский раздел';
|
$lang['ADMIN_PANEL'] = 'Администраторский раздел';
|
||||||
|
$lang['ALL_CACHE'] = 'Весь кеш';
|
||||||
|
$lang['ALL_CACHE_CLEARED'] = 'Кеш очищен';
|
||||||
$lang['BOARD_DISABLE'] = 'Извините, эти форумы отключены. Попробуйте зайти попозже';
|
$lang['BOARD_DISABLE'] = 'Извините, эти форумы отключены. Попробуйте зайти попозже';
|
||||||
|
|
||||||
$lang['LOADING'] = 'Загружается…';
|
$lang['LOADING'] = 'Загружается…';
|
||||||
|
|
|
@ -61,7 +61,20 @@ table.forumline { margin: 0 auto; }
|
||||||
|
|
||||||
<!-- IF TPL_ADMIN_MAIN -->
|
<!-- IF TPL_ADMIN_MAIN -->
|
||||||
<!--========================================================================-->
|
<!--========================================================================-->
|
||||||
|
<script type="text/javascript">
|
||||||
|
ajax.manage_user = function(mode) {
|
||||||
|
$('#cache').html('<i class="loading-1">{L_LOADING}</i>');
|
||||||
|
ajax.exec({
|
||||||
|
action : 'manage_user',
|
||||||
|
mode : mode,
|
||||||
|
user_id : '',
|
||||||
|
});
|
||||||
|
}
|
||||||
|
ajax.callback.manage_user = function(data) {
|
||||||
|
$('#cache').toggle().html(data.cache_html);
|
||||||
|
$('#cache_clear').toggle().html(data.cache_html);
|
||||||
|
}
|
||||||
|
</script>
|
||||||
<br />
|
<br />
|
||||||
|
|
||||||
<table>
|
<table>
|
||||||
|
@ -69,6 +82,7 @@ table.forumline { margin: 0 auto; }
|
||||||
<td><b>{L_CLEAR_CACHE}:</b></td>
|
<td><b>{L_CLEAR_CACHE}:</b></td>
|
||||||
<td>
|
<td>
|
||||||
<a href="{U_CLEAR_DATASTORE}">{L_DATASTORE}</a>,
|
<a href="{U_CLEAR_DATASTORE}">{L_DATASTORE}</a>,
|
||||||
|
<a href="#" id="cache" onclick="ajax.manage_user('clear_cache'); return false;">{L_ALL_CACHE}</a><span id="cache_clear" class="seed bold"></span>,
|
||||||
<a href="{U_CLEAR_TPL_CACHE}">{L_TEMPLATES}</a>
|
<a href="{U_CLEAR_TPL_CACHE}">{L_TEMPLATES}</a>
|
||||||
</td>
|
</td>
|
||||||
</tr>
|
</tr>
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue