我创建了一个钩子,以便将一个项目添加到管理员的菜单中。当用户点击该项目时,我想返回我创建的特定视图的内容。我应该如何返回视图?
我目前的代码如下:
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);
}
答案 0 :(得分:5)
您只需在视图中添加一个菜单项...并将访问权限(到视图)限制为首选的管理员角色:)
答案 1 :(得分:4)
您想要views_embed_view(),请参阅http://web.archive.org/web/20110213234806/http://thedrupalblog.com/embedding-view-drupal-6-using-views-embed-view
答案 2 :(得分:3)
views_embed_view()是正确的调用。如果您收到空白页,请尝试检查您的apache错误日志,看看是否有任何php错误。我还注意到在修改后的示例中,您使用了$ viewName =“my-report”,但views_embed_view()需要视图的机器可读名称,该名称仅允许使用字母数字和下划线字符。也许您使用的名称不正确?
答案 3 :(得分:2)
第三种技术:为视图创建页面显示后,视图将使用菜单条目设置该页面。一旦存在,就可以为您自己的目的复制该菜单项。
实施hook_menu_alter()
并复制查看条目。
function example_menu_alter(&$items) {
$items['admin/new/path'] = $items['original/view/path'];
}
这种方法有点复杂,但有时候是您想要克隆的视图或其他“页面”内容的有用替代方法。
答案 4 :(得分:2)
除了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;
}