Привет всем!
На странице пользователя (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?
Спасибо!
Комментарии
Можно ли в Drupal 7 в Allowed values list в select list занести список значений в формате php? В 6 то можно было, а вот в 7 я не вижу такой возможности. Или не туда смотрю, подскажите плиз
решили?
Такая же ситуация, только список у меня изначально имеет определенные значения и я пытаюсь в этот список добавить еще значения из базы. И при сабмите выдает ошибку "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();
?>
Но это абсолютно не помогло. Напишите, кто знает, куда еще надо запихнуть свой новый список значений, что бы все работало
Решил я эту задачу. Нужно делать так:
<?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 вносит изминения в базу, но в текущей форме значения останутся прежними