在Drupal 6中,如何在使用菜单挂钩时避免清除缓存?

时间:2012-08-29 14:24:04

标签: php drupal caching menu hook

我正在使用Drupal 6.26。当我将页面参数更新为150到50时,我刷新页面并看不到任何更改。当我从性能页面清除缓存时,我只看到了更改。由于我在Windows上本地测试Drupal,所以缓存的设置都被关闭了。现在我知道在Drupal 5上你有一个布尔标志,它是$ may_cache但是看看API这个选项对于Drupal 6是不存在的。

有没有办法在每次看到更改时都不清除缓存?

function usman_menu(){

$items['usman/hello'] = array(
        'page callback' => 'usman_example',
        'access callback' =>'user_access',
        'access arguments' =>array('access content')
);

$items['usman'] = array(
        'page callback' => 'usman_begin',
        'page arguments' => array('150'), 
        'access callback' =>'user_access',
        'access arguments' =>array('access content')
);
return $items;
}

function usman_begin($id = 20, $message = "YES", $optional = "NO"){

print "Loaded " . __FUNCTION__;
print "<br/>";
print "ID is $id, Message is $message, Option is $optional";
}

好的,我现在已经了解了一些关于菜单钩子的知识。我只是在玩代码来查看路径如何与参数和占位符一起工作。它足够快速,让我测试并不得不求助于清除缓存。我发现这很奇怪,因为没有选项可以暂时通过性能页面禁用此类缓存,仅供开发人员使用。

感谢。

2 个答案:

答案 0 :(得分:1)

如果不更改核心文件,我不知道有什么方法可以做到这一点(显然这不是一个好主意)。

菜单项被缓存,在调用menu_rebuild()之前不会刷新,直到刷新缓存(或调用其他一些管理任务之一)才会发生。

无论你采用哪种方式,你都必须至少清除cache_menu表,否则就不会调用hook_menu()

答案 1 :(得分:1)

如果我理解你的问题,我的答案就是否定。

我假设您正在更改'page arguments'=&gt;中的参数值阵列( '150')。由于整个定义被缓存,并且下次访问相同的路径时,使用缓存的数据并且不调用hook_menu。

我能提供的唯一建议是:

  • 对于快速和脏测试,请覆盖函数(回调)本身中变量的值。
  • 使用模块/脚本在每次重置时清除缓存表。例如drush cc all,或使用devel。