Создание модуля "распаковать", который может взаимодействовать с контентом, созданным с помощью графического интерфейса пользователя и через node.create с помощью модуля was of Services (Drupal 7)
Я создаю веб-сайт, который позволит пользователям загружать проекты. Материалы для проекта будут состоять из нескольких текстовых полей, скриншота и zip-файла. Как только пользователь загрузит свой проект, мне нужно распаковать zip-файл и каталогизировать его содержимое. Кроме того, должна быть возможность загружать эти проекты через веб-интерфейс "Добавить новый контент" и через Node.create с помощью модуля сервисов.
Итак, мой первый вопрос: есть ли способ подключиться модуль, который будет запущен после создания типа контента? Я создал контент своего проекта, используя встроенные редакторы Drupal 7 CCK, но я не вижу способа подключить к этому какой-либо код, который мог бы распаковать мой файл, а затем сделать все, что еще нужно сделать.
Теперь, если вышесказанное невозможно с помощью CCK, означает ли это, что мне нужно воссоздать этот тип контента, сделав его своим собственным модулем?
Наконец, где было бы лучше всего разместить этот код распаковки? Я мог видеть, что это может быть чище сделать отдельный модуль для распаковки, но, может быть, проще поместить этот код непосредственно в модуль содержимого (если мне нужно его сделать)?
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...
}