2014-01-04 4 views
1

Я сделал форму в пользовательский модуль я пытаюсь добавить проверку на «расстояние [postal_code]» TextField Drupal7: Форма проверки

Но не сработало!

Кто может мне помочь?

hook_menu:

function location_search_menu() { 
    $items = array(); 
    $items['markten'] = array(//this creates a URL 
    'title' => 'Markten, nog toegankelijker!', //page title 
    'page callback' => 'drupal_get_form', //this is the function that will be called when the page is accessed. for a form, use drupal_get_form 
    'page arguments' => array('location_search_form'), //put the name of the form here 
    'access callback' => TRUE 
); 
    return $items; 
} 

Форма:

function location_search_form($form, &$form_state) { 
     $form['#prefix'] = '<div id="postal-code-search"><h2>Markten vandaag in de buurt...</h2>'; 
     $form['#sufix'] = '</div>'; 
     $form['#attributes'] = array('id' => 'postal-code-form'); 
     $form['#method'] = 'get'; 
     $form['#action'] = '/location-list'; // make url 
     $form['distance[postal_code]'] = array(
     '#type' => 'textfield', //postal code field 
     '#size' => 10, 
     '#maxlength' => 10, 
     '#required' => TRUE, //make this field required 
     '#attributes' =>array('placeholder' => t('Postal code')), 
    ); 
$form['submit_button'] = array(
    '#type' => 'submit', 
    '#value' => t('Search'), 
    '#name' => '', // unset 'op' 
); 
     return $form; 
    } 

Validation:

function location_search_validate($form, &$form_state) { 
    $pc = $form_state['values']['distance[postal_code]']; 
    if(empty($pc) || $pc == '') { 
    form_set_error('distance[postal_code]', t('Postal code is required!')); 
    } 
} 
+0

'#required' является валидацией для «пустого значения» :), если это «истина», поле должно быть заполнено. найдите специальную проверку https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#element_validate – Eugen

+0

Здравствуйте, я теперь эту функцию #required, но не работаю. Я пробую несколько способов закодировать эту форму, но не работает. Я не знаю, что я делаю неправильно (извините за мой плохой английский) – Tuxy

ответ

1

Try:

$form['distance[postal_code]'] = array(
     '#type' => 'textfield', //postal code field 
     '#size' => 10, 
     '#maxlength' => 10, 
     '#required' => TRUE, //make this field required 
     '#element_validate' => array('empty_element_validation'), 
     '#attributes' =>array('placeholder' => t('Postal code')), 
    ); 



function empty_element_validation($element, &$form_state, $form) { 
    if (empty($element['#value'])) { 
    //form_set_error('distance[postal_code]', t('Postal code is required!')); 
    form_error($element, t('Postal code is required!')); 
    } 
} 
+0

Я пробовал, но не работает! – Tuxy

0

Я считаю, что проблема в этом коде:

... 
$form['#method'] = 'get'; 
$form['#action'] = '/location-list'; 
... 

И этот код:

... 
$form['#after_build'][] = 'location_search_form_modify'; 
... 
function location_search_form_modify($form){ // remove form_token, form_build_id, form_id from url 
    unset($form['form_token']); 
    unset($form['form_build_id']); 
    unset($form['form_id']); 
    return $form; 
} 
... 

Если форма отправлена, она перенаправляет на URL «получить», и игнорировать проверку

Смежные вопросы