Меню, определенное из моего модуля, возвращает ошибку 404 - PullRequest
0 голосов
/ 31 августа 2010

Я новичок в Drupal. Я создал модуль contace1 со следующим кодом:

contace1.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 ]

3 голосов
/ 31 августа 2010

Прежде всего, MENU_CALL_BACK не определено в Drupal. Вы хотели написать MENU_CALLBACK, который регистрирует пункт меню в маршрутизаторе меню. Этот пункт обычно не отображается ни в одном видимом меню. Думайте об этом как о скрытом пункте меню. Если вы хотите сделать его видимым, используйте MENU_NORMAL_ITEM.

1 голос
/ 31 августа 2010

'type' = MENU_CALL_BACK - меню является обратным вызовом, вы должны установить его на MENU_NORMAL_ITEM или вручную создать меню на странице администратора для страницы contact1.Обновить кеш.Я рекомендую вам полностью прочитать "Pro Drupal Development" от Vandyk, есть примеры, как создавать формы:)

0 голосов
/ 19 марта 2018

Привет, попробуйте использовать этот код

/**
* 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)
    {  ..........
       .......

Здесь я устанавливаю тип markup для возврата вывода с содержимым и формой, а также устанавливаю параметр contact_nameform ($ form, $ form_state)

0 голосов
/ 17 ноября 2011

Первая ошибка в коде заключается в том, что если модуль называется contact1.module, то каждый реализуемый им хук должен иметь имя, начинающееся с contact1_.Затем вам следует избегать использования contact_ в названии функций вашего модуля, так как в Drupal 6 уже есть модуль Contact;в случае, если ваш модуль предназначен для Drupal 6, между модулями возникнет конфликт.

Вторая ошибка заключается в том, что вы используете постоянную MENU_CALLBACK, а не MENU_CALL_BACK.

Если затем contact1.module является именем вашего модуля, файл информации, который идет с ним, должен называться contact1.info, а не contace1.info.Если вы используете неправильное имя для этого файла, Drupal 6 и выше не должен показывать ваш модуль в списке модулей, которые вы можете установить.

...