Здравствуйте.
Необходимо вывести вьювзом информацию на определённые ноды. Например, при регистрации в профиле (тип материала Профиль) человек указывает зарегистрированную лабораторию. На странице этой лаборатории автоматически отражается ФИО и научная степень этого человека.
Поставила модуль Views attach, но какой поставить аргумент - не знаю. Посоветуйте, пожалуйста?
Комментарии
Сложно понять, если вы не говорите, как человек указывает лабораторию (через нодреференс?) и что такое лаборатория (тип материала?).
На всякий случай: степени не научные, а ученые. Тут это не важно, а на сайте, который делаете, лучше писать правильно![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
Да, поле в СКК - нодреференс. Лаборатория - тип материала.
Точно сказать не могу - не выводил нодреференсы во вьюсах - но насколько могу судить, надо копать Отношения. Помню, что встречал модуль Reverse Node Reference, он еще в dev, но вероятно сможет вам помочь. Если dev-версия еще совсем сырая, можно попробовать Nodereferrer.
Лучше приклеивать юзера к лаборатории через множественное поле user reference, а не наоборот. Тогда при показе лабы будет отображаться юзер.
Да, делала так. Работает нормально, просто хотела, чтобы кроме заголовка отражалась учёная степень :). А потом по тому же принципу хотела на страницах лаб вывести списки статей с фамилиями и выходными данными.
То есть в типе материала "Лаборатория" сделать поле Ссылка на пользователя?.. но это опять же будет только заголовок. Суть в том, что хотелось бы вынести больше информации. Поэтому хотела делать вьювзом.
В настройках поля можно изменить способ показа юзера (если мне память не изменяет).
Попробовала ссылку на пользователя сделать. Опять загвоздка - юзеры придумали себе всякие ники, а отражаться должны ФИО реальные, которые отмечаются в Профиле. А поскольку профиль - это тип материала... (модуль Content Profile)
Неужели нет выхода?![Lol](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/lol.gif)
Значит, ссылку нужно ставить не на юзера, а на его профайл. Отображать поле как тизер. В настройках полей профайла указать, какие поля показывать в тизере.
Я чтобы отразить обратные отношения с материалом во вьюсах делаю примерно так.
В одном типе материала делаю поле nodereference (у вас это будут профили ученых). Для другого (лаборатории) делаю отдельный шаблон ноды node-ТИПНОДЫ.tpl.php, а в шаблоне вывожу views програмно. В нужном мне месте (обычно после вывода переменной $content) вставляю код:
Во вьюсе отбираю фильтром материалы того типа, где стоит поле nodereference, первым аргументом ставлю это самое поле. Остальные настройки - как хочешь.
kyky, возьму на заметку, как вариант.
КАК ИМЕННО это записывается?? то есть какие команды прописываются? в примере там указано %1, но этого явно недостаточно.
Да, и вам нужно только дефолтное представление, страничных и блочных настраивать не надо.
Ценное добавление. А то я бы и на этом заморочилась..
Спасибо! буду пробовать.
Тогда для справки - http://drupalcontrib.org/api/function/views_embed_view/6
Первый аргумент - системное имя представления, второй - системное имя displays, все аргументы после второго в этой функции передаются уже самому представлению.
ВОТ ОНО!!!! *поклонилась до земли*
получилось! Спасибо!![Smile](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/smile.gif)
direqtor, а почему название вьюса не отображается?
У вьюса как минимум два заголовка. Попробуйте второй.
вот вроде наоборот - должно, а не отражается.
пробовала оба, никак
views_embed_view на то и embed что выводит только контент. и не реагирует на страницу больше никак, ни крошек, ни заголовков
ааа, вон где собака порылась..
а как тогда записать, чтобы полный вьюс был?
попробуйте так
$display_id = 'default'; //имя отображения
$args = array(); // массив аргументов
$view = views_get_view($name);
if (!$view || !$view->access($display_id)) {
return;
}
print $view->get_title();
print $view->preview($display_id, $args);
Вывел полный список пользователей. Сделала симбиоз двух кодов, получился один, страшненький, но работает:
<?php
$name = 'sotrudniki'; // имя вида
$display_id = 'default'; //имя отображения
$args = array(); // массив аргументов
$view = views_get_view($name);
if (!$view || !$view->access($display_id)) {
return;
}
print $view->get_title();
print views_embed_view('sotrudniki', 'default', $node->nid) ?>
И снова я![Lol](https://drupal.ru/sites/all/modules/contrib/smiley/packs/kolobok/lol.gif)
Всё работает прекрасно. Но: 1. если во вьювсе нечего выводить, заголовок всё равно появляется. 2. Появилась ошибка
warning: Cannot modify header information - headers already sent by (output started at /usr/local/www/drupal6/sites/all/themes/black-mamba/template.php:1) in /usr/local/www/drupal6/includes/common.inc on line 148.
Иду по адресу. Common.inc строки 141-152:
<?php
function drupal_set_header($header = NULL) {
// We use an array to guarantee there are no leading or trailing delimiters.
// Otherwise, header('') could get called when serving the page later, which
// ends HTTP headers prematurely on some PHP versions.
static $stored_headers = array();
if (
strlen($header)) {header($header);
$stored_headers[] = $header;
}
return implode("\n", $stored_headers);
}
?>
Есессно, я ничего не поняла :). Чего делать с этой ошибкой? как сделать, чтобы названия вьювсов появлялись только тогда, когда есть материал для вывода?