Задача такая:
Существует несколько ролей пользователей, допустим ПЛОТНИКИ, САДОВОДЫ, ПОВАРА.
Есть тип контента (content type) с названием "ВОПРОС_СПЕЦИАЛИСТУ". В этом контенте есть поле "тип_специалиста".
Я разрешаю создание этого типа контента для всех видов пользователей, как для авторизированных, так и для анонимусов.
Так же существует страница ЗАДАТЬ ВОПРОС, на которой есть кнопки со следующим содержимым:
- СПРОСИТЬ У ПЛОТНИКА (http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ/для_плотника)
- СПРОСИТЬ У САДОВОДА (http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ/для_садовода)
- СПРОСИТЬ У ПОВАРА (http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ/для_повара)
приписки типа "для_плотника" я делаю в ручную.
Теперь, как мне сделать так, чтобы когда открывается форма создания контента, то там автоматом заполнялось поле "тип_специалиста" содержимым из URL. Т.е. если человек жмет на кнопку "СПРОСИТЬ У САДОВОДА", то он переходит на страницу http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ/для_садовода (страница будет ассоциирована со страницей создания данного контента), и там уже автоматически (можно даже скрыто от самого пользователя) было заполнено поле "тип_специалиста"="для_садовода".
Потом у меня будет отдельный View, на котором будут агрегироваться все созданные таким образом ноды, и доступ к этим нодам будет регулироваться по полю "тип_специалиста". Т.е. повара будут видеть вопросы адресованные им, плотники увидят только свои вопросы и т.д.
Так же у меня возникает проблема с созданием контента анонимными пользователями. После того как я разрешил им создавать контент, на странице permissions, вроде все нормально. Но после того как все поля заполнены, и пользователь жмет кнопку СОХРАНИТЬ, то его перекидывает на страницу с просмотром только что созданного содержимого, и естественно, поскольку просматривать данный контент анонимный юзер не может, то ему пишут что ДАННОЙ СТРАНИЦЫ НЕ СУЩЕСТВУЕТ. Как сделать чтобы его переводило сразу на главную страницу, или куда-то еще? Разрешать просмотр этого содержимого для анонимусов я не хочу.
Комментарии
Решение первой проблемы
Ну а по поводу второго - можно дописать http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ?destination=/node. Или что-то в этом духе.
Вы можете использовать модуль Computed Field.
Его значение будет $field = arg(3);
Или без него, добавляете в ноду поле, делаете его hidden, а в default value пишите (после валидации) return array(0 => arg(3));
Большое спасибо за советы!
Модуль prepoulate скорее всего именно то что я искал, но решение с функцией arg() мне показалось проще, по этому модуль не испробовал.
Решил задачу следующим кодом:
<?phpreturn array(
0 => array('value' => arg(3))
);?>
Насчет второй проблемы, то не совсем понял что даст код: ?destination=/node
Разобрался со второй проблемой.
Проблема была в том что у меня из таблицы USERS в базе данных пропал пользователь с UID = 0 т.е. аноним. Видимо это произошло когда я импортировал БД. После того как я добавил пользователя с этим UID сообщения с ошибкой больше не появлялось. Так что дело было даже не в правах доступа.
Еще раз спасибо всем за помощь.
Может, уже неактуально, но при Submit любой формы с ?destination=url в адресной строке пересылает пользователя после отправки на url.