2012-02-24 107 views
2

我剛剛開始在drupal上,所以如果這是一個非常愚蠢的問題,請致歉。我編寫了以下模塊,但每次嘗試訪問它時,都會轉到url(http:// localhost:8888/drupal/doodil_viral_signup),我得到一條拒絕訪問的消息。我已經嘗試重建權限並禁用並重新啓用模塊,但它似乎不起作用。Drupal「您無權訪問此頁面。」

<?php 
// $Id$ 
/** 
* @file 
* A module to encourage users to sign up. 
* This module allows users to sign up to register for the site, and invite their friends to do the same. 
*/ 

/** 
* Implements hook_help(). 
*/ 
function doodil_viral_signup_help($path, $arg) { 
    if ($path == 'admin/help#first') { 
    return t('This module allows users to sign up to register for the site, and invite their friends to do the same.'); 
    } 
} 

/** 
* Implements hook_menu(). 
*/ 
function doodil_viral_signup_menu($may_cache = true) { 
    $items = array(); 
    if ($may_cache) { 
    $items[] = array(
     'path' => 'doodil_viral_signup', 
     'title' => t('Doodil Signup'), 
     'callback' => 'doodil_viral_signup_page', 
     'access' => TRUE, 
     'type' => MENU_CALLBACK, 
    ); 
    } 
    return $items; 
} 

function doodil_viral_signup_page() { 
    return drupal_get_form('doodil_viral_signup_page_form'); 
} 

function doodil_viral_signup_page_form() { 
    // [input text] First Name 
    $form['first_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('First Name'), 
); 

    // [input text] Last Name 
    $form['last_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Last Name'), 
); 

    // [input text] Email Address 
    $form['email_address'] = array(
    '#type' => 'textfield', 
    '#title' => t('Email Address'), 
); 

    // [input submit] Sign Me Up 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#title' => t('Sign Me Up'), 
); 
    return $form; 
} 

function doodil_viral_signup_page_form_submit($form_id, $form_values) { 
    $message = 'You have submitted the following information <pre>'.print_r($form_values).'</pre>'; 
    drupal_set_message(t($message)); 
} 

誰能告訴我如何解決這個問題?

在此先感謝!

回答

3

盡一切建議你什麼loganfsmyth除了hook_menu(),它應該是這樣的:

function doodil_viral_signup_menu() { 
    $items = array(); 
    $items['doodil_viral_signup'] = array(
    'title' => 'Doodil Signup', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('doodil_viral_signup_page_form'), 
    'access callback' => TRUE, 
    'type' => MENU_CALLBACK, 
); 
    return $items; 
} 

,並刪除doodil_viral_signup_page()功能。

編輯

這只是測試我的機器,它的工作完美。如果它不能在你的機器上工作,那麼問題不在這個模塊中。

function doodil_viral_signup_help($path, $arg) { 
    if ($path == 'admin/help#first') { 
    return t('This module allows users to sign up to register for the site, 
    and invite their friends to do the same.'); 
    } 
} 

function doodil_viral_signup_menu() { 
    $items = array(); 
    $items['doodil_viral_signup'] = array(
    'title' => 'Doodil Signup', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('doodil_viral_signup_page_form'), 
    'access callback' => TRUE, 
    'type' => MENU_CALLBACK 
); 
    return $items; 
} 

function doodil_viral_signup_page_form($form, &$form_state) { 
    $form['first_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('First Name') 
); 
    $form['last_name'] = array(
    '#type' => 'textfield', 
    '#title' => t('Last Name') 
); 
    $form['email_address'] = array(
    '#type' => 'textfield', 
    '#title' => t('Email Address') 
); 
    $form['submit'] = array(
    '#type' => 'submit', 
    '#value' => t('Sign Me Up') 
); 
    return $form; 
} 

function doodil_viral_signup_page_form_submit($form, $form_state) { 
    $message = t('Your submitted information <pre>!info</pre>', array(
    '!info' => print_r($form_state['values'], TRUE) 
)); 
    drupal_set_message($message); 
} 
+0

仍然沒有:(我已經通過了整個模塊代碼,並確保我沒有做過任何愚蠢的事情,比如缺少分號(以及其他所有與打字速度相關的各種廢話) 是否願意仔細看看代碼和我的Drupal安裝?我很高興給管理員訪問等。 – 2012-02-28 19:21:08

+0

檢查我編輯的答案。 – 2012-02-28 20:08:05

0

此代碼全部採用Drupal 5所使用的格式。您的代碼表示drupal 7,所以我假設這就是您想要的?

function doodil_viral_signup_menu() { 
    $items = array(); 
    $items['doodil_viral_signup'] = array(
    'title' => 'Doodil Signup', 
    'page callback' => 'doodil_viral_signup_page', 
    'access callback' => TRUE, 
    'type' => MENU_CALLBACK, 
); 
    return $items; 
} 

而且形式應該是

function doodil_viral_signup_page_form($form, &$form_state) { 

而且提交應該是:

function doodil_viral_signup_page_form_submit($form, $form_state) { 
    drupal_set_message(t('You have submitted the following information <pre>!info</pre>', array(
    '!info' => print_r($form_state['values'], TRUE), 
))); 
} 

使用<pre>是一個醜陋的方式,雖然調試的事情。你應該下載devel模塊,並使用它的功能dsm($form_state['values']);

+0

是的,我正在使用Drupal 7.讓我適合使用過時的教程!即使做出了你所建議的改變,但這似乎仍然不起作用。我禁用了該模塊,重新構建了權限並在進行更改後重新啓用了該權限。 – 2012-02-25 13:50:40

+0

其實,我只是嘗試了另一個測試頁面,並說拒絕訪問。我猜這是一個權限問題? – 2012-02-25 14:01:08

+0

我不知道你的重建權限是什麼意思,但你需要點擊「性能」頁面上的「清除緩存」。Drupal將hook_menu中的所有數據保存在緩存中,因此hook_menu僅在清除緩存時執行。 – loganfsmyth 2012-02-25 15:27:26

1

當你給($形式,& $ form_state),其中給出了上面的代碼。 您可能歌廳這種類型的錯誤:

-------------------------------------- 
warning: Missing argument 2 for 
-------------------------------------- 

必須有隻有一個函數的參數。

function_name($form) 
1

我得到了同樣的錯誤。

通過這樣做解決: 刪除page_callback,page_arguments和access_callback中的下劃線。

它們應該是「頁面回調」,「頁面參數」,「訪問回調」。 (沒有下劃線)

相關問題