Правила Drupal 7: как отправить по электронной почте URL-адрес загруженного вложения (после изменения узла)?

У меня есть сайт Drupal 7 с настраиваемым типом узла с настраиваемым полем вложения. После того, как (что-то вроде этого пользовательского) узла был опубликован, я получил электронное письмо с помощью модуля правил. Я хотел бы установить другое правило, которое отправляет мне другое электронное письмо, когда кто-то редактирует этот узел и загружает вложение. Внутри почты я хочу видеть полный URL-адрес загруженного файла.

После нескольких тестов я не могу вставить полный путь к загруженному файлу. [node:field-attachment:file] вообще не работает. Я могу вставить (вручную) URL-адрес, где находится этот файл, но после этого я не могу вставить имя файла (так что даже имени файла мне было бы достаточно).

Итак, с [node:field-attachment:file] я получил ошибку: * Неустранимая ошибка: вызов функции-члена value() для не-объекта в /home/xxx/sites/all /modules/entity/entity_token.tokens.inc в строке 297.*

Что именно это:

/**
 * Gets the token replacement by correctly obeying the options.
 */
function _entity_token_get_token($wrapper, $options) {

   if ($wrapper->value() === NULL) {
// Do not provide a replacement if there is no value.
return NULL;
}

С [node:field-attachment] я получаю электронное письмо, но оно содержит следующее: Вы можете загрузить файл отсюда: Свойство 0

Какой токен следует использовать для получения URL-адреса (или имени файла) фактически загруженного файла при редактировании узла?


person Pene    schedule 08.11.2012    source источник
comment
После пары часов тестирования я должен признать, что эту проблему нельзя решить с помощью токенов ([node:field-attachment:file:x:name] тоже не помогает). Однако php всегда делает это, как вы можете увидеть встроенный в Drupal метод db_select в разделе: <?php $query = db_select('file_managed', 'fm'); $query->fields('fm', array('filename')) ->orderBy('fid', 'DESC') ->range(0,1); $result = $query->execute()->fetchField(); echo $result; ?> Я знаю, что это не лучший способ, но этого достаточно для небольших сайтов, и может помочь кому-нибудь когда-нибудь получить ссылку на последнюю загруженную файл.   -  person Pene    schedule 09.11.2012


Ответы (1)


2 решения

1. Вы можете написать простой модуль, который перехватывает отправку узла и обрабатывает URL-адрес там, а затем отправляет его по почте.

2 - Вы можете создать действие в модуле правил для выполнения пользовательского кода PHP. Там вы получите всю информацию об узле в $node. Вы также можете отправлять и отправлять электронные письма, используя drupal mail API

person mantish    schedule 14.12.2012