Form Api

 →  Form API Drupal 7

published 08 May 2012

Примеры создания форм.

Поле с картинкой или файлом:

$form['img'] = array(
	'#type' => 'managed_file', 
	'#title' => t('Attach Image'), 
	'#default_value' => ($gal) ? $img->fid : '', //дефалтное значение file id
	'#upload_location' => 'public://calendar', 
        '#required' => TRUE,
);

Поле для ввода текста

$form['title'] = array(
        '#type' => 'textfield',
        '#title' => 'Название',
        '#required' => TRUE,
        '#attributes' => array(
			'id' => 'my_doc_title',
			'autocomplete' => 'off'
	),
	'#description' => 'Введите название документа. Под этим названием вы будете его видеть у себя в личном кабинете.'
    );

 →  Ошибка: Используемый в поле Attach Image файл не может быть использован.

published 27 December 2011

При работе с файлами в form api , есть несколько не очевидных тонкостей, которые превращаются в грабли. Во-первых, необходимо знать, что у файлов есть статус, $file->status, 0 - временный, 1 - коренной. То есть если вы загрузили через форму ваш файл, и не задали ему нужный статус, при первом запуске крона, он весело помашет вам ручкой, и удалиться в тар-тарары Во-вторых, у файла есть счетчик использования, назовем его так. Он нужен, чтобы не удалить файл используемые той или иной сущностью. И если вы к вашему загруженному файлу не прибавите единичку, при сохранение после редактирования, на русском языке, вылезет следующая ошибка, препятствующая спокойной жизни : Используемый в поле Attach Image файл не может быть использован. Далее, представим код, правильного обращения с файлами:

 →  Добавление текста в форму

published 29 July 2011

Drupal 7 $form[’label’] = array( ‘#markup’ => “{”#" * i} Привет!", );

Drupal 6 $form[’label’] = array( ‘#value’ => “{”#" * i} Привет!", );

 →  Два селекта на ajax

published 23 July 2011

Два селекта: марка и модель. Выбираем марку и у нас подгружается список моделей. В коллбэк функции возвращаем форму, которую хотим изменить. Через** $form_state** получаем значение. Будьте внимательны, форма перестраивается занова, но визуально меняется только изменяющийся элемент.

//функция создания формы function bull_form($form, $form_state,$nid = NULL) { //запрос к таксономии для заполнения селекта $query = db_select(’taxonomy_term_data’, ’t’); $query->innerJoin(’taxonomy_term_hierarchy’, ‘r’, ’t.tid = r.tid’); $query->fields(‘r’,array(‘parent’)); $query->fields(’t’); $query->condition(‘r.parent’, PARENT, ‘=’ ); $query->orderBy(’t.name’, ‘ASC’); $result = $query->execute(); $options = array(); //заполняем option для select foreach($result as $item){ $options[$item->tid] = $item->name; } //проверям выбрана ли марка, делаем запрос по моделям этой марки (то есть пришел ли запрос от аякса) if(isset($form_state[‘values’][‘marka’])) { $tid = $form_state[‘values’][‘marka’]; $query = db_select(’taxonomy_term_data’, ’t’); $query->innerJoin(’taxonomy_term_hierarchy’, ‘r’, ’t.tid = r.tid’); $query->fields(’t’); $query->fields(‘r’,array(‘parent’)); $query->condition(‘r.parent’, $tid, ‘=’ ); $query->orderBy(’t.name’, ‘ASC’); $result = $query->execute(); $options2 = array(); //собираем опции для селекта foreach($result as $item){ $options2[$item->tid] = $item->name; } } // селект марки $form[’left’][‘marka’] = array ( ‘#type’ => ‘select’, ‘#title’ => t(‘Producer’), ‘#options’ => $options, ‘#ajax’ => array( //прописываем какую звать функцию при изменение селекта ‘callback’ => ‘ajax_get_models’, //какой элемент html в форме заменять ‘wrapper’ => ‘replace_models_div’, ),
); $form[‘right’][‘model’] = array ( ‘#type’ => ‘select’, ‘#title’ => t(‘Model’), ‘#options’ => (isset($options2)) ? $options2 : array(‘choose model’), //оборачиваем в div для замены ‘#prefix’ => ‘’, ‘#suffix’ => ‘’,
); return $form;