Добавление класса в поле Drupal через jQuery выводит неправильный цикл
Я добавляю класс в поле в зависимости от содержимого этого поля, чтобы я мог по-разному стилизовать каждое поле в зависимости от содержимого. Представьте себе рейтинг бургера от одного до десяти... Я хочу заменить рейтинг изображением для одного, другим изображением для двух... и так далее.
Для этого мне нужно, чтобы каждый класс поля отражал содержимое поля. Вот код, который я использую:
Drupal.behaviors.burgerRating = {
attach: function (context, settings) {
var burgerRating = $('.field-name-field-rating2').text();
$('.field-name-field-rating2').addClass(burgerRating);
}
}
Это выводит содержимое поля как класс, который я могу стилизовать. Однако в представлении блога, например, с тремя публикациями на странице, этот код добавляет все три класса ко всем трем полям, когда я хочу, чтобы каждое конкретное содержимое поля для каждого экземпляра поля.
Что я получаю, это:
<div class="field-name-field-rating2 rating-1 rating-5 rating-8">
<div class="field-name-field-rating2 rating-1 rating-5 rating-8">
<div class="field-name-field-rating2 rating-1 rating-5 rating-8">
Вместо:
<div class="field-name-field-rating2 rating-1">
<div class="field-name-field-rating2 rating-5">
<div class="field-name-field-rating2 rating-8">
Я думаю, мне нужно, чтобы это работало с.this() или.each(), но я не могу заставить его работать.
Любая помощь? Благодарю.
1 ответ
Зачем делать это в Javascript? Вы можете:
- используйте определенный шаблон для этого поля и делайте что хотите в зависимости от значения поля
- лучше, но немного сложнее: создайте средство форматирования поля с именем "burger_rating", используя эти ловушки:
hook_field_formatter_info
: https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_formatter_info/7hook_field_formatter_view
: https://api.drupal.org/api/drupal/modules%21field%21field.api.php/function/hook_field_formatter_view/7
Форматтер - это способ отображения поля. Это зависит от типа поля (текст, номер, taxonomy_reference,...). Если ваше рейтинговое поле является текстовым, вам нужно создать свой форматер для текстового поля. После его создания все текстовые поля могут использовать этот форматер.
Вы должны связать этот форматер с вашим полем на вкладке отображения вашего типа контента.
Это удивительная система, вы также можете добавить форму настроек для вашего форматера (hook_field_formatter_settings_form
)