Как вывести значение поля ноды в select поле формы сделанной на Form API

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

Аватар пользователя Наденька Наденька 26 сентября 2016 в 1:25

Привет друзья, прошу помощи по затруднительному вопросу.

Суть:

У меня есть тип материала с полями цвет и размер, это текстовый список с множественным выбором, где админ может задать доступные цвета и размеры для определённого товара.

На странице выводиться форма которую я набросала в кастомном модуле через Form API

В эту форму добавляю селекторы в которые необходимо передать значение из полей цвет и размер и тут меня подкараулил вселенский облом, если брать значения поля таким образом и передавать в поле формы напрямую:

<?php
function acard_form_add($form, &$form_state){

    

$size $node->field_size['und'];
    
$color $node->field_color['und'];

    

$form['size'] = array(
        
'#type' => 'select',
        
'#options' => $size,
    );

    

$form['color'] = array(
        
'#type' => 'select',
        
'#options' => $color,
    );
?>

получается вот такая вот неприятная штука:

<select class="form-control form-select" id="edit-size" name="size">
    <optgroup label="0">
    <option value="value">S</option>
    </optgroup><optgroup label="1">
    <option value="value">L</option>
    </optgroup></select>

Поясню, массив поля выглядит следубщим образом (и справа пример вывода поля в форме)

form api field from node

Вопрос:

Как собственно правильно передать массив в select формы так что бы отображались только параметры и value="" был идентичен значению ни или ключу на крайний случай.

Благодарю всех откликнувшихся.

ВложениеРазмер
Иконка изображения screen24879.jpg81.12 КБ

Лучший ответ

Аватар пользователя gun_dose gun_dose 26 сентября 2016 в 9:49
1
<?php
 $size 
$node->field_size['und'];
    
$color $node->field_color['und'];
    
    foreach (
$size as $key => $val) {
      
$form['size']['#options'][] = $val['value'];
    }   
    
?>

Комментарии

Аватар пользователя gun_dose gun_dose 26 сентября 2016 в 9:49
1
<?php
 $size 
$node->field_size['und'];
    
$color $node->field_color['und'];
    
    foreach (
$size as $key => $val) {
      
$form['size']['#options'][] = $val['value'];
    }   
    
?>
Аватар пользователя Наденька Наденька 26 сентября 2016 в 15:54

Спасибо, это то что нужно!

я немного затупила, что к чему, по этому на всякий, показываю ниже полный контекст решения:

<?php
 
function custom_form_add($form, &$form_state){

    

$size $node->field_size['und'];
    
$color $node->field_color['und'];

    

$form['color'] = array(
        
'#type' => 'select',
    );

    

$form['size'] = array(
        
'#type' => 'select',
    );

    foreach (

$color as $key => $val) {
         
$form['color']['#options'][] = $val['value'];
       }

    foreach (

$size as $key => $val) {
         
$form['size']['#options'][] = $val['value'];
    }
?>
Аватар пользователя Наденька Наденька 26 сентября 2016 в 16:57

Вопрос в догонку, данный код задал значение

 <option value="0">S</option>
 <option value="1">M</option>
 <option value="2">L</option>

Можно ли как то переопределить значение value="0" на аналогичное значение что в option?

Я догадываюсь что в тот же foreach необходимо добавить вторую строку, но не понимаю как достучатся до value="" так как ['value'] это то, что между option