Рейтинг:0

Как передать идентификатор абзаца из Layout Builder в представления?

флаг us

Это немного запутанно; так что, надеюсь, это имеет смысл:

У меня есть родительский объект: Event.В событии есть поле «Абзац»: «Сеансы» (тип абзаца: «Сеанс»).

Я использую Layout Builder для форматирования полноэкранного режима просмотра события. В макете я добавляю представление (абзац), в котором абзацы сеанса перечислены как тизеры (режим просмотра сеанса) с контекстным фильтром «Абзац: идентификатор родителя». Все это работает так, как ожидалось.

Затем я установил режим просмотра тизера сеанса для использования Layout Builder. Настройте раздел LB и добавьте пару полей абзаца. Это также работает, как и ожидалось. Это означает, что благодаря всему этому Layout Builder знает, для какого абзаца он должен отображать поля. Отличный.

Затем (и наконец) я создаю еще одно представление (абзац), чтобы создать отформатированный список некоторых полей моего абзаца. Я установил контекстный фильтр на идентификатор абзаца. Когда я просматриваю, вводя PID одной из моих сессий, это работает, как и ожидалось. Когда я добавляю это представление в свой макет сеанса, конечно, на моей странице событий, представление не имеет результатов. Это печально, но ожидаемо, поскольку Layout Builder никак не мог передать идентификатор абзаца в представление, даже несмотря на то, что LB знает, какой абзац использовать для отображения отдельных полей абзаца.

Это возможно? Есть ли какой-то трюк, который я пропустил, который позволяет представлению «Поля сеанса» знать, для какого абзаца он предназначен? Хотя я думаю, что это натяжка; похоже, я не так далек от того, чтобы знать, какое поле отображать.

Рейтинг:0
флаг us

Я предполагаю, что некоторые скажут, что это не лучший способ сделать это; а пока вот как мне это удалось:

В views_query_alter для верхнего представления (список сеансов, встроенный в макет события) я создаю массив drupal_static из этого списка идентификаторов абзаца.

Затем в различных представлениях, используемых для создания макета режима просмотра для абзаца сеанса, я просто array_pop этот массив drupal_static и $view->setArguments() для следующего идентификатора абзаца из массива. Представления абзацев настроены на контекстный фильтр как Content ID из URL.

Да, я знаю, что мог бы сделать что-то из этого, используя шаблоны для режима просмотра абзаца, но Views дает мне множество инструментов для форматирования данных полей, которые в противном случае было бы сложно создавать. Например, в рассматриваемых здесь полях есть статические средства форматирования карт Google, спрятанные во всплывающем поле представлений. Легко собрать во View.

liquidcms avatar
флаг us
У меня есть более одного вида, чтобы захватить биты для моего макета абзаца; поэтому мне нужно будет найти классный способ управления массивом идентификаторов. Теперь у меня есть array_pop для каждого представления, поэтому я не получаю все PID, доступные для каждого представления. Хотя достаточно легко исправить.

Ответить или комментировать

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