Рейтинг:0

Как передать идентификатор блока в представление?

флаг us

У меня есть тип пользовательского блока под названием HomeBlocks. Этот пакет имеет поле абзацев, которое позволяет использовать несколько абзацев.

Затем я размещаю (используя Layout Builder) экземпляр этого типа блока на своей домашней странице (тип узла, называемый целевой страницей). В макете типа блока у меня есть представление, в котором перечислены некоторые абзацы, добавленные к этому конкретному блоку. В представлении перечислены мои абзацы, но перечислены все абзацы этого типа. Если я добавлю контекстный фильтр для идентификатора родителя в представление и установлю его как фиксированный со значением, являющимся идентификатором блока блока, который я разместил на своей домашней странице; затем он фильтрует только те, которые добавлены в этот блок. Идеальный.

Тогда вопрос; как динамически установить этот контекстный фильтр?

Я могу думать о 2 подходах:

  1. Создайте подключаемый модуль контекстного фильтра, который передает BlockID.
  2. Передайте BlockID из макета в представление.

Некоторое время назад я просмотрел вариант 2 и обнаружил, что выполняется некоторая работа, позволяющая передавать аргументы обратно из LB; но он поддерживал только статические значения (в отличие от токенов).

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

Недостающая часть здесь заключается в том, как получить список блоков (определенного типа), которые размещены на определенном узле?

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

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

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

Итак, если я правильно понял, вот что вы сделали:

  1. Создал несколько типов абзацев.
  2. Создан тип блока с полем абзаца, ссылающимся на типы абзаца в #1.
  3. Создал представление с блочным отображением Пункты, с контекстным фильтром для Parent ID.
  4. Добавлено представление в #3 к отображению блочного типа в #2 через Layout Builder.
    • Я предполагаю, что у вас есть другие вещи, происходящие в макете, иначе это был бы просто блок просмотра абзацев или просто добавленное поле абзаца непосредственно в макет.
  5. Создал экземпляры блочного типа в #2 и добавил их на страницу.

Есть пара важных шагов, которые легко пропустить:

  • На шаге 3 (создание представления) создайте связь с типом объекта «Блок».Затем вместо создания контекстного фильтра для родительского идентификатора абзаца создайте контекстный фильтр для связанного блока. Я БЫ поле.
  • На шаге 4 (добавление блока просмотра в макет), когда вы добавляете блок просмотра в макет блока, Layout Builder спросит вас о заголовке блока и его видимости. Сразу после этого и из-за предыдущих изменений в представлении теперь он спросит вас, какое значение передать в качестве значения контекстного фильтра. Там будет опция, которая представляет текущий блок.

Конечным результатом должно быть представление внутри макета блока, фильтрующее абзацы по идентификатору блока, который его содержит.

liquidcms avatar
флаг us
здорово, но, возможно, требуются патчи? Ваше описание того, что у меня есть, верно. Нет никакой связи для "типа объекта блока". У меня есть отношение к контенту, используя поля, добавленные к этому типу. Используя один из них, у меня есть аргумент для «Идентификатор пользовательского блока». После размещения блока у меня есть контекстные ссылки для «управления видимостью» (патч), управления атрибутами (стиль) и настройки. В конфигурации я вижу только заголовок и заголовок переопределения. Я также могу включить запрос аргументов в настройках блока «Вид»; но для этого требуется только статический идентификатор в макете.
liquidcms avatar
флаг us
Я попробую настроить это на ванильном сайте D9. Возможно, у вас есть патчи, или у меня нет последних (у меня D9.2), или патчи, которые у меня есть, мешают.
liquidcms avatar
флаг us
Попробовал ванильный сайт D9.2 всего с парой исправлений, чтобы абзацы вообще работали с блоками в LB, и я получил те же результаты, что и упомянутые. Я попробую обновиться до последней версии D9.3.
флаг in
@liquidcms Я только что проверил, связь называется «По идентификатору: пользовательский блок с использованием ``". Когда вы добавляете контекстный фильтр, полем для фильтрации является «Идентификатор пользовательского блока». Затем я пропустил одну небольшую деталь, когда вы настраиваете контекстный фильтр, вы проверяете «Указать критерии проверки», а валидатор установлен как «Блок». , и Single ID в качестве аргумента. Я думаю, что этот последний бит, наконец, сделал выбор для меня в последний раз, когда я это делал. И это было доступно с версии 9.1 без исправлений.
liquidcms avatar
флаг us
К сожалению, никаких отношений рядом с этим именем. Возможно, у вас есть contrib модуль? Я посмотрю, если смогу отследить его. Спасибо.
флаг in
@liquidcms Быстрый поиск «По идентификатору» (в соответствии с регистром и словами) в коде показывает, что эта функция принадлежит «entity_reference_revisions», зависимости «параграфов», которые у вас уже должны быть.
liquidcms avatar
флаг us
как ни странно, я сделал точно такой же поиск с учетом регистра по всему сайту и ничего не нашел. Но немного покопавшись и догадавшись, у вас есть этот патч: https://www.drupal.org/node/2799479. Один из № 163, как у меня, один из № 158, который еще не добавил эту связь. Спасибо за помощь.
liquidcms avatar
флаг us
И даже с этим патчем.. по-прежнему нет возможности передать текущий идентификатор блока (или что-либо еще в представление). Я подозреваю, что другой патч, обеспечивающий эту часть решения. А пока я вернусь к своему решению плагина настраиваемого аргумента для передачи «родительского идентификатора». Это работает, но на данный момент захватывает только первый блок этого типа, так как я не могу найти ответ на свой первоначальный вопрос — «как получить список блоков, размещенных на узле?».

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

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