Меню, определенное из моего модуля, возвращает ошибку 404
-
25-09-2019 - |
Вопрос
Я новый до 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)));
}
IM Этот код, я пытался создать новую контактную форму
Но он не показывает никакой ссылки и на открытии страницы непосредственно дают страницу не найден.
Нет правильного решения
Другие советы
Прежде всего, MENU_CALL_BACK
не определено в Drupal. То, что вы хотели написать, это MENU_CALLBACK
, который регистрирует пункт меню в маршрутизаторе меню. Этот элемент не будет отображаться в любом видимом меню нормально. Подумайте об этом как о скрытом пункте меню. Если вы хотите сделать это видимым, использовать MENU_NORMAL_ITEM
.
«Тип» = MENU_CALL_BABK - MENU является обратным вызовом, вы должны установить его в MENU_NOMMAL_ITEM или вручную создать меню на странице Admin на страницу Contact1. Обновить кеш.
Я рекомендую вам полностью прочитать «Pro Drupal Development» от Vandyk, есть примеры, как создавать формы :)
Первая ошибка в коде заключается в том, что если модуль называется Contact1.Module, то каждый крюк, который он реализует, должен иметь имя, начиная с Contact1_. Затем вы должны избегать использования Contact_ в имени функций вашего модуля, так как уже есть контактный модуль в Drupal 6; В случае, если ваш модуль предназначен для Drupal 6, между модулями будет конфликт между модулями.
Вторая ошибка заключается в том, что постоянная, которую вы используете, является MENU_CALLBACK
, нет MENU_CALL_BACK
.
Если тогда Contact1.Module - это имя вашего модуля, информационный файл, который поставляется с ним, должен быть назван Contact1.info, а не Contace1.info. Если вы используете неправильное имя для этого файла, Drupal 6 и выше, не должен отображать свой модуль в списке модулей, которые вы можете установить.
Привет, попробуйте использовать этот код
/**
* 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)