Как получить данные в CCK Field из URL

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

Аватар пользователя evilive evilive 17 октября 2009 в 17:24

Задача такая:
Существует несколько ролей пользователей, допустим ПЛОТНИКИ, САДОВОДЫ, ПОВАРА.

Есть тип контента (content type) с названием "ВОПРОС_СПЕЦИАЛИСТУ". В этом контенте есть поле "тип_специалиста".

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

Так же существует страница ЗАДАТЬ ВОПРОС, на которой есть кнопки со следующим содержимым:
- СПРОСИТЬ У ПЛОТНИКА (http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ/для_плотника)
- СПРОСИТЬ У САДОВОДА (http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ/для_садовода)
- СПРОСИТЬ У ПОВАРА (http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ/для_повара)
приписки типа "для_плотника" я делаю в ручную.

Теперь, как мне сделать так, чтобы когда открывается форма создания контента, то там автоматом заполнялось поле "тип_специалиста" содержимым из URL. Т.е. если человек жмет на кнопку "СПРОСИТЬ У САДОВОДА", то он переходит на страницу http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ/для_садовода (страница будет ассоциирована со страницей создания данного контента), и там уже автоматически (можно даже скрыто от самого пользователя) было заполнено поле "тип_специалиста"="для_садовода".

Потом у меня будет отдельный View, на котором будут агрегироваться все созданные таким образом ноды, и доступ к этим нодам будет регулироваться по полю "тип_специалиста". Т.е. повара будут видеть вопросы адресованные им, плотники увидят только свои вопросы и т.д.

Так же у меня возникает проблема с созданием контента анонимными пользователями. После того как я разрешил им создавать контент, на странице permissions, вроде все нормально. Но после того как все поля заполнены, и пользователь жмет кнопку СОХРАНИТЬ, то его перекидывает на страницу с просмотром только что созданного содержимого, и естественно, поскольку просматривать данный контент анонимный юзер не может, то ему пишут что ДАННОЙ СТРАНИЦЫ НЕ СУЩЕСТВУЕТ. Как сделать чтобы его переводило сразу на главную страницу, или куда-то еще? Разрешать просмотр этого содержимого для анонимусов я не хочу.

Комментарии

Аватар пользователя PanDa777 PanDa777 17 октября 2009 в 18:19

Ну а по поводу второго - можно дописать http://мой_сайт/node/add/ВОПРОС_СПЕЦИАЛИСТУ?destination=/node. Или что-то в этом духе.

Аватар пользователя Обухов Никита Обухов Никита 18 октября 2009 в 10:21

Вы можете использовать модуль Computed Field.

Его значение будет $field = arg(3);

Или без него, добавляете в ноду поле, делаете его hidden, а в default value пишите (после валидации) return array(0 => arg(3));

Аватар пользователя evilive evilive 18 октября 2009 в 23:57

Большое спасибо за советы!
Модуль prepoulate скорее всего именно то что я искал, но решение с функцией arg() мне показалось проще, по этому модуль не испробовал.
Решил задачу следующим кодом:

<?phpreturn array(
  0 => array('value' => arg(3))
);?>

Насчет второй проблемы, то не совсем понял что даст код: ?destination=/node

Аватар пользователя evilive evilive 19 октября 2009 в 1:15

Разобрался со второй проблемой.
Проблема была в том что у меня из таблицы USERS в базе данных пропал пользователь с UID = 0 т.е. аноним. Видимо это произошло когда я импортировал БД. После того как я добавил пользователя с этим UID сообщения с ошибкой больше не появлялось. Так что дело было даже не в правах доступа.
Еще раз спасибо всем за помощь.

Аватар пользователя PanDa777 PanDa777 1 ноября 2009 в 9:31

Может, уже неактуально, но при Submit любой формы с ?destination=url в адресной строке пересылает пользователя после отправки на url.