Формы валидации , submit

Главные вкладки

Комментарии

Аватар пользователя SergoVL SergoVL 30 июля 2015 в 9:59

t1mm1 wrote:
есть такой модуль, examples
https://www.drupal.org/project/examples
в нем куча примеров с комментариями как и что работает

Не понятно как им пользоваться.Например включил я Form example, а дальше что.? Где смотреть сам код?

Аватар пользователя t1mm1 t1mm1 30 июля 2015 в 12:12

Вы скачиваете модуль, устанавливаете его - в нем много подмодулей самых разных направлений в разработке под друпал. В том числе и формы.
Далее смотрите код. Подмодуль называется form_example. Его и смотрите.
По сути вся форма состоит из трех шагов.
1. сама форма, объявляется через хук hook_form() {...}.
2. валидация - проверяется через hook_form_validate() {...}
3. сабмит - hook_form_submit() {...}

простой пример модуля с формой.
назовем модуль useformapi.

1. Создаем папку useformapi.
2. Создаем внутри паки useformapi файл useformapi.info .

name = Use form api
package = My modules
core = 7.x

2. Создаем внутри паки useformapi файл useformapi.module .
В нем я определю страницу по ссылке с формой.

/**
 * Implements hook_menu().
 */

function useformapi_menu() {
  $items['useformapipage'] = array(
    'title' => 'How to use form api?',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('useformapi_form'),
    'access callback' => TRUE,
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
}

Теперь сама форма

function useformapi_form($form, &$form_state) {
  $form['description'] = array(
    '#type' => 'item',
    '#title' => t('Description of current form'),
  );

  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Test text field'),
  );

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

  return $form;
}

Далее - валидация

function useformapi_form_validate($form, &$form_state) {
  $value_name = $form_state['values']['name'];
  if ($value_name == '') {
    form_set_error('name', t('Enter a value!'));
  }
}

И сам сабмит

function useformapi_form_submit($form, &$form_state) {
  $value_name = $form_state['values']['name'];
  drupal_set_message(t('Values is !value', array('!value' => $value_name)));
}

Все.
По сути, вы используете 3 функции.
1. Определение формы - function {formname}_form() {...}.
2. Валидация - function {formname}_form_validate($form, &$form_state) {...}
2. Сабмит - function {formname}_form_submit($form, &$form_state) {...}

Уже далее, если нужно менять какие либо свойства, или другие елементы - смотрите https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.h...

Пока вы не попробуете сами, я не смогу объяснить ) Но там все просто. Вплоть до темизации всяких уникальных компонентов для форм (ползунки там всякие и прочая ересь).

Аватар пользователя SergoVL SergoVL 10 ноября 2015 в 11:50

t1mm1 wrote:
Вы скачиваете модуль, устанавливаете его - в нем много подмодулей самых разных направлений в разработке под друпал. В том числе и формы.
Далее смотрите код. Подмодуль называется form_example. Его и смотрите.
По сути вся форма состоит из трех шагов.
1. сама форма, объявляется через хук hook_form() {...}.
2. валидация - проверяется через hook_form_validate() {...}
3. сабмит - hook_form_submit() {...}

простой пример модуля с формой.
назовем модуль useformapi.

1. Создаем папку useformapi.
2. Создаем внутри паки useformapi файл useformapi.info .

name = Use form api
package = My modules
core = 7.x

2. Создаем внутри паки useformapi файл useformapi.module .
В нем я определю страницу по ссылке с формой.

/**
 * Implements hook_menu().
 */

function useformapi_menu() {
  $items['useformapipage'] = array(
    'title' => 'How to use form api?',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('useformapi_form'),
    'access callback' => TRUE,
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
}

Теперь сама форма

function useformapi_form($form, &$form_state) {
  $form['description'] = array(
    '#type' => 'item',
    '#title' => t('Description of current form'),
  );

  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Test text field'),
  );

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

  return $form;
}

Далее - валидация

function useformapi_form_validate($form, &$form_state) {
  $value_name = $form_state['values']['name'];
  if ($value_name == '') {
    form_set_error('name', t('Enter a value!'));
  }
}

И сам сабмит

function useformapi_form_submit($form, &$form_state) {
  $value_name = $form_state['values']['name'];
  drupal_set_message(t('Values is !value', array('!value' => $value_name)));
}

