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

+0

嗨Bedir,我现在一个更新。但是我使用你提供的代码问题,返回空白页面(而不是“Hello!”消息)。 – jdecuyper 2011-02-15 19:38:19

+3

如果有一个所谓的WSOD,您需要找出原因:http://drupal.org/node/158043。 – Berdir 2011-02-15 19:51:22

+0

谢谢!正如尼尔森所指出的那样,问题在于我的观点的名称不正确:)我会接受你的回答,因为你带领我走向正确的方向,并且赞同尼尔森的回答。 – jdecuyper 2011-02-15 20:12:27

你可以只在视图本身添加菜单项...和限制访问(在视图)来选择:)

  1. 的管理角色在你看来选择“页”,并点击 “添加显示“按钮(如果还没有页面显示)。
  2. 在 “页面设置”添加路径和导航 菜单
  3. 下一页在基本设置 普通菜单入境 改变访问基于角色和 选择角色(s)表示,应该有 访问
  4. 最后转到 导航菜单的设置,然后拖动 新的菜单项所需 发生在辖菜单

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

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

  1. 具有重量至少11(较高的权重比查看)
  2. 实施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; 
}