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


In Drupal 6, how can I avoid clearing the cache when using the 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";
}

好的,我现在已经了解了一些关于菜单挂钩的知识。我只是在玩代码,看看路径如何与参数和占位符一起工作。它刷新得足够快,让我进行测试,不得不清除缓存。我觉得这很奇怪,因为对于开发人员来说,没有任何选项可以通过性能页面临时禁用这种缓存。

谢谢。

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

菜单项是缓存的,在调用menu_rebuild()之前不会刷新,直到刷新缓存(或调用其他几个管理任务之一)才会刷新。

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

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

我假设您正在更改"page arguments"=>数组("150")中的参数值。由于整个定义都被缓存,并且下次访问同一路径时,将使用缓存的数据,而不会调用hook_menu。

我能提供的唯一建议是:

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