Добрый.
нужно, чтобы при оформлении заказа еще ормировался договор в pdf, или каком-то другом формате,на основании введенных реквизитов покупателя. и затем на странице оформления заказа/cart/checkout/review можно было его скачать или распечатать.
подскажите как лучше сделать. не могу пока найти, где формируется эта страница.
Комментарии
без hook не обойтись
а с hook как? куда копать? в php я слаб, но допилить по образцу получалось.
для формирования pdf использовал этот модуль https://www.drupal.org/project/pdf_using_mpdf
формировать pdf из текста так
<?phpfunction _create_pdf($name_file, $template, $lang = 'ar'){
if (pdf_using_mpdf_library_exist() == TRUE) {
$font_size = variable_get('pdf_using_mpdf_pdf_font_size');
$font_style = variable_get('pdf_using_mpdf_pdf_default_font');
// DEFAULT PDF margin Values.
$margin_top = variable_get('pdf_using_mpdf_margin_top', 16);
$margin_right = variable_get('pdf_using_mpdf_margin_right', 15);
$margin_bottom = variable_get('pdf_using_mpdf_margin_bottom', 16);
$margin_left = variable_get('pdf_using_mpdf_margin_left', 15);
$margin_header = variable_get('pdf_using_mpdf_margin_header', 9);
$margin_footer = variable_get('pdf_using_mpdf_margin_footer', 9);
// Creating Instance of mPDF Class Library.
$pdf = new mPDF(
$lang,
array(210, 297), //A4
$font_size,
$font_style,
$margin_left,
$margin_right,
$margin_top,
$margin_bottom,
$margin_header,
$margin_footer
);
$pdf->SetTitle($name_file);
$pdf->SetAuthor('Ar-pay');
$pdf->WriteHTML($template);
//$pdf->Output($name_file . '.pdf', 'D');
//exit();
//$path = $_SERVER['DOCUMENT_ROOT'].'/sites/default/files/pdf/'.$name_file.'.pdf';
$pdf_content = $pdf->Output('', 'S');
//TODO file_get contents if file not exist
//$pdf_content = file_get_contents($_SERVER['DOCUMENT_ROOT'] . '/sites/default/files/pdf/' . $name_file . '.pdf');
if(!empty($pdf_content)){
return $pdf_content;
}
return FALSE;
}else{
watchdog('mintroute_cat', 'mPDF library not exist');
return FALSE;
}
}?>
атрибут $template хранит текст pdfки
эту функцию вызываю так, она возвращает содержимое pdf, его я прикрепляю к emailу и сохраняю в private директорию. Поcле ещё файл pdf прикреляю к полю заказа (все делал для commerce)
<?php
$dir = 'private://orders/'.$order->uid.'/'.$order->order_number;
$file->display = 1;
//email for user
$pdf = _create_pdf($subject_2, $html_template_2, $language_order);
$attachments = array();
$attachments[] = array(
'filecontent' => $pdf,
'filename' => $subject_2.'.pdf',
'filemime' => 'application/pdf'
);
if(file_prepare_directory($dir, FILE_CREATE_DIRECTORY))
$file = file_save_data($pdf, $dir.'/'.$subject_2 . '.pdf');
else
$file = file_save_data($pdf,'private://'.$subject_2 . '.pdf');
$file->description = "";
$order->field_file_payment_request[LANGUAGE_NONE][] = (array)$file;
unset($file); $params = array(
'key' => 'mintroute',
'to' => $email,
'from' => $site_mail,
'subject' => $subject,
'body' => $message,
'attachments' => $attachments
);
drupal_mail('mintroute_cat', 'mintroute', $email, language_default(), $params, $site_mail);?>
для того что бы отправлять email с приложением нужно реализовать хук_mail так: (данный код просто добавьте если вам нужна отправка сообщений с pdfкой)
<?php/**
* Implements hook_mail().
*/
function MODULE_NAME_mail($key, &$message, $params) {
$message['subject'] = $params['subject'];
$message['body'][] = $params['body'];
// Add attachment when available.
if (isset($params['attachments'])) {
foreach($params['attachments'] as $attachment)
$message['params']['attachments'][] = $attachment;
}
}?>
весь процесс чекаута для commerce можно отследить в HOOK_commerce_order_presave($order), т.к. по мере заполнения чекаута заказ с номером уже существует и просто в него добавляется инфа с последующих шагов. Для Ubercart возможно что-то есть аналогичное
спасибо!
я пока что сделал на js c помощью pdfmake. по нажатию тупо считываю значения из полей формы, ругаюсь если не заполнена и формирую pdf-ку.
попробую ещё ваш вариант реализовать. мне он больше нравится своей друпалистостью и тем что если вдруг js у клиента отключен. с кирилицей вопросов не возникало?
Вы знаете на счет кириллицы не расскажу, но для арабского языка точно работает)