নির্বাচনের বিকল্প আইটেমটি গঠনের জন্য ক্লাস যুক্ত করুন


19

আমি জেএস ছাড়াই কীভাবে ফর্ম বিকল্প ট্যাগে ক্লাস যুক্ত করতে পারি? ফর্ম এপিআই-তে এই মুহুর্তে আমি এই জাতীয় একটি কীড অ্যারে পাস করতে পারি

array(
  '0' => 'option 0',
  '1' => 'option 1',
)

এবং আমি এইচটিএমএল পাবেন

<option value="0">option 0</option>
<option value="1">option 1</option>

এরকম কিছু করার কোনও উপায় আছে:

array(
  array(
    'value' => 0,
    'text' => 'option 0',
    'class' => 'bob 0',
  ),
  array(
    'value' => 1,
    'text' => 'option 1',
    'class' => 'bob 1',
  ),
)

এবং তারপর এটি পেতে

<option value="0" class="bob 0">option 0</option>
<option value="1" class="bob 1">option 1</option>

আমি এই প্রশ্নটি পছন্দ। ন্যায়পরায়ণতার জন্য উত্সাহপ্রাপ্ত।
লেস্টার পিবডি

এটি কি এখনও ড্রুপাল 7 এর জন্য একটি ইস্যু?
উইল

উত্তর:


8

দুর্ভাগ্যক্রমে বর্তমানে ফর্ম এপিআই ব্যবহার করা খুব সহজ নয়।

এই কার্যকারিতাটি যুক্ত করার জন্য এখানে একটি সমস্যা খোলা রয়েছে (এটি ২০০ 2008 এ ফিরে আসে) যা তাত্ত্বিকভাবে আপনাকে এরকম কিছু করার অনুমতি দেয়:

$form['optiontest'] = array(
  '#type' => 'select',
  '#title' => t('Option test'),
  '#options' => array(
    array(
      '#return_value' => 0,
      '#value' => t('First option'),
      '#attributes' => array('class' => 'first', 'title' => t('First option')),
    ),
    array(
      '#value' => t('Option group'),
      '#attributes' => array('class' => 'group', 'title' => t('This is an optgroup')),
      '#options' => array(
        array('#return_value' => 2, '#value' => t('1st sub-option')),
        array('#return_value' => 4, '#value' => t('2nd sub-option')),
      ),
    ),
  ),
);

তবে দুর্ভাগ্যক্রমে এই মুহূর্তে ইস্যুটির সাথে সংযুক্ত ব্যর্থ প্যাচগুলি ছাড়া কিছুই নেই।

আমি এই মুহুর্তে এটি করার #processজন্য কেবলমাত্র উপায়টি হ'ল নির্বাচিত উপাদানগুলিতে কোনও ফাংশন যুক্ত করা এবং যখন তারা পৃথকভাবে ভেঙে যায় তখন প্রতিটি বিকল্পে ক্লাস (এস) যুক্ত করা।


5

সুতরাং আমি সম্পূর্ণ নমনীয় বিকল্পটি সম্পন্ন করতে সক্ষম হইনি optionsতবে বিকল্প মানের উপর ভিত্তি করে ট্যাগটিতে ক্লাস যুক্ত করার একটি উপায় এখানে । এটি theme_selectআমার নিজের সংস্করণটির নিজস্ব সংস্করণটি ব্যবহার করতে ফাংশনটিকে ওভাররাইড করে worksform_select_options

// theme_select
function THEME_select($variables) {
  $element = $variables['element'];
  element_set_attributes($element, array('id', 'name', 'size'));
  _form_set_class($element, array('form-select'));
  return '<select' . drupal_attributes($element['#attributes']) . '>' . THEME_form_select_options($element) . '</select>';
}

/**
 *
 * @param type $element
 * @param type $choices
 * @return string 
 */
function THEME_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 = $value_valid && is_array($element['#value']);
  $options = '';
  foreach ($choices as $key => $choice) {
    if (is_array($choice)) {
      $options .= '<optgroup label="' . $key . '">';
      $options .= THEME_form_select_options($element, $choice);
      $options .= '</optgroup>';
    }
    elseif (is_object($choice)) {
      $options .= THEME_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 .= '<option class="' . drupal_clean_css_identifier($key) . '"  value="' . check_plain($key) . '"' . $selected . '>' . check_plain($choice) . '</option>';
    }
  }
  return $options;
}

0

স্বতন্ত্র optionআইটেমগুলিকে ওভাররাইড করার একটি উপায় আসলে রয়েছে । যাইহোক, আমি নিশ্চিত না এটি ড্রুপাল 7-তে কাজ করে কিনা।

ড্রুপাল ৮ এ কাজ করে এমন কিছু কোড এখানে রয়েছে।

$form['select'] = [
  '#type' => 'select',
  '#title' => t('Select'),
  '#options' => [
    '0' => t('Bob 0'),
    '1' => t('Bob 1'),
  ],
  // You define attributes for individual options as follows.
  '0' => [
    // I have tried 'disabled' = TRUE and it works.
    'disabled' => TRUE,
    // I have never tried #attributes, but I think it should work.
    '#attributes' => [
      'class' => ['bob-0'],
    ],
  ]
]

আমি আসা করি এটা সাহায্য করবে. চিয়ার্স! বিকল্পভাবে, অন্য যে কোনও একটি সমাধানের জন্য যান।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.