Господа, только начинаю изучать Друпал и честно говоря в восторге. Многие задачи которые решить не мог в принципе на других СМС тут решаются слету. Но как и везде есть пара вопросов:
1. У меня на сайте много статей, и некоторые статьи имеют по 3-4 автора. Решил я это просто: поставил CCK и создал поле автор с типом User reference - Select List. Ну и вроде все нормально, однако хотелось бы, чтобы в этом поле по умолчанию автоматом выбирался автор (user) который создает статью. Там есть настройка Default value в котором можно вставить кусок PHP кода. Никто не подскажет этот код?
2. Как сделать, чтобы в этом поле выводился не логин пользователя а данные из дополнительных полей (Имя, Фамилия, Отчество)?
Комментарии
Решил. Нашел ответ на вашем же форуме.
1.
<?phpglobal $user;
return array(0=> array('uid' => $user->uid));?>
2. Модуль RealName
Но появилась еще одна задача. Как убрать вывод автора рядом с датой? Дату убирать не нужно. В настройке шаблона убирается и то и то.
Господа, вроде как решил задачку, но теперь ее надо усовершенствовать и опять застрял. Во-первых по поводу создателя статьи. Я создал пользователя с ролью Автор - это те кто могут создавать статьи. Когда я в CCK в Default value ввожу код
return array(0=> array('uid' => $user->uid));
и ставлю в User roles that can be referenced: галку только на "Автор" и выключаю "зарегистрированный пользователь" чтобы выбирать можно было только из авторов а не из всех зарегестрированных он выдает ошибку: # Автор: invalid user.
# The PHP code for 'default value' returned Array ( [0] => Array ( [uid] => 1 ) ) , which is invalid.
Если в Default value ничего не ввожу, все нормально
И второй вопрос: А как сделать чтобы в поле выбора автора выводились не логин а имя и фамилия автора?
Попробуйте в Default value вставлять непосредственно значение (у вас же это не многозначное поле), а не массив:
<?php
return $GLOBALS['user']->uid;
?>
или простой массив
<?php
return array('uid' => $GLOBALS['user']->uid);
?>
Не получается пишет:
Expected format:
return array(
0 => array('uid' => value for uid),
// You'll usually want to stop here. Provide more values
// if you want your 'default value' to be multi-valued:
1 => array('uid' => value for uid),
2 => ...
);
Returned value: Array ( [uid] => 1 )
Никто не поможет? АУУУУУ!
У меня Ваш код работает.
У юзера номер 1 есть роль "Автор"?
Ух-ты! Ух-ты! Ух-ты! Вот спасибо, век не забуду. Все так просто было оказывается.
Вот если бы еще сделать, чтобы вместо логина пользователя показывалось его имя и фамилия - из дополнительных полей профиля была бы вообще сказка.
Создайте свой список (views) и укажите его в настройках user_reference.
Вот это мне не понятно как?
Что "как"?
Понял. Создал список (views) avtor:
Fields
Профиль: Имя
Профиль: Фамилия
Фильтры
Пользователь: Роли or Автор
в Live preview показывает
Иван
Петров
Семен
Иванов
когда создаю статью то список такого типа:
Иван - Петров - имя: Иван Петров
Семен - Иванов - имя: Семен Иванов
Как бы сделать, чтобы просто Семен Иванов?
Скрыть Имя (Exclude from display) и в фамилии нажать "Rewrite the output of this field", посмотреть "Replacement patterns" и ввести заменители фамилии и имени, например "[field_first_name] [field_second_name]"
Сделал, получилось Семен Иванов Имя: Семен Иванов
Но тут моя вина: у меня стоит модуль realname. Он подменяет логин на реальное имя в статьях. В CCK User reference он почему-то не захотел менять, а вот во views полез. В результате если я даже оставлю только имя, а фамилию уберу он мне показывает "Семен Имя: Семен Иванов". Я убрал "Профиль: Имя" и "Профиль: Фамилия" и поставил только "Пользователь: Имя" (т.е. логин) в результате все вышло красиво:
Иван Петров
Семен Иванов
Спасибо за помощь. Без вас я бы не разобрался во век.
Всё хорошо, что красиво
Еще один вопрос если можно
Теперь еще стала задача. Появилось еще одно поле: редактор
оно отличается от автора только тем, что по умолчанию надо подставлять пользователя, который редактирует материал а не создал.
Если ставлю этот код
return array(0=> array('uid' => $user->uid));
то по умолчанию подставляется имя пользователя создавшего материал. А надо того кто сейчас его изменяет. Как это сделать?
Всё верно, ваш код вставляет uid текущего юзера (который изменяет).