Как я могу отправить электронное письмо определенной роли, когда редактируется определенное поле cck (измененное значение) - PullRequest
0 голосов
/ 07 августа 2011

Поскольку название объясняет мой вопрос. Я хочу отправить электронное письмо пользователям, имеющим определенную роль, всякий раз, когда узел редактируется и значение определенного поля изменяется. Есть ли какие-нибудь модули, чтобы помочь мне?

Поскольку я новичок в разработке модулей drupal, я попытался написать свой собственный модуль, но как я могу получить старое значение поля перед редактированием, чтобы я мог сравнить и посмотреть, изменилось ли поле или нет?

Я также хочу предоставить простой способ изменить значение этого поля, не переходя на страницу редактирования. Так как я изменяю значение этого поля, это делают многие другие неопытные пользователи. Я собирался использовать модуль флага для реализации этой функции, но это поле имеет три состояния, а не два. Поэтому я не могу использовать флаговый модуль.

Заранее спасибо

Ответы [ 2 ]

1 голос
/ 07 августа 2011

Какая версия Drupal?

В Drupal 6 вы можете присоединиться к изменениям на узлах, используя hook_nodeapi и использовать необязательные параметры node_load для сравнения полей в старом узле и новом узле.

т.е.

<?php
/**
 * Implementation of hook_nodeapi().
 */
// fires mymodule_send_email() when the field 'specialfield' on nodes
// of type 'specialnodetype' is updated
function mymodule_nodeapi($node, $op, $a3, $a4) {
  if ($node->type == 'specialnodetype' && $op == 'update') {

    // $node stores the "old node" and $new_node stores the "new node"
    // we're about to save
    $new_node = node_load($node->nid,null,true);

    // if a particular field doesn't match, fire a particular action
    if ($node->field_specialfield[0]['value'] !=
        $new_node->field_specialfield[0]['value']) {
      mymodule_send_email();
    }

  }
}
?>

Вы можете использовать аналогичную реализацию hook_nodeapi для автоматического обновления поля без необходимости повторного вызова node_save .

Обратите внимание, что содержимое, хранящееся в поле CCK, не всегда извлекается как «значение», поскольку поля CCK бывают разных видов и могут состоять из нескольких частей. Вы всегда можете просмотреть детали, используя print_r, который будет всегда получаться / присваиваться следующим образом:

<?php
// Displays an associative array with keys and values of the first instance
// of the CCK field 'fieldname'
print_r($node->field_fieldname[0]);

// Displays an associative array with keys and values of the third instance
// of the CCK field 'fieldname'
print_r($node->field_fieldname[2]);
?>

(Второй пример для поля, которое принимает несколько значений в узле.)

Не стесняйтесь ответить с более подробной информацией, если это необходимо.

0 голосов
/ 08 августа 2011

Нестандартным модулем будет использование модуля Rules , который позволяет отправлять электронные письма пользователям определенной роли при изменении значения CCK.Он написан для выполнения задач, которые вы описываете (и в значительной степени для любых других задач, основанных на триггере событий).

Если вы ищете решение конкретной проблемы, Правила должны делать именно то, что вам нужно.Если это личный проект и вы хотите углубиться в код, то написание пользовательского модуля поможет вам понять, как работает Drupal.

...