Предположим у вас на сайте есть два типа материала. Пусть это будет "Автор" и "Статья". В статье есть поле типа "Ссылка на материал", через которое к статье привязывается автор.
Задача следующая: на странице автора нужна ссылка на добавление статьи. При переходе по этой ссылке поле автора должно быть заполнено соответствующим автором.
Реализуется это достаточно просто. Для этого понадобятся:
- собственный модуль
- знание Form API
- понимание hook_form_alter
- немного знаний по PHP
Скачиваем и включаем модуль
References Node Reference должен быть включён
Создаём материал типа "Автор".
В материале типа article добавляем соответствующее поле.
Разрешаем прикреплять через него авторов
Материал готов
Затем создадим(если их ещё нет) несколько авторов.
Я создал пока трёх.
Вот теперь можно создать нужную нам ссылку. Самый простой и топорный способ - создать блок. Так как у него очень легко задать настройки видимости.
В этом случае нам потребуется включить модуль PHP Filter, так что имейте это ввиду. Если не хотите его включать - обыграйте этот момент по-другому. Например пропишите ссылку в шаблоне автора.
Я постарался уместить страницу создания блока на скриншоте.
Заголовок блока можно написать так, чтоб вам было понятно. Я написал "Ссылка на статью с автором"
В Block body я написал следующий код:
print l
('Add article', 'node/add/article', array('query' => array('a' => arg
(1))));
Поясняю. Функция l создаёт ссылку. Первый аргумент - анкор ссылки, второй - путь ссылки(атрибут href), а третий прикрепляет GET переменную
a, которая будет передавать NID просматриваемой ноды, то есть автора. Функция arg подтягивает этот NID. Даже если у вас настроены ЧПУ(красивые адреса) - идентификатор материала всё равно подтянется.
Сразу же разместил блок в регионе Sidebar first. В настройках видимости дал права только админу и на страницах материала типа Article.
Не забывайте кавычки в боди, а также выставить формат ввода. Никаких визуальных редакторов, естественно.
Если теперь открыть страницу автора - увидите блок со ссылкой. Например на Лермонтове ссылка у меня выглядела так
/node/add/article?a=4 А у самого автора NID=4. Если у вас всё работает так-же - значит всё сделали правильно.
Можете нажать на эту ссылку, у вас откроется обычая страница добавления материала типа article.
Вот сейчас уже можно создавать свой модуль. Как его сделать написано
тут и
тут.
Размещаем в нём hook_form_alter:
На начальном этапе я узнаю идентификатор формы следующим образом.
function mymodule_form_alter(&$form, &$form_state, $form_id){
debug($form_id);
}
Я заранее вынес поле автора повыше, чтоб было видно.
Дебаг показал мне, что айдишник формы добавления статьи
article_node_form
Тогда я поальтерю ранее созданное поле автора. В моём случае оно называется
field_node_author. Если у вас так-же то копируйте текст. Иначе - меняйте на своё.
function mymodule_form_alter(&$form, &$form_state, $form_id){
if($form_id == 'article_node_form') {
$form['field_node_author']['und'][0]['nid']['#default_value'] = (int) $_GET['a'];
}
}
}
Я всё сделал верно, поле заполнено. У вас должно получиться точно так-же.
Модуль вышел на 7 строчек кода;)