Follow us on Twitter X-Cart on Facebook Wiki
Shopping cart software Solutions for online shops and malls
 

Free Gifts Module

 
Reply
   X-Cart forums > X-Cart 4 > Dev Questions
 
Thread Tools Search this Thread
  #1  
Old 04-05-2005, 12:13 PM
 
MonkeyClan MonkeyClan is offline
 

Member
  
Join Date: May 2004
Posts: 12
 

Default Free Gifts Module

I originally made this module for a Version 3.4.14 installation. It basically allows the store admin to define "Free Gifts" that are offered to the customer if they spend a certain amount. The Free Gifts should have a price of 0.00, be available for sale, and be in a category that can't be accessed via normal browsing of the site.

I also recently got it to work on a Version 4.0.12 installation and added a feature called Notification Price that tells the customer that if they spend $XX more they'll get a free gift. I'll post those differences and modifications in another post.



STEP 1
--------
Add a "Free Gifts" menu item (or whatever you want to call it) to the admin menu under "Inventory". We put it just under "Coupons".
In /skin1/provider/menu.tpl, add:
Code:
{if $active_modules.Discount_Coupons ne ""} Coupons {/if} Free Gifts


STEP 2
--------
Create the Free Gifts table in the database. We called it "xcart_freegifts" and it has the following structure:
Code:
CREATE TABLE `xcart_freegifts` ( `id` int(11) NOT NULL auto_increment, `productid` int(11) NOT NULL default '0', `minimum_price` decimal(12,2) NOT NULL default '0.00', `active` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM;


STEP 3
--------
Create a bunch of functions in func.php for handling the Free Gifts. Some of the function might be reduntant but I just made what I needed and didn't think too much about it.

Code:
function func_get_free_gifts($onlyActive = false) { $query = "SELECT id, productid, minimum_price, active FROM xcart_freegifts"; if ($onlyActive) { $query .= " WHERE active = 1"; } $query .= " ORDER BY minimum_price"; $freeGifts = func_query($query); if (!is_array($freeGifts)) { $freeGifts = array(); } return $freeGifts; } function func_free_gift_of_price_exists($minimum_price) { $query = "SELECT id FROM xcart_freegifts WHERE minimum_price = " . $minimum_price; $freegift = func_query_first($query); return count($freegift); } function func_free_gift_of_product_exists($productid) { $query = "SELECT id FROM xcart_freegifts WHERE productid = " . $productid; $freegift = func_query_first($query); return count($freegift); } function func_add_free_gift($productid, $minimum_price, $active) { $query = "INSERT INTO xcart_freegifts (productid, minimum_price, active) VALUES(" . $productid . ", " . $minimum_price . ", " . $active . ")"; db_query($query); return mysql_affected_rows(); } function func_update_free_gift_price($id, $minimum_price) { $query = "UPDATE xcart_freegifts SET minimum_price = " . $minimum_price . " WHERE id = " . $id; db_query($query); return mysql_affected_rows(); } function func_activate_free_gift($id) { $query = "UPDATE xcart_freegifts SET active = 1 WHERE id = " . $id; db_query($query); return mysql_affected_rows(); } function func_deactivate_free_gift($id) { $query = "UPDATE xcart_freegifts SET active = 0 WHERE id = " . $id; db_query($query); return mysql_affected_rows(); } function func_delete_free_gift($id) { $query = "DELETE FROM xcart_freegifts WHERE id = " . $id; db_query($query); return mysql_affected_rows(); } function func_product_exists_is_avail($productid) { $query = "SELECT * FROM xcart_products WHERE productid = " . $productid . " AND forsale = 'Y'"; return count(func_query_first($query)); } function func_get_product_name($productid) { $query = "SELECT product FROM xcart_products WHERE productid = " . $productid; $product = func_query_first($query); return $product["product"]; }


STEP 4
--------
Create provider/freegifts.php for handling all the admin modifications to the Free Gifts. Here's the code for that page:
Code:
<? require "../smarty.php"; require "../config.php"; require "./auth.php"; require "../include/security.php"; $actionMsg = ""; if ($mode == "add") { if (isset($_REQUEST["productid"]) && isset($_REQUEST["minimum_price"]) && ($_REQUEST["productid"] != "") && ($_REQUEST["minimum_price"] != "")) { if (func_product_exists_is_avail($_REQUEST["productid"])) { if (!func_free_gift_of_product_exists($_REQUEST["productid"])) { $minimumPrice = floatval($_REQUEST["minimum_price"]); if (!func_free_gift_of_price_exists($minimumPrice)) { if ($minimumPrice > 0) { $active = (isset($_REQUEST["active"]) && ($_REQUEST["active"] == "1")) ? "1" : "0"; func_add_free_gift($_REQUEST["productid"], $minimumPrice, $active); } else { $actionMsg = "The minimum price is invalid."; } } else { $actionMsg = "That minimum price has already been used."; } } else { $actionMsg = "That product has already been used."; } } else { $actionMsg = "Product does not exist or is not available for sale."; } } } else if ($mode == "delete") { if (isset($_REQUEST["id"]) && ($_REQUEST["id"] != "")) { func_delete_free_gift($_REQUEST["id"]); } } else if ($mode == "update") { if (isset($_REQUEST["id"]) && ($_REQUEST["id"] != "")) { if ($_REQUEST["minimum_price_" . $_REQUEST["id"]] != $_REQUEST["old_minimum_price_" . $_REQUEST["id"]]) { if (isset($_REQUEST["minimum_price_" . $_REQUEST["id"]]) && ($_REQUEST["minimum_price_" . $_REQUEST["id"]] != "")) { $minimumPrice = floatval($_REQUEST["minimum_price_" . $_REQUEST["id"]]); if (!func_free_gift_of_price_exists($minimumPrice)) { if ($minimumPrice > 0) { func_update_free_gift_price($_REQUEST["id"], $minimumPrice); } else { $actionMsg = "The minimum price is invalid."; } } else { $actionMsg = "That minimum price has already been used."; } } else { $actionMsg = "The minimum price is invalid."; } } if (isset($_REQUEST["active_" . $_REQUEST["id"]]) && ($_REQUEST["active_" . $_REQUEST["id"]] == "1")) { func_activate_free_gift($_REQUEST["id"]); } else { func_deactivate_free_gift($_REQUEST["id"]); } } } $freegifts = func_get_free_gifts(); $smarty->assign("freegifts",$freegifts); $smarty->assign("freegifts_actionmsg",$actionMsg); $smarty->assign("main","freegifts"); @include "../modules/gold_display.php"; $smarty->display("provider/home.tpl"); ?>


STEP 5
--------
Add the redirect call in skin1/single/home.tpl just below Coupons for consistency.
Code:
{elseif $main eq "coupons"} {include file="modules/Discount_Coupons/coupons.tpl"} {elseif $main eq "freegifts"} {include file="provider/main/freegifts.tpl"}


STEP 6
--------
Create skin1/provider/main/freegifts.tpl. The code is as follows:
Code:
{include file="location.tpl" last_location="Free Gifts"} This page allows you to define free gifts that will be offered to customers if they spend a minimum amount that you specify. The free gifts should have their price set to 0 and be available for sale but should not be accessible via normal browsing of the site. When a customer spends equal to or more than the minimum amount they will be notified of the promotion and will need to click on the link provided to add the item to their cart. If they remove items from their cart such that the cart total drops below the minimum price the item will be removed from their cart. {capture name=dialog} <table border="0"> {if $freegifts_actionmsg ne ""} <tr><td colspan=5 class=AdminTitle>{$freegifts_actionmsg}</td></tr> <tr><td colspan=5></td></tr> {/if} <form action="freegifts.php" method="POST"> <input type=hidden name="mode" value="add"> <input type=hidden name="id" value=""> <tr class=TableHead><TD>Active</TD><td>Product ID</td><td>Minimum Price</td><td></td></tr> {section name=whichFreeGift loop=$freegifts} <input type=hidden name="old_minimum_price_{$freegifts[whichFreeGift].id}" value="{$freegifts[whichFreeGift].minimum_price}"> <tr> <td align=center><input type=checkbox name="active_{$freegifts[whichFreeGift].id}" value=1{if $freegifts[whichFreeGift].active eq 1} checked{/if}></td> <td>{$freegifts[whichFreeGift].productid}</td> <td><input type=text name="minimum_price_{$freegifts[whichFreeGift].id}" size=10 value="{$freegifts[whichFreeGift].minimum_price}"></td> <td> <input type="button" value="Update" onClick="this.form.mode.value='update'; this.form.id.value='{$freegifts[whichFreeGift].id}'; this.form.submit();"> <input type="button" value="Delete" onClick="this.form.mode.value='delete'; this.form.id.value='{$freegifts[whichFreeGift].id}'; this.form.submit();"> </td> </tr> {/section} {if $smarty.section.whichFreeGift.total} <tr><td colspan=5></td></tr> {/if} <tr><td colspan=5 class=AdminTitle>Add a new Free Gift</td></tr> <tr> <td align=center><input type=checkbox name="active" value=1></td> <td><input type=text name=productid size=10 value=""></td> <td><input type=text name=minimum_price size=10 value="0.00"></td> <td><input type="submit" value="Add Free Gift"></td> </tr> </form> </table> {/capture} {include file="dialog.tpl" title="EDIT FREE GIFTS" content=$smarty.capture.dialog extra="width=100%"}


STEP 7
--------
Add the promotion text somewhere at the bottom of skin1/customer/main/cart_totals.tpl. The code below is just a generic version. Modify it to fit your site design.
Code:
{section name=ofg loop=$offerFreeGifts} {if $smarty.section.ofg.index eq 0} Congratulations! You qualify for a free promotion. To claim your free gift, please choose from: {/if} Your subtotal is ${$offerFreeGifts[ofg].minimum_price} or more. To receive a free {$offerFreeGifts[ofg].product}, click here {/section}


STEP 8
--------
Add the following code to customer/cart.php. Somewhere at the top, maybe after "$intershipper_recalc = 'Y'", put:
Code:
# # GET ACTIVE FREE GIFTS # $activeFreeGifts = func_get_free_gifts(true);

After the code that checks if the cart is empty and includes the Discount Coupons module if it's active, below "$smarty->assign('cart', $cart);", and above the Redirect code put the code below. Keep in mind that it's very important that this code be put in the right place otherwise your additions and removals from your cart won't work properly.
Code:
# # UPDATE CART BASED ON FREE GIFTS # $offerFreeGifts = array(); foreach ($activeFreeGifts as $freeGift) { $foundFreeGift = false; if ($freeGift["minimum_price"] > $cart["total_cost"]) { foreach ($cart["products"] as $checkFreeGiftProduct) { if ($checkFreeGiftProduct["productid"] == $freeGift["productid"]) { $foundFreeGift = true; } } if ($foundFreeGift) { // Remove free gift $tempProducts = array(); foreach ($cart["products"] as $checkProductForRemove) { if ($checkProductForRemove["productid"] != $freeGift["productid"]) { $tempProducts[] = $checkProductForRemove; } } $cart["products"] = $tempProducts; func_header_location("cart.php"); } } else { foreach ($cart["products"] as $checkFreeGiftProduct) { if ($checkFreeGiftProduct["productid"] == $freeGift["productid"]) { $foundFreeGift = true; } } if (!$foundFreeGift) { // Offer the free gift $offerFreeGifts[] = array( "minimum_price" => $freeGift["minimum_price"], "productid" => $freeGift["productid"], "product" => func_get_product_name($freeGift["productid"])); } } }

Lastly, send the two arrays to the smarty templating engine:
Code:
$smarty->assign("activeFreeGifts", $activeFreeGifts); $smarty->assign("offerFreeGifts", $offerFreeGifts);


STEP 9
--------
In skin1/customer/main/product.tpl you'll have to change the code that prints the price of the item. Our product.tpl is heavily modified so all I can say is that instead of showing a text input field when the price is 0.00 you should put text that says "FREE!" or something like that. For us, it looks something like this:
Code:
<td>{if $product.price ne 0}<font class=ProductDetailsTitle>{include file="currency.tpl" value=$product.price}</font>{else}<font class=ProductDetailsTitle>FREE!</font>{/if}</td>


STEP 10
----------
In skin1/customer/main/cart.tpl or skin1/customer/main/cart_contents.tpl (depending on your setup) you have to do something along these lines so that the quantity input field doesn't show up if it's a free gift:
Code:
{assign var="isFreeGift" value="0"} {section name=afg loop=$activeFreeGifts} {if $activeFreeGifts[afg].productid eq $products[product].productid} {assign var="isFreeGift" value="1"} {/if} {/section} {if $isFreeGift eq "1"} 1 {else} {if $products[product].distribution}1<input type=hidden{else}<input type=text size=3{/if} name="productindexes[{$smarty.section.product.index}]" value="{$products[product].amount}"> {/if}


Atul
Reply With Quote
  #2  
Old 04-05-2005, 12:14 PM
 
MonkeyClan MonkeyClan is offline
 

Member
  
Join Date: May 2004
Posts: 12
 

Default Changes for version 4.0.12

Here is the code for a Version 4.0.12 installation and the feature called Notification Price that tells the customer that if they spend $XX more they'll get a free gift. You'll need to refer to the previous posting to make sense of some of the steps.


STEP 1
--------
This step should be as follows:
Code:
{if $active_modules.Discount_Coupons ne ""} {$lng.lbl_coupons} {/if} Free Gifts


STEP 2
--------
The "xcart_freegifts" table now has the following structure:
Code:
REATE TABLE `xcart_freegifts` ( `id` int(11) NOT NULL auto_increment, `productid` int(11) NOT NULL default '0', `minimum_price` decimal(12,2) NOT NULL default '0.00', `notification_price` decimal(12,2) default NULL, `active` tinyint(1) NOT NULL default '0', PRIMARY KEY (`id`) ) TYPE=MyISAM;


STEP 3
--------
The following functions were either modified or added:
Code:
function func_get_free_gifts($onlyActive = false) { $query = "SELECT fg.id, fg.productid, p.product, fg.minimum_price, fg.notification_price, fg.active FROM xcart_freegifts fg LEFT JOIN xcart_products p ON fg.productid = p.productid"; if ($onlyActive) { $query .= " WHERE active = 1"; } $query .= " ORDER BY minimum_price"; $freeGifts = func_query($query); if (!is_array($freeGifts)) { $freeGifts = array(); } return $freeGifts; } function func_add_free_gift($productid, $minimum_price, $notification_price, $active) { $notificationPriceStr = ($notification_price) ? $notification_price : "NULL"; $query = "INSERT INTO xcart_freegifts (productid, minimum_price, notification_price, active) VALUES(" . $productid . ", " . $minimum_price . ", " . $notificationPriceStr . ", " . $active . ")"; db_query($query); return mysql_affected_rows(); } function func_update_free_gift_notification_price($id, $notification_price) { $notificationPriceStr = ($notification_price) ? $notification_price : "NULL"; $query = "UPDATE xcart_freegifts SET notification_price = " . $notificationPriceStr . " WHERE id = " . $id; db_query($query); return mysql_affected_rows(); }


STEP 4
--------
provider/freegifts.php is also different:
Code:
<? require "./auth.php"; require $xcart_dir."/include/security.php"; include $xcart_dir."/include/categories.php"; $actionMsg = ""; if ($mode == "add") { if (isset($fg_productid) && isset($fg_minimum_price) && ($fg_productid != "") && ($fg_minimum_price != "")) { if (func_product_exists_is_avail($fg_productid)) { if (!func_free_gift_of_product_exists($fg_productid)) { $minimumPrice = floatval($fg_minimum_price); $notificationPrice = ($fg_notification_price) ? floatval($fg_notification_price) : ""; if (!func_free_gift_of_price_exists($minimumPrice)) { if ($minimumPrice > 0) { if (($notificationPrice == "") || ($notificationPrice < $minimumPrice)) { $active = (isset($fg_active) && ($fg_active == "1")) ? "1" : "0"; func_add_free_gift($fg_productid, $minimumPrice, $notificationPrice, $active); } else { $actionMsg = "The notification price must be less than the minimum price."; } } else { $actionMsg = "The minimum price is invalid."; } } else { $actionMsg = "That minimum price has already been used."; } } else { $actionMsg = "That product has already been used."; } } else { $actionMsg = "Product does not exist or is not available for sale."; } } } else if ($mode == "delete") { if (isset($fg_id) && ($fg_id != "")) { func_delete_free_gift($fg_id); } } else if ($mode == "update") { if (isset($fg_id) && ($fg_id != "")) { $minimumPriceVar = "fg_minimum_price_" . $fg_id; $oldMinimumPriceVar = "fg_old_minimum_price_" . $fg_id; $notificationPriceVar = "fg_notification_price_" . $fg_id; $activeVar = "fg_active_" . $fg_id; if ($$minimumPriceVar != $$oldMinimumPriceVar) { if (isset($$minimumPriceVar) && ($$minimumPriceVar != "")) { $minimumPrice = floatval($$minimumPriceVar); if (!func_free_gift_of_price_exists($minimumPrice)) { if ($minimumPrice > 0) { func_update_free_gift_minimum_price($fg_id, $minimumPrice); } else { $actionMsg = "The minimum price is invalid."; } } else { $actionMsg = "That minimum price has already been used."; } } else { $actionMsg = "The minimum price is invalid."; } } if (isset($$notificationPriceVar)) { $notificationPrice = ($$notificationPriceVar) ? floatval($$notificationPriceVar) : ""; func_update_free_gift_notification_price($fg_id, $notificationPrice); } if (isset($$activeVar) && ($$activeVar == "1")) { func_activate_free_gift($fg_id); } else { func_deactivate_free_gift($fg_id); } } } $freegifts = func_get_free_gifts(); $smarty->assign("freegifts",$freegifts); $smarty->assign("freegifts_actionmsg",$actionMsg); $smarty->assign("main","freegifts"); @include $xcart_dir."/modules/gold_display.php"; func_display("provider/home.tpl",$smarty); ?>


STEP 5
--------
No changes to this step...


STEP 6
--------
skin1/provider/main/freegifts.tpl is also different:
Code:
{include file="location.tpl" last_location="Free Gifts"} This page allows you to define free gifts that will be offered to customers if they spend a minimum amount that you specify. The free gifts should have their price set to 0 and be available for sale but should not be accessible via normal browsing of the site. When a customer spends equal to or more than the minimum amount they will be notified of the promotion and will need to click on the link provided to add the item to their cart. If they remove items from their cart such that the cart total drops below the minimum price the item will be removed from their cart. {capture name=dialog} <table border="0"> {if $freegifts_actionmsg ne ""} <tr><td colspan=5 class=AdminTitle>{$freegifts_actionmsg}</td></tr> <tr><td colspan=5></td></tr> {/if} <form action="freegifts.php" method="POST"> <input type=hidden name="mode" value="add"> <input type=hidden name="fg_id" value=""> <tr class=TableHead><TD>Active</TD><td>Product ID</td><td>Minimum Price</td><td>Notification Price</td><td></td></tr> {section name=whichFreeGift loop=$freegifts} <input type=hidden name="fg_old_minimum_price_{$freegifts[whichFreeGift].id}" value="{$freegifts[whichFreeGift].minimum_price}"> <tr> <td align=center><input type=checkbox name="fg_active_{$freegifts[whichFreeGift].id}" value=1{if $freegifts[whichFreeGift].active eq 1} checked{/if}></td> <td>{$freegifts[whichFreeGift].productid} ({$freegifts[whichFreeGift].product})</td> <td><input type=text name="fg_minimum_price_{$freegifts[whichFreeGift].id}" size=10 value="{$freegifts[whichFreeGift].minimum_price}"></td> <td><input type=text name="fg_notification_price_{$freegifts[whichFreeGift].id}" size=10 value="{$freegifts[whichFreeGift].notification_price}"></td> <td> <input type="button" value="Update" onClick="this.form.mode.value='update'; this.form.fg_id.value='{$freegifts[whichFreeGift].id}'; this.form.submit();"> <input type="button" value="Delete" onClick="this.form.mode.value='delete'; this.form.fg_id.value='{$freegifts[whichFreeGift].id}'; this.form.submit();"> </td> </tr> {/section} {if $smarty.section.whichFreeGift.total} <tr><td colspan=5></td></tr> {/if} <tr><td colspan=5 class=AdminTitle>Add a new Free Gift</td></tr> <tr> <td align=center><input type=checkbox name="fg_active" value=1></td> <td><input type=text name=fg_productid size=10 value=""></td> <td><input type=text name=fg_minimum_price size=10 value="0.00"></td> <td><input type=text name=fg_notification_price size=10 value=""></td> <td><input type="submit" value="Add Free Gift"></td> </tr> </form> </table> {/capture} {include file="dialog.tpl" title="EDIT FREE GIFTS" content=$smarty.capture.dialog extra="width=100%"}


STEP 7
--------
skin1/customer/main/cart_totals.tpl is also different:
Code:
{section name=nfg loop=$notifyFreeGifts} {if $smarty.section.nfg.index eq 0} {/if} Spend ${$notifyFreeGifts[nfg].spend_more_amount} more and get a free {$notifyFreeGifts[nfg].product}! {/section} {section name=ofg loop=$offerFreeGifts} {if $smarty.section.ofg.index eq 0} Congratulations! You qualify for {if $smarty.section.ofg.total > 1}some{else}a{/if} free promotion{if $smarty.section.ofg.total > 1}s{/if}.{if $smarty.section.ofg.total > 1} To claim your free gifts, please choose from:{/if} {/if} Your subtotal is ${$offerFreeGifts[ofg].minimum_price} or more. To receive a free {$offerFreeGifts[ofg].product}, click here {/section}


STEP 8
--------
Instead of modifying customer/cart.php, you have to modify cart.php in the root directory of your store. The top section which gets the active free gifts stays the same, but the other sections are modified as follows:

Code:
# # UPDATE CART BASED ON FREE GIFTS # $offerFreeGifts = array(); $notifyFreeGifts = array(); foreach ($activeFreeGifts as $freeGift) { $foundFreeGift = false; if ($freeGift["minimum_price"] > $cart["total_cost"]) { if (isset($cart["products"]) && is_array($cart["products"])) { foreach ($cart["products"] as $checkFreeGiftProduct) { if ($checkFreeGiftProduct["productid"] == $freeGift["productid"]) { $foundFreeGift = true; } } } if ($foundFreeGift) { // Remove free gift $tempProducts = array(); foreach ($cart["products"] as $checkProductForRemove) { if ($checkProductForRemove["productid"] != $freeGift["productid"]) { $tempProducts[] = $checkProductForRemove; } } $cart["products"] = $tempProducts; func_header_location("cart.php"); } else if ($freeGift["notification_price"] && ($freeGift["notification_price"] <= $cart["total_cost"])) { // Notify of the free gift $notifyFreeGifts[] = array("notification_price" => $freeGift["notification_price"], "spend_more_amount" => sprintf("%0.2f", ($freeGift["minimum_price"] - $cart["total_cost"])), "productid" => $freeGift["productid"], "product" => func_get_product_name($freeGift["productid"])); } } else { foreach ($cart["products"] as $checkFreeGiftProduct) { if ($checkFreeGiftProduct["productid"] == $freeGift["productid"]) { $foundFreeGift = true; } } if (!$foundFreeGift) { // Offer the free gift $offerFreeGifts[] = array("minimum_price" => $freeGift["minimum_price"], "productid" => $freeGift["productid"], "product" => func_get_product_name($freeGift["productid"])); } } }

Code:
$smarty->assign("activeFreeGifts", $activeFreeGifts); $smarty->assign("offerFreeGifts", $offerFreeGifts); $smarty->assign("notifyFreeGifts", $notifyFreeGifts);


STEP 9
--------
I also noticed you have to modify skin1/customer/main/product.tpl so that the customer cannot select more than 1 free item at a time. So in addition to the other changes, do something like the following in the section where it prints the quantity select box:
Code:
{if $product.distribution eq ""} {if $product.taxed_price eq 0} <FONT class="ProductDetailsTitle">1</FONT><INPUT type="hidden" name="amount" value="1"> {else} {if $product.min_amount le 1} {assign var="start_quantity" value=1} {else} {assign var="start_quantity" value=$product.min_amount} {/if} <SCRIPT type="text/javascript" language="JavaScript 1.2"> var min_avail = {$start_quantity|default:1}; var avail = {$mq|default:1}-1; var product_avail = {$product.avail|default:"0"}; </SCRIPT> <SELECT id="product_avail" name="amount"{if $active_modules.Product_Options ne ''} onchange="check_wholesale(this.value);"{/if}> {section name=quantity loop=$mq start=$start_quantity} <OPTION value="{%quantity.index%}" {if $smarty.get.quantity eq %quantity.index%}selected{/if}>{%quantity.index%}</OPTION> {/section} </SELECT> {/if} {else} <FONT class="ProductDetailsTitle">1</FONT><INPUT type="hidden" name="amount" value="1"> {$lng.txt_product_downloadable} {/if}


STEP 10
---------
No changes to this step...


Atul
Reply With Quote
  #3  
Old 04-05-2005, 03:09 PM
  shan's Avatar 
shan shan is offline
 

X-Guru
  
Join Date: Sep 2002
Location: Birmingham, UK
Posts: 6,163
 

Default

great adition. do you have this live somewhere for a look ?
__________________
Looking for a reliable X-cart host ?
You wont go wrong with either of these.

EWD Hosting
Hands On Hosting
Reply With Quote
  #4  
Old 04-05-2005, 05:11 PM
 
balinor balinor is offline
 

Veteran
  
Join Date: Oct 2003
Location: Connecticut, USA
Posts: 30,253
 

Default

Yep, I was the guinea pig for this one You can see it here:

http://www.mundoproducts.com
__________________
Padraic Ryan
Ryan Design Studio
Professional E-Commerce Development
Reply With Quote
  #5  
Old 04-05-2005, 05:20 PM
  shan's Avatar 
shan shan is offline
 

X-Guru
  
Join Date: Sep 2002
Location: Birmingham, UK
Posts: 6,163
 

Default

love it, works a treat
__________________
Looking for a reliable X-cart host ?
You wont go wrong with either of these.

EWD Hosting
Hands On Hosting
Reply With Quote
  #6  
Old 04-05-2005, 05:22 PM
 
zardos zardos is offline
 

Senior Member
  
Join Date: Jun 2004
Location: UK England
Posts: 140
 

Default

Hi balinor

Nice site and the mod works well, just noticed this

Code:
To receive a free free sunset mundo t-shirt (100% organic cotton),

__________________
X-Cart V4.0.18
PHP 4.3.10
MySQL Server 4.0.22
Apache/1.3.33 (unix)
OS - Linux
Reply With Quote
  #7  
Old 04-05-2005, 05:22 PM
 
balinor balinor is offline
 

Veteran
  
Join Date: Oct 2003
Location: Connecticut, USA
Posts: 30,253
 

Default

Just have to make sure that if you are using the html catalog, you don't generate a nice static version of the hidden product for the SE's to spider

And yea, like I said, still testing
__________________
Padraic Ryan
Ryan Design Studio
Professional E-Commerce Development
Reply With Quote
  #8  
Old 04-05-2005, 08:04 PM
 
Grumpy Grumpy is offline
 

Member
  
Join Date: Jan 2005
Location: Australia
Posts: 26
 

Default Free Gifts

Can you tell me if this would work in that module.

Buy this item and get this item for $x.xx

Can the user choose the free gift i.e. if there is more than one?

Cheers
__________________
GerryB
Xcart 4.0.11
____________
Remember not to forget that which you do not need to know.
Reply With Quote
  #9  
Old 04-06-2005, 08:39 AM
 
MonkeyClan MonkeyClan is offline
 

Member
  
Join Date: May 2004
Posts: 12
 

Default

Quote:
Originally Posted by zardos
Hi balinor

Nice site and the mod works well, just noticed this

Code:
To receive a free free sunset mundo t-shirt (100% organic cotton),


Is this a bug in my code?

Atul
Reply With Quote
  #10  
Old 04-06-2005, 08:43 AM
 
balinor balinor is offline
 

Veteran
  
Join Date: Oct 2003
Location: Connecticut, USA
Posts: 30,253
 

Default

No, the product had 'free' in the title Changed that and it was fine.
__________________
Padraic Ryan
Ryan Design Studio
Professional E-Commerce Development
Reply With Quote
Reply
   X-Cart forums > X-Cart 4 > Dev Questions



Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Forum Jump


All times are GMT -8. The time now is 11:25 PM.

   

 
X-Cart forums © 2001-2020