Добрый день.
Народ, помогите разобраться с hook_node_presave.
Гуглил но толком не понял как им пользоваться. Разобрался что он выполняется перед сохранением ноды, что мне и нужно)
Задача выполнить код перед сохранением:
require_once 'PHPWord/PHPWord.php';
$PHPWord = new PHPWord();
$document = $PHPWord->loadTemplate('Template.docx');
$document->setValue('Value1', $node->field_lastname_ua['und'][0]['value']);
$document->setValue('weekday', date('l'));
$document->setValue('time', date('H:i'));
$document->save('dogovor.docx');
Все файлы находятся в папке /modules/node
Заранее благодарен!
Комментарии
а что не получается?)
код не сработал. На выходе должен получить файл dogovor.docx
по сути мне просто нужно в ставить в тело hook_node_presave свой код и он перед сохранением любой ноды будет выполнятся, так?
hook_node_insert вызовется сразу же после добавления новой ноды (после записи ее в бд) , а hook_node_presave вызовется и при редактировании ноды - у вас создастся еще один файл , а точнее пересохранится старый с новыми данными - я бы формировал имя создаваемого файла динамически
а вот это неправильно , файлы храните в папке со своим модулем или же в каталоге files и пути правильные пропишите
и по идее должно быть Template.dotx ?
мне нужно создавать файлы как при создании так и при обновлении ноды. файлы изночально хранились в папке files, когда я использовал rules.
путь должен быть относительно файла node.api.php?
require_once '../sites/default/files/PHPWord/PHPWord.php';
прошу прощения за глупые вопросы, просто уже второй день и голова не варит. сам себе не доверяю))
вы когда нибудь писали модули под друпал?
нет. это мой первый опыт работы над хуками и модулями.
во-первых, оформите это в виде своего модуля, а не вносите изменения в ядро
во-вторых, вам нужно понять на каком этапе происходит ошибка и не создается документ.
Решил пока сделать с помощью рулс. Подскажите где почитать про создание модулей и работу с хуками пожалуйста. Нашел много всего но пока не разобрался.
Спасибо за внимание.
https://drupal.org/project/examples
погуглите. прямо так и забивайте в гугл "создание простого модуля для друпал 7" (например, http://cms-cmf-framework.blogspot.com/2012/06/drupal-7-sozdanie-prostogo...)
у вас модуль будет содержать два файла: один ваш_модуль.info, ваш_модуль.module
в файл ваш_модуль.module добавляете нужные хуки. например, hook_node_insert - в вашем случае будет выглядеть как ваш_модуль_node_insert
Доброго времени суток!)
С предыдущей проблемой справился, теперь снова прошу прошу помощи)
function word_node_update($node) {
$file = '/home/ho4uappc/public_html/sites/default/files/templates/dogovor.docx';
if (file_exists($file)) {
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Content-Transfer-Encoding: binary');
header('Expires: 0');
header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
ob_clean();
flush();
readfile($file);
exit;
}
}
Мне нужно после сохранения скачать файл. Файл качается но нода не сохраняется, а остается висеть форма редактирования.
Вот и не сохраняется-)
А не логичнее на странице просмотра материала разместить кнопку "Скачать документ"?
Еще логичнее добавить к материалу поле "файл" и при сохранении материала генерировать файл и "привязывать" к данному полю.