Изменение значений полей CCK путем нажатия URL-адреса - возможно? Желательно?


Я пытаюсь выяснить, возможно ли/целесообразно создавать URL-адреса, которые отправляются в электронных письмах с уведомлениями пользователей, которые при нажатии выполняют такие действия, как изменение значения поля CCK.

Например, скажем, у вас есть система отслеживания проблем. В течение недели нет активности по одному вопросу, поэтому система отправляет электронное письмо человеку, опубликовавшему проблему, с вопросом, считают ли они проблему закрытой. И если да, пожалуйста, нажмите здесь, чтобы закрыть проблему.

Они нажимают на ссылку "закрыть проблему" в своем электронном письме, поле статуса CCK для проблемы изменяется на "закрыто", и они переходят на какую-либо произвольную страницу на сайте.

Возможно ли что-то подобное?

В Drupal 6?

Author: chriscaple, 2011-07-19

4 answers

Это возможно, но нецелесообразно. Стандарт Drupal для изменения данных с помощью URL-адресов: 1) Используйте переменные _GET (или простые пути URL) для _access_data 2) Используйте переменные _POST для изменения данных

Наряду с использованием _POST вы хотели бы использовать API форм Drupal, чтобы генерировать и проверять токены и поля.

Варианты, которые вы могли бы сделать, чтобы изменить данные с помощью URL (например, ссылки), заключаются в следующем: 1) Добавьте маркер в URL-адрес, чтобы подтвердить, что он используется только один раз (или необходима другая проверка) 2) Убедитесь, что пользователь вошел в систему (и, возможно, убедитесь, что он является владельцем этого билета и т.д.) Надеюсь, это поможет.

 1
Author: Chris, 2011-07-19 02:56:07

Вам нужно будет установить и настроить правила отправки электронной почты через 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, который создает модуль, создающий эти хэш-ссылки. Я верю, что он все еще в песочнице. Я попытаюсь разыскать его, чтобы узнать, где находится его проект.

 1
Author: iStryker, 2011-07-19 04:12:03

Я нашел модуль, который делает более или менее то, что я хочу -

Http://drupal.org/project/node_update_from_url

Он позволяет создавать URL-адреса, по которым пользователь может щелкнуть, чтобы обновить любое поле CCK, при условии, что у пользователя есть разрешение на редактирование собственного контента. Выводит пользователя на страницу подтверждения, где он должен нажать "обновить"... и тогда действие осуществляется.

Я просто проверяю это. Кажется, это работает. Вероятно, на данный момент это должно соответствовать моим требованиям. Но! - другие ответы довольно интересны, и я, вероятно, тоже их изучу.

 0
Author: chriscaple, 2011-07-19 15:21:32

Для Drupal 7 есть еще один модуль, который позволяет изменять значения из якорной ссылки. Он называется Ссылка на правила и он гораздо более популярен. Его связь с правилами позволяет делать больше - активировать любое правило, которое вы хотите.

 0
Author: Druvision, 2014-01-29 13:17:56