[Решено] Какой поставить аргумент?

Главные вкладки

Аватар пользователя Сьюз Сьюз 16 июня 2010 в 23:11

Здравствуйте.
Необходимо вывести вьювзом информацию на определённые ноды. Например, при регистрации в профиле (тип материала Профиль) человек указывает зарегистрированную лабораторию. На странице этой лаборатории автоматически отражается ФИО и научная степень этого человека.

Поставила модуль Views attach, но какой поставить аргумент - не знаю. Посоветуйте, пожалуйста?

Комментарии

Аватар пользователя graker graker 16 июня 2010 в 23:26

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

На всякий случай: степени не научные, а ученые. Тут это не важно, а на сайте, который делаете, лучше писать правильно Smile

Аватар пользователя graker graker 17 июня 2010 в 0:06

Точно сказать не могу - не выводил нодреференсы во вьюсах - но насколько могу судить, надо копать Отношения. Помню, что встречал модуль Reverse Node Reference, он еще в dev, но вероятно сможет вам помочь. Если dev-версия еще совсем сырая, можно попробовать Nodereferrer.

Аватар пользователя kyky kyky 17 июня 2010 в 7:06

Лучше приклеивать юзера к лаборатории через множественное поле user reference, а не наоборот. Тогда при показе лабы будет отображаться юзер.

Аватар пользователя Сьюз Сьюз 17 июня 2010 в 8:31

"graker" wrote:
можно попробовать Nodereferrer.

Да, делала так. Работает нормально, просто хотела, чтобы кроме заголовка отражалась учёная степень :). А потом по тому же принципу хотела на страницах лаб вывести списки статей с фамилиями и выходными данными.

"kyky" wrote:
Лучше приклеивать юзера к лаборатории через множественное поле user reference, а не наоборот.

То есть в типе материала "Лаборатория" сделать поле Ссылка на пользователя?.. но это опять же будет только заголовок. Суть в том, что хотелось бы вынести больше информации. Поэтому хотела делать вьювзом.

Аватар пользователя kyky kyky 17 июня 2010 в 8:44

"Сьюз" wrote:
но это опять же будет только заголовок

В настройках поля можно изменить способ показа юзера (если мне память не изменяет).

Аватар пользователя Сьюз Сьюз 17 июня 2010 в 10:31

Попробовала ссылку на пользователя сделать. Опять загвоздка - юзеры придумали себе всякие ники, а отражаться должны ФИО реальные, которые отмечаются в Профиле. А поскольку профиль - это тип материала... (модуль Content Profile)

Неужели нет выхода? Lol

Аватар пользователя kyky kyky 17 июня 2010 в 10:42

Значит, ссылку нужно ставить не на юзера, а на его профайл. Отображать поле как тизер. В настройках полей профайла указать, какие поля показывать в тизере.

Аватар пользователя direqtor direqtor 18 июня 2010 в 13:01

Я чтобы отразить обратные отношения с материалом во вьюсах делаю примерно так.

В одном типе материала делаю поле nodereference (у вас это будут профили ученых). Для другого (лаборатории) делаю отдельный шаблон ноды node-ТИПНОДЫ.tpl.php, а в шаблоне вывожу views програмно. В нужном мне месте (обычно после вывода переменной $content) вставляю код:

<?php print views_embed_view('ИМЯ_ВЬЮСА', 'default', $node->nid) ?>

Во вьюсе отбираю фильтром материалы того типа, где стоит поле nodereference, первым аргументом ставлю это самое поле. Остальные настройки - как хочешь.

Аватар пользователя Сьюз Сьюз 18 июня 2010 в 14:36

kyky, возьму на заметку, как вариант.

"direqtor" wrote:
первым аргументом ставлю это самое поле

КАК ИМЕННО это записывается?? то есть какие команды прописываются? в примере там указано %1, но этого явно недостаточно.

Аватар пользователя direqtor direqtor 18 июня 2010 в 17:06

"Сьюз" wrote:
КАК ИМЕННО это записывается?? то есть какие команды прописываются? в примере там указано %1, но этого явно недостаточно.
Э-э-э... Да в общем-то, %1 там не нужен. В настройках вьюсв найдите Аргументы, нажмите плюсик и добавьте ваше поле nodereference.

Аватар пользователя Сьюз Сьюз 18 июня 2010 в 17:25

"direqtor" wrote:
страничных и блочных настраивать не надо

Ценное добавление. А то я бы и на этом заморочилась..
Спасибо! буду пробовать.

Аватар пользователя direqtor direqtor 18 июня 2010 в 17:49

Тогда для справки - http://drupalcontrib.org/api/function/views_embed_view/6

Первый аргумент - системное имя представления, второй - системное имя displays, все аргументы после второго в этой функции передаются уже самому представлению.

Аватар пользователя Сьюз Сьюз 18 июня 2010 в 23:18

"direqtor" wrote:
Первый аргумент - системное имя представления, второй - системное имя displays, все аргументы после второго в этой функции передаются уже самому представлению.

ВОТ ОНО!!!! *поклонилась до земли*

Аватар пользователя Сьюз Сьюз 21 июня 2010 в 14:31

"penexe" wrote:
не должно, вот и не отображается

вот вроде наоборот - должно, а не отражается.

"direqtor" wrote:
У вьюса как минимум два заголовка. Попробуйте второй.

пробовала оба, никак

Аватар пользователя penexe penexe 21 июня 2010 в 14:52

views_embed_view на то и embed что выводит только контент. и не реагирует на страницу больше никак, ни крошек, ни заголовков

Аватар пользователя penexe penexe 21 июня 2010 в 15:22

попробуйте так

$name = 'view_name'; // имя вида
$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);

Аватар пользователя Сьюз Сьюз 21 июня 2010 в 17:10

Вывел полный список пользователей. Сделала симбиоз двух кодов, получился один, страшненький, но работает:


<?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?>
Аватар пользователя Сьюз Сьюз 21 июня 2010 в 20:50

И снова я Lol
Всё работает прекрасно. Но: 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);
}
?>

Есессно, я ничего не поняла :). Чего делать с этой ошибкой? как сделать, чтобы названия вьювсов появлялись только тогда, когда есть материал для вывода?