Как настроить разметку переключателей в представлении редактирования/создания узла?
Итак, у меня есть тип контента с несколькими полями. Одно поле представляет собой набор из двух переключателей. Выходной код при создании/модерации контента выглядит следующим образом:
<div id="edit-group-content-access" class="field-type-list-integer field-name-group-content-access field-widget-options-buttons form-wrapper">
<div class="form-item form-type-radios form-item-group-content-access-und">
<label for="edit-group-content-access-und">Group content visibility <span title="Diese Angabe wird benötigt." class="form-required">*</span></label>
<div class="form-radios" id="edit-group-content-access-und">
<div class="form-item form-type-radio form-item-group-content-access-und">
<input type="radio" class="form-radio" checked="checked" value="1" name="group_content_access[und]" id="edit-group-content-access-und-1">
<label for="edit-group-content-access-und-1" class="option">Public - accessible to all site users </label>
</div>
<div class="form-item form-type-radio form-item-group-content-access-und">
<input type="radio" class="form-radio" value="2" name="group_content_access[und]" id="edit-group-content-access-und-2">
<label for="edit-group-content-access-und-2" class="option">Private - accessible only to group members </label>
</div>
</div>
</div>
Теперь я хочу, чтобы это было что-то вроде этого:
<div class="form-radios" id="edit-group-content-access-und">
<input type="radio" class="switch-input" name="group_content_access[und]" value="1" id="Public" checked>
<label for="edit-group-content-access-und-1" class="switch-label switch-label-off">Public</label>
<input type="radio" class="switch-input" name="group_content_access[und]" value="2" id="Private">
<label for="edit-group-content-access-und-2" class="switch-label switch-label-on">Private</label>
<span class="switch-selection"></span>
</div>
Как я могу изменить эту разметку? (Я запустил Display suite и попытался как-то настроить его с помощью настроек DS; не получилось.)
Устранение неполадок
Проблема № 1
В какой степени $output
не используется больше для переключателей?
Проблема № 2
Как мне добавить <span class="switch-selection"></span>
после моей второй метки-переключателя? (См. Пример выше.)
Проблема № 3
На первой странице отображается следующее сообщение.
Примечание: Неопределенная переменная: вывод в themename_form_element() (строка 309 из D:\root\sites\all\themes\themename\template.php).
1 answers
Вы можете изменить вывод, переопределив следующие функции темы Drupal: theme_form_element, theme_radios и theme_radio. (Вам не понадобится theme_radio
, если вы не хотите вносить изменения в тег <input>
.)
Скопируйте эти функции в вашу тему template.php файл и замените "тему" в имени функции на название вашей темы. Настраивайте по мере необходимости. Вам придется очистить свой кэш, чтобы изменения вступили в силу аффект.
В theme_form_element()
, если вы хотите ограничить свои изменения радиоэлементами, вы можете добавить это условие:
if ($element['#type'] == 'radios' || $element['#type'] == 'radio') {
// your stripped down mark-up here
}
else {
// default mark-up
}
Вы также можете проверить соответствие другим критериям, таким как #name
и #id
:
if (strpos($element['#id'], 'edit-group-content-access') !== FALSE) {
// This form element has an id of 'edit-group-content-access-und-1' or 'edit-group-content-access-und-2'.
}
Пример реального мира, который печатает оболочку только для элементов, которые НЕ ЯВЛЯЮТСЯ радиоэлементами (только измените отображаемый код и оставьте все остальное как есть):
ДО
function mytheme_form_element($variables) {
// ...
$output = '<div' . drupal_attributes($attributes) . '>' . "\n";
// ...
$output .= "</div>\n";
// ...
}
ПОСЛЕ
function mytheme_form_element($variables) {
// ...
$output = '';
if ($element['#type'] != 'radios' && $element['#type'] != 'radio') {
$output = '<div' . drupal_attributes($attributes) . '>' . "\n";
}
// ...
if ($element['#type'] != 'radios' && $element['#type'] != 'radio') {
$output .= "</div>\n";
}
// ...
}
Бонусный совет:): Если вы просто хотите изменить атрибуты оболочки, а не удалять ее полностью, см. в этом примере.