2013-09-20 42 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