0

Drupal は初めてです。次のコードで contace1 モジュールを作成しました。

contace1.info

; $Id$
name = Contact1
description = Show how to build contact form
package = Pro Drupal Development
core = 6.x

contact1.モジュール

// $Id$

/**
* @file
* practice to build form
*/

/**
* Implimentation of hook_menue().
*/

function contact_menu()
    {
        $items['contact1'] = array(
            'title' => 'Contact',
            'page callback' => 'contact_page',
            'access argument' => array('access content'),       
            'type'=>MENU_CALL_BACK,
            'access callback' => TRUE,
            
            );
            return $items;
    
    }
    
/**
* menu callback
* called when user goes to http://localhost/drupaldemo/?q=contact
*/

function contact_page()
    {
        $output = t('You can leave a message using the contact form below.');
        //Return the html generated from $form data structure.
        $output.= drupal_get_form('contact_nameform');
        return $output;
    }
    /**
    * define the form
    */
function contact_nameform()
    {
        $form['user_name']= array(
        '#title' =>t('Your Name'),
        '#type' => 'textfield',
        '#description' => t('Please enter your name.'),
                );
        $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Submit'),
        )       ;
        return $form;
    }
    
/**
* validate the form
**/
function contact_nameform_validate()
    {
        if($form_state['values']['user_name']=="")
            {
            form_set_error('user_name',t('Please enter your name.'));
            }
    
    }
    
/**
* handle post validation form submition
*/
function contact_nameform_submit($form ,&$form_state)
    {
    $name=$form_state['values']['user_name'];
    drupal_set_message(t('Thanks for filling out the form, %name',array('%name'=>$name)));
    
    }

このコードで、新しいお問い合わせフォームを作成しようとしました

ただし、リンクは表示されず、ページを開くと、ページが見つかりませんでした。

4

4 に答える 4

3

まず第一にMENU_CALL_BACK、Drupalでは定義されていません。あなたが書きたかったのはMENU_CALLBACK、メニュールーターにメニュー項目を登録するです。このアイテムは、通常、表示されているメニューには表示されません。隠しメニュー項目と考えてください。表示したい場合は、を使用してMENU_NORMAL_ITEMください。

于 2010-08-31T07:27:24.853 に答える
1

'type' = MENU_CALL_BACK-メニューはコールバックです。MENU_NORMAL_ITEMに設定するか、管理ページからcontact1ページに手動でメニューを作成する必要があります。キャッシュを更新します。

Vandykの「ProDrupalDevelopment」を完全に読むことをお勧めします。フォームの作成方法の例があります:)

于 2010-08-31T07:27:51.030 に答える
0

コードの最初のエラーは、モジュールの名前が contact1.module の場合、モジュールが実装するすべてのフックの名前が contact1_ で始まることです。Drupal 6 には既に Contact モジュールがあるため、モジュールの関数の名前に contact_ を使用することは避けてください。モジュールが Drupal 6 用の場合、モジュール間で競合が発生します。

2 番目のエラーは、使用している定数がMENU_CALLBACKではなく であるということMENU_CALL_BACKです。

contact1.module がモジュールの名前である場合、それに付属する情報ファイルは、contace1.info ではなく、contact1.info という名前にする必要があります。そのファイルに間違った名前を使用すると、Drupal 6 以降では、インストールできるモジュールのリストにそのモジュールが表示されません。

于 2011-11-17T17:08:29.637 に答える
0

こんにちは、このコードを使用してみてください

/**
* menu callback
*
*/

function contact_page()
    {
        $output = array(
            'item 1' => array(
              "#type" => 'markup',
              '#markup' =>  t('You can leave a message using the contact form below.'),
            ),
            'item 2' => array(
              "#type" => 'markup',
              '#markup' =>  drupal_get_form('contact_nameform'),
            ),
        );
        return $output;
    }
    /**
    * define the form
    */
function contact_nameform($form, $form_state)
    {  ..........
       .......

ここでは、コンテンツとフォームを含む出力を返すように マークアップタイプを設定し、 contact_nameform($form, $form_state)のパラメーターも設定します。

于 2018-03-19T14:15:35.823 に答える