Здравствуйте друпалеры. Задам туповатый вопрос решение где-то в голове крутится не могу его найти.
Как сделать блок в котором:
- аватарка автора
- его имя
- какое нибудь поле из профиля
И чтобы этот блок высвечивался на страницах материалов, которые создал автор. Т.е. как на этом сайте.
Это можно сделать без модуля author pane?
Пока что я создал блок в Views, добавил в него поля: имя пользователя, изображение пользователя, поля из профиля.
Но: таким образом выводятся в блоке все пользователи, а мне нужно чтобы пользователь, создавший материал.
[Решение] (Подсказала annya)
Добавить аргумент Пользователь: Uid
В нем указать Тип аргумента по умолчанию: PHP Код
Критика принимается
Комментарии
Добавте аргумент по User uid. Далее выберите Provide default argument->PHP Code и в появившемся текстовом поле сформируйте пхп код который будет узнавать автора по id ноды. Что-то вроде такого(код не проверялся в действии!):
$uid = db_result(db_query("SELECT node.uid
FROM {node} node
WHERE node.nid = %d", arg(1)));
}
return $uid;
Аргумент User uid добавил.
"Provide default argument->PHP Code" А это где? Не вижу... Есть Validator: PHP Code. Это оно?
Нажмите в браузере Ctrl+F и вбейте туда "Provide default argument"
<?php
$node = node_load(arg(1)); // автор будет в $node->uid
?>
Упс, действительно есть.
Вот только на нужных страницах сообщение вылазит:
user warning: Unknown column 'node' in 'field list' query: SELECT node uid FROM node node WHERE node.nid = 312 in .../public_html/sites/all/modules/views/plugins/views_plugin_argument_default_php.inc(48) : eval()'d code on line 4.
xxandeadxx, это вставить к существующему коду (если да то куда?) или заменить?
это альтернатива кода от annya@drupal.org, вставлять туда же
Не совсем согласна. node_load при условии того что нода не кешированная будет нагружать базу десятками запросов. В моем варианте нужен только 1 запрос.
P.S. VasyOK Запрос исправила. Пробуйте еще раз.
Выводит в блоке
"Name: Гость"
А нужно чтобы выводило имя автора материала. На страницах того материала, который создал автор.
Значит что-то неправильно делаете - должно работать.
Кеширование в настройках производительности отключено.
Да пусть этот блок уже где угодно высвечивается, лишь бы показывал автора созданного материала.
Вот картинка представления:
http://www.drupal.ru/files/myview.jpg
и того что получается в результате:

Блок Author pane выводит имя автора материала как надо, а блок созданный Views всегда выводит "Гость"
Обновл.
Экспорт это вот это:
http://www.drupal.ru/files/viewsblock.txt
ну дайте експорт вашей вьюшки
васёк, создай сниппет в блоке и не мучайся
<?php
global $base_path;
$node = node_load(arg(1));
$author = user_load($node->uid);
echo '<img src="' . $base_path . $author->picture . '" />';
echo $author->name;
echo $author->какое_нибудь_поле_из_профиля;
?>
Не совсем соглашусь -)
node_load() все равно не избежать при запросе типа node/123. Node_load() имеет статический кэш, и дубликаты запросов к БД тем самым исключаются. Если вы естественно, с параметром $reset ее не вызываете.
И потом, где это в друпале отдельно кешируются ноды? Там либо страница целиком (с блоками), либо блоки.
node_load(arg(1)) будет прекрасно смотреться при урле типа "user/123"
оно там даже вызываться не будет, ибо
annya, спасибо работает! Увидел что запрос исправили.
А чем не устроил стандартный блок для этой цели, входит в ядро друпала в модуле profile? (тот что используется здесь на друпал.ру)
Е мое, там и такое есть. Все пятница...
Завтра на дачу поеду.