2013-09-20 118 views
0

我试过使用hook_menu()在这里和其他Drupal表单上发布的最简单的例子,并注意到似乎工作。我的代码,在:/sites/themes/mytheme/mymodule.module,如下:Drupal hook_menu()不工作

<?php 
function helloworld_menu() { 
    $items = array(); 
    $items['hello'] = array(
     'title' => 'Hello world!', 
     'type' => MENU_CALLBACK, 
     'page callback' => 'helloworld_page', 
     'access callback' => TRUE, 
    ); 
    return $items; 
} 

function helloworld_page() { 
    return 'Hello world !'; 
} 

当我浏览到www.mydomain.com/hello我得到一个404错误。我已经尝试启用和禁用模块,同时多次清理缓存,但仍然没有运气。以下是有关我的环境中一些额外的信息:7.22

  • 我已经启用干净的URL和pathauto模块

    • 运行的Drupal版本商务部

    的最终目标,我想要实现增加产品与链接到购物车。我已经有这部分工作,以便我可以将产品ID传递到一个函数并将它们添加到购物车。我将用我的函数替换helloworld_page(),然后将$ items ['hello']更改为$ items ['cart/add /%/%'],并使用两个通配符(产品ID和数量)。

  • 回答

    2

    对于钩声明像hook_menu,函数名应该像<your_module_name_here>_menu

    这是你要去哪里错了。

    你的模块名称是mymodule.module所以你hook_menu应该叫,mymodule_menu

    <?php 
    /** 
    * Implements hook_menu(). 
    */ 
    function mymodule_menu() { 
        $items = array(); 
        $items['hello'] = array(
         'title' => 'Hello world!', 
         'type' => MENU_CALLBACK, 
         'page callback' => 'helloworld_page', 
         'access callback' => TRUE, 
        ); 
        return $items; 
    } 
    
    function helloworld_page() { 
        return 'Hello world !'; 
    } 
    

    请更正函数名和清除缓存,然后再试一次。

    我还注意到你把模块放在一个非常规的位置。

    请将其移动到/sites/all/modules/custom/mymodule文件夹(均为mymodule.infomymodule.module文件)。

    +0

    哇,我没有想到函数名(除了“_menu”)重要或模块的位置。此外,我只使用虚拟数据,但它仍然有效,谢谢! – phpete