Все.
По сути, вы используете 3 функции.
1. Определение формы - function {formname}_form() {...}.
2. Валидация - function {formname}_form_validate($form, &$form_state) {...}
2. Сабмит - function {formname}_form_submit($form, &$form_state) {...}

Уже далее, если нужно менять какие либо свойства, или другие елементы - смотрите https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.h...

Пока вы не попробуете сами, я не смогу объяснить ) Но там все просто. Вплоть до темизации всяких уникальных компонентов для форм (ползунки там всякие и прочая ересь).

Теперь понятно. Единственное что значат эти файлы в модуле. И все же https://api.drupal.org/api/drupal/includes!module.inc/group/hooks/7 я не нашел описание хуков hook_form_submit, hook_form_validate.

Аватар пользователя SergoVL SergoVL 30 июля 2015 в 14:34

t1mm1 wrote:
Вы скачиваете модуль, устанавливаете его - в нем много подмодулей самых разных направлений в разработке под друпал. В том числе и формы.
Далее смотрите код. Подмодуль называется form_example. Его и смотрите.
По сути вся форма состоит из трех шагов.
1. сама форма, объявляется через хук hook_form() {...}.
2. валидация - проверяется через hook_form_validate() {...}
3. сабмит - hook_form_submit() {...}

простой пример модуля с формой.
назовем модуль useformapi.

1. Создаем папку useformapi.
2. Создаем внутри паки useformapi файл useformapi.info .

name = Use form api
package = My modules
core = 7.x

2. Создаем внутри паки useformapi файл useformapi.module .
В нем я определю страницу по ссылке с формой.

/**
 * Implements hook_menu().
 */

function useformapi_menu() {
  $items['useformapipage'] = array(
    'title' => 'How to use form api?',
    'page callback' => 'drupal_get_form',
    'page arguments' => array('useformapi_form'),
    'access callback' => TRUE,
    'type' => MENU_DEFAULT_LOCAL_TASK,
  );
}

Теперь сама форма

function useformapi_form($form, &$form_state) {
  $form['description'] = array(
    '#type' => 'item',
    '#title' => t('Description of current form'),
  );

  $form['name'] = array(
    '#type' => 'textfield',
    '#title' => t('Test text field'),
  );

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

  return $form;
}

Далее - валидация

function useformapi_form_validate($form, &$form_state) {
  $value_name = $form_state['values']['name'];
  if ($value_name == '') {
    form_set_error('name', t('Enter a value!'));
  }
}

И сам сабмит

function useformapi_form_submit($form, &$form_state) {
  $value_name = $form_state['values']['name'];
  drupal_set_message(t('Values is !value', array('!value' => $value_name)));
}

Все.
По сути, вы используете 3 функции.
1. Определение формы - function {formname}_form() {...}.
2. Валидация - function {formname}_form_validate($form, &$form_state) {...}
2. Сабмит - function {formname}_form_submit($form, &$form_state) {...}

Уже далее, если нужно менять какие либо свойства, или другие елементы - смотрите https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.h...

Пока вы не попробуете сами, я не смогу объяснить ) Но там все просто. Вплоть до темизации всяких уникальных компонентов для форм (ползунки там всякие и прочая ересь).

С файлами все понятно, но с хуками не понятно. Не могу найти данные хуки.

Аватар пользователя t1mm1 t1mm1 30 июля 2015 в 18:19

Дело в том, что не все достаточно задокументировано. Некоторые моменты этого просто не требуют.
Хотя да, действительно, именно по валидации и сабмиту четкой документации нетЪ (на орге).

Аватар пользователя SergoVL SergoVL 31 июля 2015 в 9:30

t1mm1 wrote:
Дело в том, что не все достаточно задокументировано. Некоторые моменты этого просто не требуют.
Хотя да, действительно, именно по валидации и сабмиту четкой документации нетЪ (на орге).

Спасибо.

Аватар пользователя multpix multpix 31 июля 2015 в 12:30

"t1mm1" wrote:
четкой документации нетЪ (на орге)

первый же в индексе по ключу form_api drupal 7
кой чего для старта да и есть)
https://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#validate

где ж апи как не на api.drupal.org )))

Аватар пользователя t1mm1 t1mm1 31 июля 2015 в 16:53

Не, это понятно.
Но я о том, что функции не описаны отдельно, как например, тот же hook_menu и т.д..
А так одного examples должно быть достаточно.