0

I need to add some text and a few extra order fields (and user profile fields, if possible) to the printable invoice that is accessed via a link like this: http://mysite.com/admin/store/orders/12345/invoice/print

I used grepWin to find all instances of the phrase "Purchasing Information:" (which is on the invoice), and that phrase was found in two files: uc-packing-slip.tpl.php and uc-order--customer.tpl.php. Unfortunately, changes to those files have no effect on the printable invoice (I tried placing the modified tpl files in my theme's templates/ folder as well as in their original location.

The only way I could get a "reaction" was to change the contents of the file uc_order-invoice-page.tpl.php. However, its contents are merely as follows:

<?php

/**
 * @file
 * Default theme implementation to display a printable Ubercart invoice.
 *
 * @see template_preprocess_uc_order_invoice_page()
 */
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>">

<head>
  <?php print $head; ?>
  <title><?php print $head_title; ?></title>
  <style type="text/css">
    .buttons {
      text-align: right;
      margin: 0 1em 1em 0;
    }
  </style>
  <style type="text/css" media="print">
    .buttons {
      display: none;
    }
  </style>
</head>
<body>
  <div class="buttons">
    <input type="button" value="<?php print t('Print invoice'); ?>" onclick="window.print();" />
  </div>

  <?php print $content; ?>
</body>
</html>

I tried adding some of the order fields to that file, replacing <?php print $content; ?>, but it did not work. I suppose if I can find out the source of the "content" that is being "printed", I would be in good shape. Can anyone help?

Thanks!

1

Try Ubercart Register Invoice, this will allow you to define new email templates for invoice emails ... these same templates should also be visible/useable by your sites Theme.

Registers invoice templates with Ubercart so they appear on and can be selected for the Ubercart "E-mail an order invoice" Rules action.

Registers invoice templates with Drupal so they can be used to theme the invoice data.

Provides extensive instructions and feedback on how to configure invoice templates.

See the README. You name your template: uc-order--*.tpl.php and it will be seen by the system. Also see the built-in help (prior and after creating a template) at http://mysite.com/admin/help#uc_register_invoice

| improve this answer | |
  • Tenken, this may be better asked in a new question, but can you tell me how I would print the contents of a User CCK field on the template? The field is "field_data_field_allergies" in the database, and I'd like to print its content on that invoice template. Thanks again! – hockey2112 Jun 12 '14 at 20:13
  • It looks like you need to create some custom module function(s) to add the field as a $variable[] entry visible to your custom template. There is documentation here ubercart.org/docs/developer/17385/… – tenken Jun 12 '14 at 20:18
  • I feel like I am almost there. I found this snippet elsewhere & modified it. It prints the allergy info, but it is the allergy info for the currently-logged-in user (me): <?php global $user; $user_fields = user_load($user->uid); $allergies = $user_fields->field_allergies['und']['0']['value']; print $allergies; ?> Anything in that code that I could change so that it will pull in the allergy info for the user associated with the order being viewed? – hockey2112 Jun 12 '14 at 21:36
  • This code worked (courtesy of longwave on the Drupal.org forums): <?php $user_fields = user_load($order->uid); $allergies = $user_fields->field_allergies['und']['0']['value']; print $allergies; ?> – hockey2112 Jun 17 '14 at 19:44

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.