Добавить class в option селекта

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

Аватар пользователя Bezlepkin Bezlepkin 23 января 2012 в 0:53

Доброй ночи!

Помогите плиз!

<?php

$terms 

taxonomy_get_tree(10, -11);
  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???

Комментарии

Аватар пользователя Bezlepkin Bezlepkin 23 января 2012 в 11:49

Я пробовал, но в конструкции селекта нет 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 то я пока еще не понял как отправить туда класс

?>

Аватар пользователя eredjepov_aziz eredjepov_aziz 11 февраля 2013 в 13:15

Если кому интересно, то я решил данную задачу чуток подправив код в файле 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 добавиться атрибут класс.
Пока для меня это оказалось самым простым решением с минимальными затратами времени.