Создание модуля "распаковать", который может взаимодействовать с контентом, созданным с помощью графического интерфейса пользователя и через node.create с помощью модуля was of Services (Drupal 7)


Я создаю веб-сайт, который позволит пользователям загружать проекты. Материалы для проекта будут состоять из нескольких текстовых полей, скриншота и zip-файла. Как только пользователь загрузит свой проект, мне нужно распаковать zip-файл и каталогизировать его содержимое. Кроме того, должна быть возможность загружать эти проекты через веб-интерфейс "Добавить новый контент" и через Node.create с помощью модуля сервисов.

Итак, мой первый вопрос: есть ли способ подключиться модуль, который будет запущен после создания типа контента? Я создал контент своего проекта, используя встроенные редакторы Drupal 7 CCK, но я не вижу способа подключить к этому какой-либо код, который мог бы распаковать мой файл, а затем сделать все, что еще нужно сделать.

Теперь, если вышесказанное невозможно с помощью CCK, означает ли это, что мне нужно воссоздать этот тип контента, сделав его своим собственным модулем?

Наконец, где было бы лучше всего разместить этот код распаковки? Я мог видеть, что это может быть чище сделать отдельный модуль для распаковки, но, может быть, проще поместить этот код непосредственно в модуль содержимого (если мне нужно его сделать)?

Author: Mike2012, 2012-02-08

1 answers

Я думаю, что лучшее место для вашего кода находится в пользовательском модуле, в hook_node_insert() и hook_node_update(); они запускаются при создании и обновлении узла соответственно. Поскольку модуль служб использует стандартную функциональность сохранения/отправки узлов, эти крючки будут срабатывать даже при использовании служб.

Было бы разумно сохранить ваш почтовый индекс ООН в том же модуле.

Это краткий пример, просто чтобы показать, что я имею в виду:

function MYMODULE_node_insert($node) {
  // Get the file ID from the node field
  $fid = $node->field_file[$node->language][0]['fid'];

  // Load the file
  $file = file_load($fid);

  // Pass the file path off to the unzip function
  $result = _my_unzip_function($file->uri);

  // Do the rest of your processing...
}
 1
Author: Clive, 2012-02-08 18:32:54