Drupal 6 Form API - Передача значений

Я пытаюсь написать собственный модуль в Drupal 6 и пытаюсь добавить простую форму в административную область, используя API формы.

У меня есть форма, показывающая, но я не могу заставить ее снова заполниться при отправке и перезагрузке страницы. Я попытался передать второй параметр &$form_state в мою функцию hook_form, но это привело к ошибке об отсутствии второго параметра.

Я уверен, что это что-то простое, но я не могу понять это, вот мой код.module:

/*
* Implements hook_init().
*/

function movehub_featured_links_block_init() {

    drupal_add_css(drupal_get_path('module', 'movehub_featured_links_block') . '/assets/css/movehub-featured-links-block-style.css');

}

/**
* Implements hook_theme().
*/

function movehub_featured_links_block_theme() {

    return array(
        'movehub_featured_links_block_manage' => array(
            'template' => 'movehub-featured-links-block-admin-manage'
        ),
        'movehub_featured_links_block_add' => array(
            'template' => 'movehub-featured-links-block-admin-add',
            'arguments' => array('link_id' => null)
        ),
    );

}

function movehub_featured_links_block_manage() {

    return theme('movehub_featured_links_block_manage');

}

function movehub_featured_links_block_add_form(&$form) {print_r($form);

    $form = array();

    $form['#attributes'] = array('enctype' => 'multipart/form-data');

    $form['link_title'] = array(
        '#type' => 'textfield',
        '#title' => t('Link Title')
    );

    $form['image'] = array(
        '#type' => 'file',
        '#title' => t('Image')
    );

    $form['image_hover'] = array(
        '#type' => 'file',
        '#title' => t('Hover Image')
    );

    $form['submit'] = array(
        '#type' => 'submit',
        '#value' => t('Add!')
    );

    return $form;

}

/**
* Implements hook_menu().
*/

function movehub_featured_links_block_menu() {

    $items = array();

    $items['admin/featured_links'] = array(
        'title' => 'Featured Links',
        'description' => 'Add, view and edit featured links..',
        'page callback' => 'movehub_featured_links_block_manage',
        'page arguments' => array('movehub_featured_links_block_admin'),
        'access arguments' => array('administer movehub_featured_links_block settings'),
        'type' => MENU_NORMAL_ITEM,
    );

    $items['admin/featured_links/manage'] = array(
        'title' => 'Manage',
        'description' => 'Add, view and edit featured links.',
        'page callback' => 'movehub_featured_links_block_manage',
        'page arguments' => array('movehub_featured_links_block_admin'),
        'access arguments' => array('administer movehub_featured_links_block settings'),
        'type' => MENU_NORMAL_ITEM,
    );

    $items['admin/featured_links/add'] = array(
        'title' => 'Add',
        'description' => 'Add a new featured link.',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('movehub_featured_links_block_add_form'),
        'access arguments' => array('administer movehub_featured_links_block settings'),
        'type' => MENU_CALLBACK
    );

    return $items;

}

function movehub_featured_links_block_add_form_submit($form, &$form_state) {



}

function movehub_featured_links_block_add_form_validation($form, &$form_state) {



}

2 ответа

Решение

Удалось найти очень простую ошибку, которая вызвала у меня эту проблему, а именно то, что я использовал неправильное имя хука при проверке.

Я использовал:

movehub_featured_links_block_add_form_validation

Так должно быть:

movehub_featured_links_block_add_form_validate

Ключевой частью является использование hook_validate вместо hook_validation. Ошибка новичка.

В вашей функции формы добавьте "#default_value" для каждого поля. (См. API формы Drupal 6 #default_value для получения дополнительной информации)

Ваше определение поля в форме будет выглядеть примерно так:

$form['link_title'] = array(
    '#type' => 'textfield',
    '#title' => t('Link Title'),
    '#default_value' => 'My custom link title',
);

Затем API формы должен заполнить его заданным значением по умолчанию при первой загрузке формы. Делая это таким образом, если пользователь не проходит проверку и получает обратно форму для исправления своих ошибок, значения формы должны содержать любой обновленный текст, который они ранее вводили. Drupal заполняет форму с помощью form_state при обновлении формы для отображения, поэтому вам не нужно беспокоиться об этой стороне вещей, если вы просто установите #default_value.

Другие вопросы по тегам