如何清空 Drupal 缓存:
- 没有开发模块
- 无需在新节点等中运行一些 PHP 语句。
- 无需进入数据库本身
实际上,您如何指示最终用户清除其缓存?
如何清空 Drupal 缓存:
实际上,您如何指示最终用户清除其缓存?
当您以管理员身份登录时(显然,并非站点的每个用户都必须有权清除缓存) ,“管理 > 站点配置 > 性能”中应该有一个页面。
而且,在页面底部,应该有一个按钮(类似于“清除缓存数据”)来清除缓存
据我记得,Devel 不需要这样做,你真的不需要去数据库,也不需要运行一些自制的 PHP 代码。
作为参考,您可以查看如何清除 Drupal 服务器端缓存
您还可以使用Drush模块,它允许您使用命令行来执行流行的 Drupal 命令,例如“drush cron”或“drush cache clear”。
如果要从模块中清除缓存,可以使用以下代码。
drupal_flush_all_caches();
我有最简单的解决方案。安装 admin_menu 模块(其实不只是为了这个目的,一旦你安装了这个模块,你肯定不会后悔的,链接:http ://drupal.org/project/admin_menu )。好的,然后在新出现的顶部下拉菜单上悬停您的网站图标和下拉菜单,您将看到:刷新所有缓存菜单。一键 - 一次冲洗。此外,您可以将所有缓存一起刷新或选择要刷新的内容:页面、菜单、主题等。尝试,您将永远不会回头)
如果你可以通过点击来获得行为,那就太棒了:
http://drupal.local./admin/settings/performance?op=Clear%20cached%20data
但你不能。
但是我确实想记下通过管理菜单快捷方式的 URL(使用后半部分):
http://drupal.local. /admin/settings/performance
可以在管理 > 站点配置 > 性能中完成按需清除。
您应该将 cron 作业设置为每小时运行一次(或您喜欢的任何时间间隔)。
当 cron 在 Drupal 上运行时,所有缓存都会被清除并重建,而无需人工手动执行。
如果这个问题与主题有关,您应该禁用缓存机制(css/js 聚合),并且您在进行更改时不必清除缓存数据。
干得好:
我不得不卸载“devel”模块(它与特殊菜单项不兼容,我需要更糟),所以我自己做了。
在您看到 MODULENAME 的任何地方,将其替换为您的模块名称。
第 1 步:添加到 HOOK_MENU 中的任何模块(最好是您的自定义模块之一),在“return $items”行之前:
// short cut for flushing the caches:
$items['flush-cache'] = array(
'type' => MENU_CALLBACK,
'title' => t('Flush the cache'),
'description' => 'MODULENAME Custom Cache Flush',
'page callback' => 'MODULENAME_flush_cache',
'access callback' => TRUE,
);
第 2 步:现在,在同一个模块文件中,它不在任何其他函数的“内部”,添加:
/** Page callback **/
function MODULENAME_flush_cache() {
drupal_flush_all_caches();
return 'Caches were flushed.';
}
现在,您只需访问站点上的 URL“/flush-cache”即可刷新缓存。(在您最后一次以旧方式刷新缓存之后。)
第 3 步:如果您真的很方便,请将以下内容添加到您的 page.tpl.php 文件中。您几乎可以将它放在 <body> 和 </body> 之间的任何位置。注意:$my_is_test 是我使用的变量,在我的测试系统上为 TRUE,在生产中为 FALSE。如果您没有类似的东西,请将其替换为 TRUE 或 FALSE 以打开或关闭它:
<?php if ($my_is_test): ?>
<a style="text-align:left; position:absolute; right:2px; top:20px;" href="<?=$base_path?>flush-cache" onclick="this.innerHTML = '<b><blink><big>Wait...</big></blink></b>';">flush</a>
<? endif; ?>
瞧!您可以单击的每个页面的右上角都有一个“刷新”链接。随意更改“右”和“顶部”数量(或将“右”更改为“左”或“顶部”更改为“底部”,以将其放置在您喜欢的任何位置。此链接定位仅适用于现代浏览器,但它的只为你,所以这应该不是问题,对吧?
我在以下位置找到了以下内容:http ://www.drupalgardens.com/content/clear-all-caches-not-working
站点周围还有另一层缓存,“清除所有缓存”不会影响,你是对的。那是为匿名用户存储内容的层。
如果您想绕过缓存进行测试,您可以在站点路径的末尾添加一个垃圾查询字符串。例如,如果您想绕过 example.drupalgardens.com/foo 上的缓存,您可以访问 example.drupalgardens.com/foo?bar=baz 或任何其他随机文本设置,例如 ?xxxxx=xxxxx。
这对我有帮助,因为我遇到了在配置 > 性能下清除缓存似乎没有帮助的问题。
以上代码适用于 Drupal 6。
对于 Drupal 7,flush-cache 模块如下:
<?php
/**
* Implementation of hook_menu()
*/
function flush_cache_menu() {
$items = array();
$items['flush-cache'] = array(
'type' => MENU_NORMAL_ITEM,
'title' => t('Flush the cache'),
'description' => 'Flush all website caches to make sure it updates to relect '.
'your recent changes.',
'page callback' => 'flush_cache_custom_callback',
'access callback' => user_access('flush cache'),
);
return $items;
}
/**
* Implementation of hook_permission()
*/
function flush_cache_permission() {
return array(
'administer my module' => array(
'title' => t('flush cache module'),
'description' => t('Content admin flush cache.'),
),
);
}
/**
* Function that flushes the cache
*/
function flush_cache_custom_callback() {
drupal_flush_all_caches();
return 'Caches were flushed.';
}
注意:然后您可以通过以下方式冲洗它:
sitename.com/flush-cache
确保您在权限页面上授予他们权限。如果在打开模块后没有出现权限,则以“正常”方式清除缓存。
当您不希望您的客户端访问管理菜单但您仍然希望他们能够刷新缓存时,这是更可取的。
以下模块创建了一个菜单项,该菜单项只能由具有“刷新缓存”权限的用户访问,该模块在常规用户权限页面上提供该菜单项。
/**
* Implementation of hook_menu()
*/
function flush_cache_menu() {
$items = array();
$items['flush-cache'] = array(
'type' => MENU_NORMAL_ITEM,
'title' => t('Flush the cache'),
'description' => 'Flush all website caches to make sure it updates to relect '.
'your recent changes.',
'page callback' => 'flush_cache_custom_callback',
'access callback' => user_access('flush cache'),
);
return $items;
}
/**
* Implementation of hook_perm()
*/
function flush_cache_perm() {
return array('flush cache');
}
/**
* Function that flushes the cache
*/
function flush_cache_custom_callback() {
drupal_flush_all_caches();
return 'Caches were flushed.';
}
在 Drupal 8 中,管理菜单模块还没有完全准备好使用。它可能会被 Drupal“工具栏”取代。所以现在没有简单的方法来清除缓存,而不是真正去:
admin/config/development/performance
唯一的选择是在现有工具栏中添加一个菜单项。这可以通过使用这个模块来完成,但是正如你所看到的,它仍然需要一些工作。我得到了它的工作,但不得不做一些调整。
使用 drush 和这个命令: drush cc all
如果您使用 Boost 进行缓存,则需要更具体:
drush @alias_name cc all