Drupal 6:制作一个menu_hook()返回一个特定的视图
问题描述:
我创建了一个钩子以便将一个项目添加到管理员的菜单中。当用户点击该项目时,我想返回我创建的特定视图的内容。我应该如何返回视图?Drupal 6:制作一个menu_hook()返回一个特定的视图
我当前的代码看起来像:
function my_view_menu(){
$items['view'] = array(
'title' => 'Report',
'page callback' => 'return_my_view',
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
function return_my_view(){
return t("Hello!");
}
编辑:
正如Berdir建议,这种正确的方法来调用一个观点:
function return_my_view(){
$viewName = 'my_report'; // use the machine readable name of the view
return views_embed_view($viewName);
}
答
你可以只在视图本身添加菜单项...和限制访问(在视图)来选择:)
- 的管理角色在你看来选择“页”,并点击 “添加显示“按钮(如果还没有页面显示)。
- 在 “页面设置”添加路径和导航 菜单
- 下一页在基本设置 普通菜单入境 改变访问基于角色和 选择角色(s)表示,应该有 访问
- 最后转到 导航菜单的设置,然后拖动 新的菜单项所需 发生在辖菜单
答
views_embed_view()是正确的调用。如果你得到一个空白页,请尝试检查你的Apache错误日志,看看是否有任何PHP错误。我还注意到,在您的修改示例中,您使用了$ viewName =“my-report”,但views_embed_view()需要视图的机器可读名称,该名称只允许字母数字和下划线字符。也许你正在使用不正确的名字?
答
第三种技术:为视图创建页面显示后,视图将使用菜单条目设置该页面。一旦存在,就有可能为了您自己的目的复制该菜单条目。
- 具有重量至少11(较高的权重比查看)
-
实施
hook_menu_alter()
和复制查看项创建一个模块。function example_menu_alter(&$items) { $items['admin/new/path'] = $items['original/view/path']; }
这种做法有些令人费解,但有时你想克隆视图或其他“页面”内容的有用的选择。
答
除了berdir的评论,你也可以跳过中间的回调函数,只是从你的菜单中的路由器叫views_embed_view直接:
function hook_menu(){
$items['path/to/my/view'] = array(
'title' => 'Report',
'page callback' => 'views_embed_view',
'page arguments' => array('my-view-name'),
'access arguments' => array('access content'),
'type' => MENU_NORMAL_ITEM,
);
return $items;
}
嗨Bedir,我现在一个更新。但是我使用你提供的代码问题,返回空白页面(而不是“Hello!”消息)。 – jdecuyper 2011-02-15 19:38:19
如果有一个所谓的WSOD,您需要找出原因:http://drupal.org/node/158043。 – Berdir 2011-02-15 19:51:22
谢谢!正如尼尔森所指出的那样,问题在于我的观点的名称不正确:)我会接受你的回答,因为你带领我走向正确的方向,并且赞同尼尔森的回答。 – jdecuyper 2011-02-15 20:12:27