#drupal #drupal-7
#drupal #drupal-7
Вопрос:
У меня есть $ form с коллекцией полей «field_definition», в которой есть 2 поля с неограниченной мощностью. Я могу вроде как создавать поля, делая это в hook_form_alter:
$field_definition_template = $form['field_definition']['und'][0];
for($k=0;$k<count($column_names);$k )
{
$form['field_definition']['und'][$k] = $field_definition_template;
$form['field_definition']['und'][$k]['#delta'] = $k;
}
Проблема в том, что имена неправильные, идентификаторы неправильные и почти все остальное. Есть ли способ сделать это правильно?
Комментарии:
1. Эй, Крис, что именно ты имеешь в виду, что имена и идентификаторы неправильные? Если вы не получаете структуру (например, имена и идентификаторы), которую вы ожидаете от
$form_state['values']
, убедитесь, что вы установили$form['#tree'] = TRUE
. В противном случае древовидная структура становится плоской. Я действительно не могу понять, чего вы пытаетесь достичь здесь, и это не работает…2. Это довольно сложно объяснить, но я в основном пытаюсь создать поля для неограниченной коллекции полей мощности на стороне сервера. По умолчанию всегда создается одна из коллекций полей, но для добавления другой вам нужно изменить дельту и кучу других данных, таких как идентификаторы.
3. Какого типа это поле: стандартное FAPI или CCK? Если это стандартный FAPI, то ваш код выглядит нормально, вы должны получить то, что хотите: кучу дополнительных полей в зависимости от
count($columng_names)
. В этом случае проблема в том, что сгенерированные поля не совпадают с полями по умолчанию? Я просто пытаюсь немного лучше понять вашу проблему.4. Это поля CCK, которые я пытаюсь клонировать в drupal 7. (CCK теперь в ядре)
5. Да, вы правы, CCK теперь в ядре. Я действительно не понимаю, почему ваш код не будет работать. Если только эти поля не относятся к какому-то особому типу и для них не нужны какие-то другие параметры, этот код должен сработать. Кстати, какой тип является «оригинальным» и используете ли вы специальный виджет для его отображения? Например. Файл содержит загрузку файла и изображения.
Ответ №1:
Вам захочется поработать с hook_field_presave(), чтобы добавить значения в само поле. Использование Form API для полей иногда работает, но это будет чище, если вы переключитесь на использование Field API напрямую.