Использование представлений на сложных страницах


Я хотел бы использовать представления для создания контента для страниц пользовательского типа контента. Это, по-видимому, согласуется с использованием представлений на страницах администратора Drupal 8. У меня возникают проблемы с интеграцией представлений (содержимого страницы) с макетом страницы страницы. Это должно быть просто - но, похоже, это не так. Во всем этом я хотел бы использовать базовые функции Drupal 8 без пользовательских или добавленных модулей.

Ключевые функции, над которыми я работаю реализация - это возможность встраивать представление в любое место страницы, которое я хотел бы. Сказав еще одно, я хотел бы встроить несколько представлений (содержимое страницы) в определенные части сложной структуры страницы (макет страницы).

  • В Drupal 6 у нас есть тип контента и связанный с ним файл шаблона. Встраивание представления в шаблон является простым - мы используем PHP-код.
  • Я попытался создать представления в виде блоков и разместить их в разных областях компоновки блоков. Это быстро усложнилось - чтобы очень даже. Проблема в том, что макет страницы должен стать частью представлений. Может быть решение, включающее создание пользовательских областей компоновки блоков и включение представлений в эти новые области. Дизайн страницы содержит несколько уровней контента для мобильных устройств. Нам понадобятся области компоновки блоков для "Слоя 1", "Слоя 2" и "Слоя 3", которые являются частью тела страницы. Я не знаю, сработает ли это.
  • Я создал пользовательский модуль, который создает блок для страницы. Я могу оказать все, что я хочу, включая элементы макета и содержимое встроенных представлений. Проблема в том, что я быстро генерирую много пользовательского кода - одна из моих целей - избежать этого.
  • Я начинаю искать решение в менеджере страниц и панелях. Включение этих модулей в дизайн для, казалось бы, простой задачи не кажется правильным ответом.
  • Похоже, должен быть простой способ встроить представление в файл ветки, связанный с типом контента. Вот с чего мы начали - с Подход Drupal 6. Этого простого решения мне было трудно достичь.

Есть идеи?


Контент, который мы хотим создать, состоит из четырех частей. Все четыре части содержимого являются частью области "содержимое" страницы - верхняя и три наложения. Вот примерный прототип: raystedman.org/d8/landing

Author: kenorb, 2015-12-24

3 answers

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

Каждый элемент контента содержит поля, содержащие контент, уникальный для этого элемента контента. Но на странице для каждого элемента контента вы также хотели бы показать несколько представлений с перечислением другого контента (одного и того же или разных типов контента). Содержимое этих представлений не одинаково для каждой страницы, но отфильтровано или каким-то образом адаптировано к текущий элемент содержимого.

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

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

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

  • Вы можете использовать возможности представлений для выполнения задачи визуализации типа контента, а views_field_view - для встраивания ваших дочерних представлений в основное представление. Представления предоставляют страницы с вкладками, которые могут вам подойти.

  • В D7 вы бы обратились к модулю вложений представлений сущностей (EVA) (с 50 тысячами установок). Этот модуль делает одну вещь и делает это просто: он позволяет вам добавлять представление в виде поля в элемент содержимого и передавать этот элемент как аргумент в пользу этого мнения. К сожалению, у него нет порта D8.

  • В D7 вы можете использовать Панелизатор, Панели и технические средства. Вместе они позволяют вам управлять отображением страницы для типа контента, определять области на странице, распределять обычные поля и/или "области просмотра содержимого" по регионам и передавать текущий элемент содержимого в качестве аргументов контекста в представление. Подход панелей является зрелым, любимым многими профессионалами Drupal, мощным и гибким. Семейство панелей находится в тяжелом ожидается, что разработка для D8 станет полезной в ближайшие несколько месяцев.

  • Набор отображения позволяет добавлять дополнительные поля отображения к элементу содержимого, которые могут включать представления. Настроив представления на использование контекстных фильтров, они могут получить идентификатор текущего элемента контента по его URL-адресу и отфильтровать себя на основе этого. Единственным недостатком этого маршрута является то, что из-за этой зависимости от URL-адреса вы не получаете контекстный фильтр представления, работающий должным образом, если представление встроено в другое представление, оно работает только на странице элемента содержимого. DS является основным модулем Drupal и имеет относительно зрелый выпуск D8.

  • У Views_field_view уже есть рабочий порт D8. Это работает аналогично EVA. Единственная загвоздка в том, что он более сложный, поскольку позволяет редакторам указывать аргументы представления для каждого элемента контента. Если вы этого не хотите, вы можете установить текущий элемент содержимого как "по умолчанию" и выбрать "принудительно по умолчанию".

  • Поля отображения - это новый модуль D8. Это дает функциональность, подобную EVA, наряду с другими полезными вещами. См. https://www.drupal.org/node/2639296 для заметок о том, как использовать его для просмотра.

  • ' Форматер полей представлений" - это еще один модуль в том же пространстве. Это версия D8 почти, но не совсем готова.

Какой из этих вариантов вы выберете, может частично зависеть от того, как вы хотите обрабатывать вкладки, независимо от того, являются ли они Управляемая Drupal навигация, ведущая к отдельным URL-адресам, или они являются просто частью HTML-страницы, управляемой темой, управляемой CSS или Javascript.

 2
Author: Jonathan, 2015-12-28 17:57:11

Вы все еще можете вставлять представления в шаблоны, просто подготовьте их в yourtheme_preprocess_TEMPLATE(&$variables), поместите их в $variables['some_key'], а затем отобразите в своем шаблоне как {{ some_key }}.

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

Я не понимаю, почему бы и нет. С помощью одного ядра Drupal 8 можно сделать намного больше, чем раньше, но не все. Использование модулей contrib совершенно нормально, до тех пор, пока вы стараетесь не добавлять каждый отдельный модуль на свой сайт.

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

 4
Author: Berdir, 2015-12-29 12:43:49

У меня была точно такая же проблема. Я установил "доступ" к определенным "ролям", которые я определил. Я не проверял "Аутентифицированный пользователь", так как не хотел, чтобы все роли имели доступ. Поэтому я поставил галочку "Аутентифицированный пользователь", и все сработало нормально. Затем я вернулся и снял флажок "Аутентифицированный пользователь" и понизил, и вот, он все еще работал... только Drupal знает, почему!

 0
Author: Jake Rogers, 2020-04-23 00:57:28