2012-02-24 197 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

だ使用する必要があり、それは次のようにする必要があります:

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()機能を削除します。

EDIT

これはちょうど私のマシン上でテストされ、それが完璧に働いています。マシン上で動作しない場合は、このモジュールに問題がありません。あなたの与えられている上記のコードでは($フォーム、& $ form_state)与えられた

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のインストールを詳しく見ていきたいですか?私は管理者のアクセスなどを与えるのがとても嬉しいです。 –

+0

私の編集した答えをチェックしてください。 –

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) { 

れて提出してくださいする必要があります:<pre>を使用して

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

は、しかし、物事をデバッグする醜い方法です。あなたはdevelモジュールをダウンロードし、それがhook_menu()以外のあなたに提案するものloganfsmyth全力を尽くす機能にdsm($form_state['values']);

+0

ええ私はDrupal 7を使用しています。あなたが提案した変更を加えた後でさえ、これはまだ動作していないようです。私はモジュールを無効にし、パーミッションを再構築して、変更を加えた後に再度有効にして確認しました。 –

+0

実際、私は別のテストページを試しましたが、それはアクセス拒否も同様です。これは権限の問題だと思いますか? –

+0

再構築のアクセス許可の意味がわかりませんが、[パフォーマンス]ページの[キャッシュのクリア]をクリックする必要があります。Drupalはhook_menuのすべてのデータをキャッシュに保持します。したがって、hook_menuはキャッシュをクリアするときにのみ実行されます。 – loganfsmyth

1

。 あなたは、このタイプのエラーをgetingすることができる。

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

は、関数の中で一つだけの引数がなければなりません。

function_name($form) 
1

同じエラーが発生しました。

解決方法: page_callback、page_arguments、およびaccess_callbackのアンダースコアを削除します。

「ページコールバック」、「ページ引数」、「アクセスコールバック」である必要があります。 (アンダースコアなし)

関連する問題