Как отобразить список узлов и детали одного узла в Drupal - PullRequest
0 голосов
/ 16 апреля 2009

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

Я только начинаю проникать в Drupal, и количество уровней, на которых я могу что-то делать, несколько ошеломляет. Например, это должна быть страница просмотра с настраиваемым блоком внизу? Страница с двумя блоками (один для списка, один для элемента)? Если так, как они будут сообщать идентификатор узла? Уже есть модуль, который сделает это для меня? Может быть, я должен написать свой собственный модуль? И так далее. Если бы кто-то с лучшим общим пониманием Друпала мог указать мне правильное направление, это было бы оценено.

Edit: Спасибо за ответы до сих пор, я думаю, они указывают, что я упустил важную деталь в своем первоначальном вопросе. Итак, еще несколько деталей:

Я бы хотел, чтобы эта страница была главной страницей пользователя. Таким образом, мое представление ограничено отображением созданных ими узлов. Редактирование страницы узла по умолчанию дало бы мне проблему с тем, на какой узел отправлять пользователя при входе в систему (что, возможно, возможно), а также означало бы, что я, по-видимому, не смог бы просмотреть узел, не увидев также вид? 1009 *

Я пробовал другой способ, который заключается в создании узла страницы, который включает представление (называемое user_home) с использованием некоторого PHP. Я также установил элемент управления View, чтобы создать ссылку для каждого узла в списке и включить идентификатор узла в эту ссылку, например. http://localhost/drupal-6.10/?q=node/13/12 (где 13 - идентификатор узла созданной мной страницы, а 12 - идентификатор узла элемента в списке).

<?php
//output the user_home view
print views_embed_view('user_home', $display_id = 'default');
?>
<br/>
<hr/>
<br/>
<?php
$queryparam = $_GET["q"];
// find the second /
$index = strpos($queryparam, '/');
$index = strpos($queryparam, '/', $index + 1);
$displayNodeId = substr($queryparam, $index + 1);
$displayNodeId = (int)$displayNodeId;

if ($displayNodeId > 0)
{
  $displayNode = node_load($displayNodeId);
  print node_view($displayNode);
}
?>

Теперь, это работает, но я уверен, что это более дружественный / совместимый с друпами способ ведения дел (а разбор строки запроса - отвратительный взлом).

Ответы [ 3 ]

1 голос
/ 17 апреля 2009

Каноническим решением для этого является использование блока в «верхней области контента» и полного узла в области контента.

Самый простой способ достижения этого - просто отобразить страницу узла в обычном режиме и, с темой, имеющей верхнюю область содержимого (Garland не делает, Zen classic делает), создать блок Views, содержащий нужный список, и поместить его. это в этом регионе. Вы можете использовать путь в качестве аргумента представления, чтобы его содержимое могло зависеть от отображаемого в данный момент узла. Затем определите видимость блока, чтобы он соответствовал только тем условиям, которые вы хотите, возможно, отображать только на страницах узлов или, возможно, на страницах узлов определенного типа содержимого. Для этого используйте режим видимости PHP для блока и сделайте что-то вроде

// Filter args for safety
if ((arg(0) == 'node') && is_numeric(arg(1)) {
  $node = node_load(arg(1);
  return is_object($node) && ($node->type == 'the_content_type_i_want');
}
else {
  return FALSE;
}

Таким образом, блок будет отображаться только тогда, когда вы этого хотите.

Если ваша тема не имеет этой функции, панели позволяют разделить страницу и разместить представление на одной панели, а полный узел - на другой.

0 голосов
/ 03 ноября 2010

Пользовательский пейджер может работать на вас. http://drupal.org/project/custom_pagers

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

Вам не нужно предоставлять обратные ссылки, такие как стандартный пейджер (и по умолчанию) - с custom_pager вы получаете переменную $ nav_array для воспроизведения, которая содержит все узлы в вашем представлении.

При этом вы сможете создать таблицу или список ссылок.

Создание вторичного меню на основе заголовков узлов

0 голосов
/ 16 апреля 2009

Я бы сделал это следующим образом. Установите Настройки видимости страницы для вашего блока Views со списком узлов, который будет отображаться только на этих узлах, модуль Pathauto может быть полезен и здесь для управления путями к множеству узлов.

...