Изменение значений полей CCK путем нажатия URL-адреса - возможно? Желательно?
Я пытаюсь выяснить, возможно ли/целесообразно создавать URL-адреса, которые отправляются в электронных письмах с уведомлениями пользователей, которые при нажатии выполняют такие действия, как изменение значения поля CCK.
Например, скажем, у вас есть система отслеживания проблем. В течение недели нет активности по одному вопросу, поэтому система отправляет электронное письмо человеку, опубликовавшему проблему, с вопросом, считают ли они проблему закрытой. И если да, пожалуйста, нажмите здесь, чтобы закрыть проблему.
Они нажимают на ссылку "закрыть проблему" в своем электронном письме, поле статуса CCK для проблемы изменяется на "закрыто", и они переходят на какую-либо произвольную страницу на сайте.
Возможно ли что-то подобное?
В Drupal 6?
4 answers
Это возможно, но нецелесообразно. Стандарт Drupal для изменения данных с помощью URL-адресов: 1) Используйте переменные _GET (или простые пути URL) для _access_data 2) Используйте переменные _POST для изменения данных
Наряду с использованием _POST вы хотели бы использовать API форм Drupal, чтобы генерировать и проверять токены и поля.
Варианты, которые вы могли бы сделать, чтобы изменить данные с помощью URL (например, ссылки), заключаются в следующем: 1) Добавьте маркер в URL-адрес, чтобы подтвердить, что он используется только один раз (или необходима другая проверка) 2) Убедитесь, что пользователь вошел в систему (и, возможно, убедитесь, что он является владельцем этого билета и т.д.) Надеюсь, это поможет.
Вам нужно будет установить и настроить правила отправки электронной почты через 1 неделю после бездействия.
Для ссылки меню создайте пользовательский модуль
/**
* Implements hook_menu()
*/
function MYMODULE_menu() {
$items['issue/close/%'] = array(
'page callback' => '_MYMODULE_close_issue',
'page arguement' => array(2),
'access callback' => TRUE,
);
}
function _MYMODULE_close_issue($nid = NULL) {
if ($nid) {
$node = node_load($nid);
$node['field_issue_closed'][0][value] = TRUE;
node_save($node);
}
}
Проблемы:
- Это дает доступ любому
- Нет контроля для входа пользователей в систему
- Нет проверки для массива(3). Пользователь может передать что угодно
Способ, которым вы действительно хотите это сделать, заключается в том, как Drupal сбрасывает пароль пользователя, отправляя пользователю по электронной почте хэшированную ссылку, которая подходит для одноразового входа. За исключением того, что у вас есть предопределенное действие по этой ссылке, которое заключается в закрытии проблемы.
Я знаю кое-кого из моего местного сообщества на собрании Drupal, который создает модуль, создающий эти хэш-ссылки. Я верю, что он все еще в песочнице. Я попытаюсь разыскать его, чтобы узнать, где находится его проект.
Я нашел модуль, который делает более или менее то, что я хочу -
Http://drupal.org/project/node_update_from_url
Он позволяет создавать URL-адреса, по которым пользователь может щелкнуть, чтобы обновить любое поле CCK, при условии, что у пользователя есть разрешение на редактирование собственного контента. Выводит пользователя на страницу подтверждения, где он должен нажать "обновить"... и тогда действие осуществляется.
Я просто проверяю это. Кажется, это работает. Вероятно, на данный момент это должно соответствовать моим требованиям. Но! - другие ответы довольно интересны, и я, вероятно, тоже их изучу.
Для Drupal 7 есть еще один модуль, который позволяет изменять значения из якорной ссылки. Он называется Ссылка на правила и он гораздо более популярен. Его связь с правилами позволяет делать больше - активировать любое правило, которое вы хотите.