Правильный путь к тематическим радио в Drupal? - PullRequest
0 голосов
/ 01 января 2012

Я пробовал использовать радио в модуле Drupal, переопределяя следующий код в функции моей темы. Для эксперимента я ничего не менял в приведенной ниже функции и просто перенес в свой модуль с другим именем, который не будет конфликтовать с оригинальной функцией API.

function theme_radios($element) {
  $class = 'form-radios';
  if (isset($element['#attributes']['class'])) {
    $class .= ' ' . $element['#attributes']['class'];
  }
  $element['#children'] = '<div class="' . $class . '">' . (!empty($element['#children']) ? $element['#children'] : '') . '</div>';
  if ($element['#title'] || $element['#description']) {
    unset($element['#id']);
    return theme('form_element', $element, $element['#children']);
  }
  else {
    return $element['#children'];
  }
}

Тема оформления и все в порядке. К сожалению, я ничего не получаю в результате. Я вижу только ярлык формы (ярлык радио). Есть идеи, пожалуйста?

РЕДАКТИРОВАТЬ: Мне удалось решить. Спасибо всем!

Ответы [ 2 ]

4 голосов
/ 20 декабря 2013

Для Drupal 7 вам придется покопаться немного глубже, чтобы это исправить.

Начните с создания MY_THEME_form_element() в вашем template.php , скопируйтевсе коды в theme_form_element() - вы можете получить это из api.drupal.org .Добавьте условие, чтобы проверить, является ли элемент переключателем перед оператором switch($element['#element_display').Затем создайте новую функцию для обработки переключателя по-другому.

if ($element['#type'] == 'radio') {
  $variables['rendered_element'] = ' ' . $prefix . $element['#children'] . $suffix . "\n";
  $output .= theme('form_element_label', $variables);
} else {
  switch ($element['#title_display']) {

Исходя из вышеизложенного, мы передаем отображение переключателя функции form_element_label(), поэтому создаем MY_THEME_form_element_label() и содержимое form_element_label() в это.Отредактируйте эту новую функцию, заменив оператор return следующим образом:

if (!empty($variables['rendered_element'])) {
    return ' <label' . drupal_attributes($attributes) . '>' . $variables['rendered_element'] . $t('!title !required', array('!title' => $title, '!required' => $required)) . "</label>\n";
} else {
    return ' <label' . drupal_attributes($attributes) . '>' . $t('!title !required', array('!title' => $title, '!required' => $required)) . "</label>\n";
}

Это даст вам переключатель, размещенный внутри метки, а не под или над ней.

И, наконец, вы можетеподключитесь к theme_radios , чтобы добавить дополнительное форматирование к способу отображения списка радиокнопок.

Этот ответ был найден на этой ссылке. Он описывает решение с использованиемфлажок.

NB Вы также можете применить это при форматировании любого элемента.

0 голосов
/ 07 января 2012

Вопрос решен.Я опубликовал пост в блоге о том, как это сделать.Любой, кто нуждается в помощи по аналогичной проблеме, может обратиться к ссылке.http://www.encodez.com/blog/how-to-theme-radio-drupal-1.html

Примечание: это решение для Drupal 6.

...