Заполнение select field с помощью php - не сохраняются значения

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

Аватар пользователя velam velam 15 января 2011 в 23:48

Привет всем!
На странице пользователя (drupal 7, используется модуль profile 2) создал поле field_country типа select list, свойства: required, def value = none, number of values =1.

Если Allowed values list этого поля оставляю пустым и заполняю его используя селект из базы данных в своем модуле, переопределяя свойство поля формы:
function my_module_form_alter(&$form, &$form_state, $form_id)
{
switch ($form_id) {
case 'user_profile_form':
...
$result = db_query('SELECT c.country_id, c.name FROM {country} c', array(), array());
$form['profile_profile_operator']['field_country']['und']['#options'] = $result->fetchAllKeyed(0,1);
...}
}
То список заполняется правильно, но при сабмите формы значение поля не сохраняется, хотя ошибок не выдает и пишет: The changes have been saved.

А если в этот список Allowed values list занести все данные из базы, то значение сохраняется.

Мне очень хочется избежать дублирования данных и оставить список Allowed values list пустым.
Правильный ли это подход?
Как в этом случае решить проблему с сохранением значения?

Правильно ли я вообще делаю, что решил не создавать свою форму, а переопределить значения формы, сформированной с помощью profile 2?

Спасибо!

Комментарии

Аватар пользователя non-toxic non-toxic 22 июня 2011 в 13:52

Можно ли в Drupal 7 в Allowed values list в select list занести список значений в формате php? В 6 то можно было, а вот в 7 я не вижу такой возможности. Или не туда смотрю, подскажите плиз Smile

Аватар пользователя VovanZver VovanZver 8 мая 2012 в 16:52

Такая же ситуация, только список у меня изначально имеет определенные значения и я пытаюсь в этот список добавить еще значения из базы. И при сабмите выдает ошибку "Relative page: illegal value."
Пытался сделать так:

<?php
$query 
db_select('field_config');
$query->fields('field_config', array('id''data'));
$query->condition('field_config.field_name''field_relative_page');
$results $query->execute()->fetchAssoc();
$data unserialize($results['data']);

$data['settings']['allowed_values'] = $res_list;
$data serialize($data);
$query db_update('field_config');
$query->fields(array('data' => $data));
$query->condition('field_config.field_name''field_relative_page');
$query->execute();
?>

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

Аватар пользователя VovanZver VovanZver 8 мая 2012 в 17:38

Решил я эту задачу. Нужно делать так:

<?php
$field 
field_read_field('field_relative_page');
$field['settings']['allowed_values'] = $res_list;
field_update_field($field);
        
$form['field_relative_page']['und']['#options'] = $res_list;
?>

field_relative_page - это название поля. $res_list - соответственно новый список значений для селекта. Последняя строчка нужна, потому что field_update_field вносит изминения в базу, но в текущей форме значения останутся прежними