Доброй ночи!
Помогите плиз!
<?php
$terms
= taxonomy_get_tree(1, 0, -1, 1);
foreach($terms as $term) {
$choice = new stdClass();
$choice->option = array($term->tid => str_repeat('-', $term->depth) . $term->name);
$country_list[] = $choice;
}
Переменную $country_list я отправляю в форму
$form
['country'] = array(
'#type' => 'select',
'#title' => t('Country'),
'#options' => $country_list,
'#default_value' => 0,
?>
Как сделать что бы мог добавлять в каждый option нужный мне class???
Комментарии
Попробуй $country_list сделать ассоциативным массивом и подобавлять в него атрибут класс.
Я пробовал, но в конструкции селекта нет class
<?php function theme_select($element) {
$select = '';
$size = $element['#size'] ? ' size="'. $element['#size'] .'"' : '';
_form_set_class($element, array('form-select'));
$multiple = $element['#multiple'];
return theme('form_element', $element, '<select name="'. $element['#name'] .''. ($multiple ? '[]' : '') .'"'. ($multiple ? ' multiple="multiple" ' : '') . drupal_attributes($element['#attributes']) .' id="'. $element['#id'] .'" '. $size .'>'. form_select_options($element) .'</select>');
}
function
form_select_options($element, $choices = NULL) {if (!isset($choices)) {
$choices = $element['#options'];
}
// array_key_exists() accommodates the rare event where $element['#value'] is NULL.
// isset() fails in this situation.
$value_valid = isset($element['#value']) || array_key_exists('#value', $element);
$value_is_array = is_array($element['#value']);
$options = '';
foreach ($choices as $key => $choice) {
if (is_array($choice)) {
$options .= '<optgroup label="'. $key .'">';
$options .= form_select_options($element, $choice);
$options .= '</optgroup>';
}
elseif (is_object($choice)) {
$options .= form_select_options($element, $choice->option);
}
else {
$key = (string)$key;
if ($value_valid && (!$value_is_array && (string)$element['#value'] === $key || ($value_is_array && in_array($key, $element['#value'])))) {
$selected = ' selected="selected"';
}
else {
$selected = '';
}
$options .= '<strong><option value="'. check_plain($key) .'"'. $selected .'>'. check_plain($choice) .'</option></strong>';
}
}
return $options;
} даже если дописать $class то я пока еще не понял как отправить туда класс
?>
Если кому интересно, то я решил данную задачу чуток подправив код в файле form.inc
заменил:
<?php
if (is_array($choice)) {
$options .= '<optgroup label="' . $key . '">';
$options .= form_select_options($element, $choice);
$options .= '</optgroup>';
}
?>
на:
<?php
if (is_array($choice)) {
if(isset($choice['class'])){
$key = (string) $choice['value'];
if ($element['#value'] === $key) {
$selected = ' selected="selected"';
}
else {
$selected = '';
}
$options .= '<option class="'. check_plain($choice['class']) .'" value="' . check_plain($key) . '"' . $selected . '>' . check_plain($choice['text']) . '</option>';
}else{
$options .= '<optgroup label="' . $key . '">';
$options .= form_select_options($element, $choice);
$options .= '</optgroup>';
}
}
?>
теперь если вы задаете в параметрах '#options' массив вот такой структуры:
<?php
'#options' => array(
array(
'value' => 1,
'text' => t('ваше значение'),
'class' => 'ваш класс'
)
)
?>
то к элементу option в select добавиться атрибут класс.
Пока для меня это оказалось самым простым решением с минимальными затратами времени.