X-Cart: shopping cart software

X-Cart forums (https://forum.x-cart.com/index.php)
-   Dev Questions (https://forum.x-cart.com/forumdisplay.php?f=20)
-   -   Printable Gift Certificates for Customer and Backend (https://forum.x-cart.com/showthread.php?t=11541)

sstillwell@aerostich.com 01-18-2005 09:58 AM

Printable Gift Certificates for Customer and Backend
Gift certificates sure do complicate things, at least for us.

This is my first posted mod so go easy. I'll post others soon.

This mod allows you to send each gift certificate recipient a custom graphic they can print and use instore or give to someone else. It also allows you to create a gift certificate using a custom graphic in the backoffice to print up and send. Example http://www.spydorweb.com/images/5F14BC86D0C0D640.jpg

This mod is not for the faint of heart and you have to make sure that your hosting server supports the functions used.

Backup up your database and xcart directories before making any alterations.

Need to have the GD library compiled with PHP.

How do you verify this?
Create a file called php.php in the root directory

<?php phpinfo(); ?>
Access this file in a browser and make sure that is says somewhere --with-gd
FreeType support must be enabled as well.

Ok Getting started

1. Create a basic graphic. Mine is 672pixels X 672pixels.
You can see it here http://www.spydorweb.com/images/giftcert.jpg
We'll call it giftcert.jpg. Oh it must be a jpg as well.

2. Copy the graphic to files/images/misc/giftcert.jpg

3. Grab this TrueTypeFont File here http://www.spydorweb.com/images/Vera.ttf
And throw that in files/images/misc/Vera.ttf as well.

4. add this to the bottom of include/func.php

# Create GC Image to include in the customer email
function func_create_gc($giftcert){
global $xcart_dir, $config, $xcart_http_host;
# Variables
$gc_exp_date = date("m/d/Y", strtotime("+1 year",$giftcert["add_date"]));
$image = ImageCreateFromJPEG($xcart_dir.'/files/images/misc/giftcert.jpg');
$white = imagecolorallocate($image, 255, 255, 255);
$black = imagecolorallocate($image, 0, 0, 0);
$ttf_location = $xcart_dir."/files/images/misc/Vera.ttf";

# Company info
$phone = $config["Company"]["company_phone"];
$url = $xcart_http_host;

ImageTTFText($image, 10, 0, 12, 22, $white, $ttf_location,$phone);
ImageTTFText($image, 10, 0, 522, 660, $white, $ttf_location,$url);
ImageTTFText($image, 18, 0, 190, 258, $black, $ttf_location,$giftcert["recipient"]);
ImageTTFText($image, 24, 0, 190, 440, $black, $ttf_location,"$".$giftcert["debit"]);
ImageTTFText($image, 18, 0, 190, 351, $black, $ttf_location,$giftcert["gcid"]);
ImageTTFText($image, 18, 0, 190, 585, $black, $ttf_location,$gc_exp_date);
ImageTTFText($image, 18, 0, 190, 301, $black, $ttf_location,$giftcert["purchaser"]);

You will need to edit this function more later I'll explain below.

5. add


to include/func.php (this starts around line 3238)
as follows

# This function sends GC emails (called from func_place_order
# and provider/order.php"
function func_send_gc($from_email, $giftcert, $from_login = '') {
      global $mail_smarty, $config, $to_customer, $sql_tbl;

      $giftcert["purchaser_email"] = $from_email;
      $mail_smarty->assign("giftcert", $giftcert);

This will create the image right before it's sent via email and store it in the templates_c directory as <giftcertificate id>.jpg (e.g. 5873F758D81A063C.jpg)

6. Now edit the skin1/mail/html/giftcert.tpl add the following somewhere in the mix


Backoffice side

7. add the file "admin/view_gc.php"

# Creates the GC image and then displays it on the screen

require "./auth.php";
require $xcart_dir."/include/security.php";

$giftcert = func_query_first("SELECT * from $sql_tbl[giftcerts] where gcid = '$gcid'");

        header("Location: ".$xcart_web_dir."/templates_c/".$giftcert["gcid"].".jpg");
        print "Could not create Gift Certificate Image";

8. edit skin1/admin/modules/Gift_Certificates/gc_admin.tpl (around line 38)



<TD>{$giftcerts[gc_num].gcid} / View</TD>

You can now log into the back office, go to Gift Certificates and there should be a "View" link next to each GC code. Clicking it will create that image and then display it.

9. Last part, you need to edit the position of the text for your custom image. This is done through trial/error. Look back again at the func_create_gc function we added to include/func.php.

There are several lines like such

ImageTTFText($image, 10, 0, 12, 22, $white, $ttf_location,$phone);
To move that particular object around the image you need to change the 3rd number (12) which is the horizontal position and the 4th number (22) which is the vertical position. Look here http://www.php.net/manual/en/function.imagettftext.php for more information about this particular php function.

Hey this works for me on v4.0.9.

Why didn't I just do an HTML image? A graphic will show the same on all plateforms/email clients and just looks professional.

CC 01-18-2005 01:21 PM

Cant fault you!
That is a quality mod!

Gd job =D>

Delw 12-23-2005 08:18 AM

This is a great MOD, My wife had been trying to get me to do this for weeks, last night I finally did it :wink:

My Daughter made the graphic not bad for a 15 year old. its amazing what kids can do. :oops:

I am using X-Cart version 4.0.14 and found a few things different than above.


8. edit skin1/admin/modules/Gift_Certificates/gc_admin.tpl

on my cart it is at skin1/modules/Gift_Certificates/gc_admin.tpl


2. Copy the graphic to files/images/misc/giftcert.jpg

files/images/misc dirs had to be created ( I didnt have the images or misc directories in my shopping cart ), I didnt know if they were in the version you used when you posted.

Not counting the graphic the whole mod took about 10 mins, then aligning the names and such took about 20 mins. Make sure you print them out because it looks a tad different on the paper than on the screen.

Putting the code in the email I still need to play with a little so my customers can find a easy way to print out the cert with out all the other information that comes in the email.

Again Awsum job


Alltribes 02-15-2006 10:47 AM

I just implimented this, but would like the message included too. After attempting to do this I can see why it was left out of the original mod.

The problem is if the message is too long it runs off the side of the image. I had considered using the str_replace() function to rewrite the perios to be periods followed by line breaks, but that would look ugly.

I suck at PHP, so if any PHP gurus out there read this, it would be a huge help if you could figure out how to format the message text into multiple lines.

Alltribes 02-15-2006 12:27 PM

Ok, I've got it!

Add this after #Company info

$message = wordwrap($giftcert["message"], 30, "\r \n");

Change the 30 to however many characters you want to wrap the text at.

And add this with the rest of the ImageTTFText statements


ImageTTFText($image, 10, 0, 190, 500, $black, $ttf_location,$message);

You'll need to mess with the layout a bit

scottWB 10-03-2007 04:27 PM

Re: Printable Gift Certificates for Customer and Backend
A way to allow the customer to print in 4.1.8 using the templates.

Edit giftcert.php and add:


#Added for GC Printing

elseif ($mode == 'print') {
        $giftcerts = false;

        if (!empty($gcids) && is_array($gcids)) {
                $tpl_cond = (!empty($tpl_file) ? " AND tpl_file='$tpl_file'" : '');
                $giftcerts = func_query("SELECT *, add_date+'".$config["Appearance"]["timezone_offset"]."' as add_date FROM $sql_tbl[giftcerts] WHERE send_via<>'E' AND gcid IN ('".implode("','", array_keys($gcids))."') ".$tpl_cond);

        if (empty($giftcerts) || !is_array($giftcerts)) {
                $top_message['type'] = 'W';
                $top_message['content'] = func_get_langvar_by_name("msg_adm_warn_gc_sel");

        foreach ($giftcerts as $k=>$v) {
                if ($config["General"]["use_counties"] == "Y")
                        $giftcerts[$k]["recipient_countyname"] = func_get_county($v["recipient_county"]);
                $giftcerts[$k]["recipient_statename"] = func_get_state($v["recipient_state"], $v["recipient_country"]);
                $giftcerts[$k]["recipient_countryname"] = func_get_country($v["recipient_country"]);


        header("Content-Type: text/html");
        header("Content-Disposition: inline; filename=giftcertificates.html");

        $_tmp_smarty_debug = $smarty->debugging;
        $smarty->debugging = false;

        if (!empty($tpl_file)) {
                $css_file = preg_replace('!\.tpl$!', '.css', $tpl_file);
                if ($css_file != $tpl_file) {
                        $smarty->assign('css_file', $css_file);;

        $smarty->debugging = $_tmp_smarty_debug;

# End added



elseif ($mode == "delgc") {
        # Remove GC from cart

Then in skin1/mail/html/order_data.tpl, add:


<!-- Added for Custom Print GC  -->
<br /><h3><a href="/giftcert.php?mode=print&tpl_file={$gc.tpl_file}&gcids[{$gc.gcid}]=on" target="_blank">Click here for printable gift certificate.</a></h3>
<!-- /Added  -->



{if $gc.send_via eq "P"}
{$lng.lbl_gc_send_via_postal_mail}<br />
{$lng.lbl_mail_address}: {$gc.recipient_firstname} {$gc.recipient_lastname}<br />
{$gc.recipient_address}, {$gc.recipient_city},<br />
{if $gc.recipient_countyname ne ''}{$gc.recipient_countyname} {/if}{$gc.recipient_state} {$gc.recipient_country}, {$gc.recipient_zipcode}<br />
{$lng.lbl_phone}: {$gc.recipient_phone}

It works.

bullfrog 02-26-2008 12:59 AM

Re: Printable Gift Certificates for Customer and Backend
I used scottWB's mod to print Gift Certificates in 4.1.9 and it worked nicely! But if you try it, here are a couple of pointers so your edit will go faster than mine.

First, in X-cart 4.1.9 find giftcert.php in the root directory. That wasn't clear to me from the posting above.

Second, I was able to print the customers Gift Certificate from the receipt at the end of checkout, but I could not print from the receipt that I display thru Admin/Orders. My fix was to hard code the URL in the order_data.tpl edit. I suspect my shared SSL to be the reason for not being able to print from Admin.

Like this worked for me:


<!-- Added for Custom Print GC -->
<br /><h3><a href="http://www.mysite.com/giftcert.php?mode=print&tpl_file={$gc.tpl_file}&gcids[{$gc.gcid}]=on" target="_blank">Click here for printable gift certificate.</a></h3>
<!-- /Added -->

collings26 02-26-2008 02:42 PM

Re: Printable Gift Certificates for Customer and Backend
Hello bullfrog,

I have the same version as you and im trying to work this out but failing miserabley. I cannot get ANYTHING to work. :lol:

Sorry to be a pain. Ive followed ScottWB steps and nothing


Brian Schade 10-20-2008 09:06 AM

Re: Printable Gift Certificates for Customer and Backend
ScottWB and/or Bullfrog - I'm a bit confused on how to implement this in 4.1.9. I was wondering if the original code modifications mentioned at the beginning of this thread (by sstillwell) still need to be added or can I just start at ScottWB's post?

bullfrog 10-30-2008 10:36 AM

Re: Printable Gift Certificates for Customer and Backend
Sorry for the delay in responding. I don't go to the forum as much as I used to.

From re-reading my 02-26-2008 post, I think I started at scottWB's mod and did not use anything from previous posts.

The code in my post is a change I made to scottWB's to get printing to work on my system. If you use my line of code within scottWB's mod, make sure you use your URL where the example shows http: //www.mysite.com.

I don't understand his mod, but I followed it and it worked for me. There is more than one file named giftcert.php. Make sure you are editing the one in the root directory. Use a simple text editor to make the edits.

Good luck.

All times are GMT -8. The time now is 03:28 AM.

Powered by vBulletin Version 3.5.4
Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.