2012-02-24 109 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中的下划线。

它们应该是“页面回调”,“页面参数”,“访问回调”。 (没有下划线)

相关问题