[РЕШЕНО]Ubercart. формирование договора при заказе.

Главные вкладки

Аватар пользователя sdm98 sdm98 26 июня 2016 в 15:20

Добрый.
нужно, чтобы при оформлении заказа еще ормировался договор в pdf, или каком-то другом формате,на основании введенных реквизитов покупателя. и затем на странице оформления заказа/cart/checkout/review можно было его скачать или распечатать.

подскажите как лучше сделать. не могу пока найти, где формируется эта страница.

Комментарии

Аватар пользователя mozh mozh 6 июля 2016 в 13:48

для формирования 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
$pdf 
_create_pdf($subject_2$html_template_2$language_order);
    
$attachments = array();
    
$attachments[] = array(
      
'filecontent' => $pdf,
      
'filename' => $subject_2.'.pdf',
      
'filemime' => 'application/pdf'
    
);

    

$dir 'private://orders/'.$order->uid.'/'.$order->order_number;
    if(
file_prepare_directory($dirFILE_CREATE_DIRECTORY))
      
$file file_save_data($pdf$dir.'/'.$subject_2 '.pdf');
    else
      
$file file_save_data($pdf,'private://'.$subject_2 '.pdf');

    

$file->display 1;
    
$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
    
);

    

//email for user
    
drupal_mail('mintroute_cat''mintroute'$emaillanguage_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 возможно что-то есть аналогичное

Аватар пользователя sdm98 sdm98 6 июля 2016 в 13:56

спасибо!
я пока что сделал на js c помощью pdfmake. по нажатию тупо считываю значения из полей формы, ругаюсь если не заполнена и формирую pdf-ку.
попробую ещё ваш вариант реализовать. мне он больше нравится своей друпалистостью и тем что если вдруг js у клиента отключен. с кирилицей вопросов не возникало?