Я нахожусь в точке опыта Drupal, где я пытаюсь решить проблемы дизайна сайта на уровне пользовательского кода, используя Drupal и Views API. Как обычно, моя внешне простая попытка решить проблему показала мне, насколько я еще не знаю!
У меня есть поле ссылки на узел, которое указывает на контент «связанных фактов», используемый многими различными типами контента и подкатегориями для каждого из этих типов. Хотя я могу создавать отношения и отображать «связанные факты» для представления, существуют проблемы. Во-первых, я хочу, чтобы связанные факты были помещены в отдельный блок и отображать единый список связанных фактов для всего списка статей, представленных представлением. Views не обрабатывает дубликаты для нескольких nids с одинаковыми ссылками «связанные факты». Кроме того, мне пришлось бы создавать отдельные представления «связанных фактов» для каждого типа контента и подкатегории, которых будет довольно много.
Если бы я мог создать отдельное представление связанных фактов, которое может принимать список nids в качестве аргумента, представление связанных фактов могло бы быть упрощено. Итак, мой вопрос, как это сделать. Хотя это может быть возможно из представлений, я ищу нестандартное решение php модуля , поэтому мне нужно добиться следующего:
Извлеките результаты любого из представлений типа контента в виде списка аргументов. Помимо отображения результатов просмотра, мне нужно загрузить список отображаемых NID.
Вызовите представление связанных фактов и передайте ему список nids для использования в качестве фильтра или контекстного фильтра в представлении «связанные факты».
Дополнительная информация:
Используя эту стратегию, я начал с определения представления и попытался извлечь из него результаты. Эта попытка привела к проблеме с поиском результатов в объекте просмотра ( см. Этот вопрос ). Как только я получу результаты, мне нужно будет сгенерировать другое представление, которое будет использовать эти результаты в качестве фильтров. Я видел представления, реализованные из кода, как включающие файлы, в которых закодированы все параметры, но я не нашел примеров, которые определяют и генерируют представление и манипулируют результатами, используя функцию php. Любые примеры или ссылки будут оценены.
Так далеко:
В двух ответах рассматривается процесс применения результатов представления и помещения его в другое представление в качестве контекстного фильтра. Но я все еще сталкиваюсь с проблемой наличия десятков типов контента, по крайней мере, с дюжиной вариаций панели контента в каждом. Вместо того чтобы напрямую связывать каждое представление со связанными фактами, мне нужно, чтобы любое из моих представлений содержимого view1 передавало свои результаты в отдельное отдельное представление «связанный факт».
CONTENT TYPE SUB-CATEGORY RELATED FACT (nid)
Type 1 --------- General Info 101, 105
Specifications 103, 105
Inspections 102
Quality
etc...
Type 2 ----------General Info 101, 106
Specifications 102, 103
Cost factors 107
etc...
View1 находит определенный тип контента и содержит различные статьи подкатегорий, отсортированные по значению в поле подкатегории. Кроме того, он содержит поле ссылки на узел для связанных фактов. Просмотр один фильтр для типа контента и подкатегории и имеет открытые поля для отображения и скрытое поле с соответствующими узлами ссылки на факты.
View2 фильтрует статьи «связанных фактов» и содержит контекстный фильтр, установленный для nid (хотя этот параметр применяется к URL)
Используя код в ответе Летариона, цикл foreach в строке 6 формирует список идентификаторов статей, а не идентификаторов связанных фактов (статьи содержат ссылку на связанные факты, но связанные факты не имеют ссылки на статьи в узлах) , Мне нужно извлечь идентификаторы связанных фактов из поля фактов в каждом узле. Я включил поле фактов в определение View1, но не могу найти результат, так как команда dpm ($ node); был сбой, и я не знаю, где значения хранятся в массиве.
Поскольку для разных типов контента будет клонировано более одного View1, я подумал, что имеет смысл использовать hook_views_post_execute и закодировать его следующим образом:
function mymodule_views_post_execute (&$sourceview) {
$nids = '';
foreach($sourceview->result as $node) {
$nids += $node->nid . ','; //I need field name for $node->facts
}
$nids = rtrim($nids, ',');
$view = views_get_view('get_related');
//dpm($nids); // Fatal error: Cannot unset string offsets...
$view->execute_display('panel_pane_1', array($nids));
}
Наконец, я не уверен, должен ли я направлять отображение представления в правильное местоположение, или это делается просто путем размещения соответствующей панели содержимого фактов в расположении панели через интерфейс панели и позволяя тематике панелей обрабатывать остальное.