0

我是 Drupal 的新手。我使用以下代码创建了一个 contace1 模块:

联系方式1.info

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

contact1.module

// $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 的“Pro Drupal Development”,这里有如何创建表单的示例 :)

于 2010-08-31T07:27:51.030 回答
0

代码中的第一个错误是,如果模块名为contact1.module,那么它实现的每个钩子都应该有一个以contact1_ 开头的名称。然后你应该避免在你的模块函数名中使用contact_,因为Drupal 6 中已经有Contact 模块;如果您的模块适用于 Drupal 6,则模块之间会发生冲突。

第二个错误是您使用的常量是MENU_CALLBACK,不是MENU_CALL_BACK

如果此时contact1.module 是您的模块的名称,则其附带的信息文件应命名为contact1.info,而不是contace1.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 回答