Сделать блок "Об авторе"

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

Аватар пользователя VasyOK VasyOK 15 октября 2010 в 15:58

Здравствуйте друпалеры. Задам туповатый вопрос решение где-то в голове крутится не могу его найти.

Как сделать блок в котором:

  1. аватарка автора
  2. его имя
  3. какое нибудь поле из профиля

И чтобы этот блок высвечивался на страницах материалов, которые создал автор. Т.е. как на этом сайте.

Это можно сделать без модуля author pane?

Пока что я создал блок в Views, добавил в него поля: имя пользователя, изображение пользователя, поля из профиля.

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

[Решение] (Подсказала annya)

Добавить аргумент Пользователь: Uid
В нем указать Тип аргумента по умолчанию: PHP Код

 if (arg(0) == 'node' && is_numeric(arg(1))) {
    $uid = db_result(db_query("SELECT node.uid
                              FROM {node} node
                              WHERE node.nid = %d"
, arg(1)));
  }
  return $uid;

Критика принимается Smile

Комментарии

Аватар пользователя annya@drupal.org annya@drupal.org 15 октября 2010 в 17:48

Добавте аргумент по User uid. Далее выберите Provide default argument->PHP Code и в появившемся текстовом поле сформируйте пхп код который будет узнавать автора по id ноды. Что-то вроде такого(код не проверялся в действии!):

  if (arg(0) == 'node' && is_numeric(arg(1))) {
    $uid = db_result(db_query("SELECT node.uid
                              FROM {node} node
                              WHERE node.nid = %d"
, arg(1)));
  }
  return $uid;
Аватар пользователя VasyOK VasyOK 15 октября 2010 в 17:20

Упс, действительно есть.

Вот только на нужных страницах сообщение вылазит:
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 annya@drupal.org 15 октября 2010 в 17:50

xxandeadxx wrote:
это альтернатива кода от annya@drupal.org, вставлять туда же

Не совсем согласна. node_load при условии того что нода не кешированная будет нагружать базу десятками запросов. В моем варианте нужен только 1 запрос.
P.S. VasyOK Запрос исправила. Пробуйте еще раз.

Аватар пользователя VasyOK VasyOK 15 октября 2010 в 17:50

Выводит в блоке
"Name: Гость"

А нужно чтобы выводило имя автора материала. На страницах того материала, который создал автор.

Аватар пользователя xxandeadxx xxandeadxx 15 октября 2010 в 17:55

"<a href="mailto:annya@drupal.org">annya@drupal.org</a>" wrote:
при условии того что нода не кешированная

"VasyOK" wrote:
И чтобы этот блок высвечивался на страницах материалов

Аватар пользователя VasyOK VasyOK 15 октября 2010 в 17:58

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

Аватар пользователя VasyOK VasyOK 10 ноября 2015 в 11:47

Вот картинка представления:
http://www.drupal.ru/files/myview.jpg

и того что получается в результате:

Блок Author pane выводит имя автора материала как надо, а блок созданный Views всегда выводит "Гость"

Обновл.
Экспорт это вот это:
http://www.drupal.ru/files/viewsblock.txt

Аватар пользователя xxandeadxx xxandeadxx 15 октября 2010 в 19:21

васёк, создай сниппет в блоке и не мучайся

<?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->какое_нибудь_поле_из_профиля;
?>
Аватар пользователя kosilko kosilko 15 октября 2010 в 19:26

"<a href="mailto:annya@drupal.org">annya@drupal.org</a>" wrote:
Не совсем согласна. node_load при условии того что нода не кешированная будет нагружать базу десятками запросов. В моем варианте нужен только 1 запрос.

Не совсем соглашусь -)
node_load() все равно не избежать при запросе типа node/123. Node_load() имеет статический кэш, и дубликаты запросов к БД тем самым исключаются. Если вы естественно, с параметром $reset ее не вызываете.
И потом, где это в друпале отдельно кешируются ноды? Там либо страница целиком (с блоками), либо блоки.

Аватар пользователя kosilko kosilko 15 октября 2010 в 19:31

"xxandeadxx" wrote:
васёк, создай сниппет в блоке и не мучайся

node_load(arg(1)) будет прекрасно смотреться при урле типа "user/123"

Аватар пользователя xxandeadxx xxandeadxx 15 октября 2010 в 19:48

"kosilko" wrote:
node_load(arg(1)) будет прекрасно смотреться при урле типа "user/123"

оно там даже вызываться не будет, ибо
"VasyOK" wrote:
этот блок высвечивался на страницах материалов

Аватар пользователя us11@drupal.org us11@drupal.org 15 октября 2010 в 23:35

А чем не устроил стандартный блок для этой цели, входит в ядро друпала в модуле profile? (тот что используется здесь на друпал.ру)