Как условно скрыть поле в представлении drupal?

У меня есть два поля, которые я хочу отобразить, но я хочу, чтобы второй отображался, когда первый пуст. Не удалось ли переопределить поле в файле шаблона, могу ли я сделать это, используя функциональность во встроенных функциях представлений?

6 ответов

Для просмотров 3, drupal 7

  • Желаемый вывод - Показать поле1, если поле2 пусто.

Добавьте оба поля для просмотра в поле1, поле2 и выберите поле1 флажок "исключить из отображения".

Перейдите в поле2 и настройте "Показать поведение результатов". Добавьте шаблон замены поля1, например [field1], и выберите "Считать число 0 как пустое", "Скрыть, если пусто" и "Скрыть переписывание, если пусто".

Теперь это создаст, если еще функция для этих двух полей.


  • Добавьте поле, которое вы хотите показать. Выберите "исключить из дисплея".
  • Добавьте поле, которое вы хотите контролировать, если вы показываете предыдущий. Выберите "переписать вывод". Используйте символическую замену для отображения предыдущего поля. Марк "Скрыть, если пустой"
  • Нет трех.

PS: Тексты с котируемыми опциями могут быть неправильными (я смотрю на переведенный сайт), но вы получаете идею.


Обычно я использовал модуль views_customfield для такого рода вещей. Добавьте третье поле в свое представление, которое является пользовательским полем php, и исключите ваше второе поле с дисплея. Затем вы можете написать действительно быстрый фрагмент PHP в пользовательском поле, которое проверяет, пустое ли первое поле и распечатывает второе поле, если оно есть.


Вы можете сделать это легко, выполнив следующие шаги (я пробовал это в Drupal 7):

  • Добавьте оба поля
  • сделать первый невидимым (исключить из дисплея)
  • во втором поле перейти к вкладке поведения результата.
  • записать токен первого поля (пример: [field_name]).

Он должен работать, я надеюсь, что он сработает с вами.


Мое решение для показа field_1 для английской версии и field_2 для переведенной версии:

Использование панелей:

  • Сделайте две копии представления, добавив еще один экран в представление.

  • На экране исходного вида вы удаляете или исключаете из дисплея field_2, на втором дисплее вы удаляете field_1.

  • В вашей панели вы добавляете оба ваших представления в виде панелей панели.

  • Для панели отображения первого представления добавьте Visibility rule -> User:language -> English.

  • Для панели отображения второго представления добавьте Visibility rule -> User:language -> Your_second_language.

Это выглядит сложно, но это очень просто для людей, знакомых с панелями и представлениями. Это решение не требует изменения кода или знаний о них.


Вы можете как-то массировать его, работая с созерцанием. Вы можете сделать что-то вроде этого:

<!--?php 
if(empty($node--->field_foo[0]['view'])){ ?>
<!--?php print $node--->field_bar[0]['view'] ?>
<!--?php } ?-->

licensed under cc by-sa 3.0 with attribution.