Drupal 6:使menu_hook()返回特定视图

时间:2011-02-15 19:27:13

标签: php drupal drupal-6 drupal-views drupal-modules

我创建了一个钩子,以便将一个项目添加到管理员的菜单中。当用户点击该项目时,我想返回我创建的特定视图的内容。我应该如何返回视图?

我目前的代码如下:

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);
} 

5 个答案:

答案 0 :(得分:5)

您只需在视图中添加一个菜单项...并将访问权限(到视图)限制为首选的管理员角色:)

  1. 在您的视图中选择“页面”并单击 在“添加显示”按钮上(如果还没有页面显示)。
  2. 在 “页面设置”添加路径和a 导航中的常规菜单输入 菜单
  3. 下一步在“基本设置”下 更改对基于角色的访问权限 选择应该具有的角色 访问
  4. 最后去了 导航菜单设置和拖动 新菜单项到所需的 放在“管理”菜单中

答案 1 :(得分:4)

答案 2 :(得分:3)

views_embed_view()是正确的调用。如果您收到空白页,请尝试检查您的apache错误日志,看看是否有任何php错误。我还注意到在修改后的示例中,您使用了$ viewName =“my-report”,但views_embed_view()需要视图的机器可读名称,该名称仅允许使用字母数字和下划线字符。也许您使用的名称不正确?

答案 3 :(得分:2)

第三种技术:为视图创建页面显示后,视图将使用菜单条目设置该页面。一旦存在,就可以为您自己的目的复制该菜单项。

  1. 创建一个权重至少为11(权重高于视图)的模块
  2. 实施hook_menu_alter()并复制查看条目。

    function example_menu_alter(&$items) {
      $items['admin/new/path'] = $items['original/view/path'];
    }
    
  3. 这种方法有点复杂,但有时候是您想要克隆的视图或其他“页面”内容的有用替代方法。

答案 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;
}