Jump to content

How to remove save button for customized fields?


otzy

Recommended Posts

Working on 1.4.9.0! (without Ajax Cart)

 

It is working for 1.4.9.0 without the Ajax cart. I have created two product.tpl files that work. One is for the old stock Prestashop theme. The other is for the new Prestashop 1.5 compatible theme available for download at this link: http://addons.presta...emplate-15.html

 

The product.tpl files move the text boxes up from the bottom and eliminate the "Save" button when used with the CartController override.

 

The override/controller/CartController.php file I used was the one that Ben23 created in post #95 above.

 

Rename the files attached in the zip file to product.tpl and use the one applicable for the stock theme you use. They are named for the "old" and "new" Prestashop themes. Remember to open the blockcart module in the BO and use configure to turn off the ajax cart.

 

All that is needed now is for someone to help debug the ajax-cart.js file so the Ajax cart can be enabled again. For Ajax debug, the old theme uses the blockcart module. If you install the new Prestashop theme there is a module called blockcart2.

product.tpl.zip

Edited by Rhapsody (see edit history)
Link to comment
Share on other sites

  • 2 weeks later...

Working on 1.4.9.0! (without Ajax Cart)

 

It is working for 1.4.9.0 without the Ajax cart. I have created two product.tpl files that work. One is for the old stock Prestashop theme. The other is for the new Prestashop 1.5 compatible theme available for download at this link: http://addons.presta...emplate-15.html

 

The product.tpl files move the text boxes up from the bottom and eliminate the "Save" button when used with the CartController override.

 

The override/controller/CartController.php file I used was the one that Ben23 created in post #95 above.

 

Rename the files attached in the zip file to product.tpl and use the one applicable for the stock theme you use. They are named for the "old" and "new" Prestashop themes. Remember to open the blockcart module in the BO and use configure to turn off the ajax cart.

 

All that is needed now is for someone to help debug the ajax-cart.js file so the Ajax cart can be enabled again. For Ajax debug, the old theme uses the blockcart module. If you install the new Prestashop theme there is a module called blockcart2.

 

I copied your code from "<!-- Customizable products -->

{if $product->customizable}" to "</form>

 

{* Rhapsody moved custo..."

 

I also use Ben23's cartcontroller. But my store keeps saying that I need to save the customization. It doesnt add to cart...

 

why?

Link to comment
Share on other sites

I copied your code from "<!-- Customizable products -->

{if $product->customizable}" to "</form>

 

{* Rhapsody moved custo..."

 

I also use Ben23's cartcontroller. But my store keeps saying that I need to save the customization. It doesnt add to cart...

 

why?

1. What version of ps are you using?

2. What Theme are you using?

3. What directory did you copy Ben23's CartController.php file to?

4. Did you turn off the Ajax cart in the blockcart module?

5. Did you set in the BO performance section Force Compile to Yes and Cache to No in order to recompile your modified template?

Link to comment
Share on other sites

1. What version of ps are you using?

2. What Theme are you using?

3. What directory did you copy Ben23's CartController.php file to?

4. Did you turn off the Ajax cart in the blockcart module?

5. Did you set in the BO performance section Force Compile to Yes and Cache to No in order to recompile your modified template?

 

1. 1.4.9

2. A Theme from template monster.

3. /override/controllers

4. Yes I did

5. Yes, I see the update. And the save button is gone, but it dont work..

 

The weird thing is that the popup that says "please fill in required fields and save customization" is gone. I'm now being transfered to cart.php, and there I get a warning saying I must fill the mandatory fields and press save beforde adding to cart. I then press back and fill in the two textfields, press save, then i can add to cart.

 

--EDIT--

 

Now I dont have the textfields mandatory. But I still need to press save to add the texts to the product.

 

Do I need to modify ajax-cart.js ? as mentioned in this thread before

Edited by adameriksson (see edit history)
Link to comment
Share on other sites

.....

The weird thing is that the popup that says "please fill in required fields and save customization" is gone. I'm now being transfered to cart.php, and there I get a warning saying I must fill the mandatory fields and press save before adding to cart. I then press back and fill in the two textfields, press save, then i can add to cart.

The problem may be the theme from Template Monster. Is it based on the old or new PS theme?

Try the stock PS theme with the mod and see if it works. If so, the problem is with your theme.

If not, more troubleshooting to do.

 

I think it is related to your theme, because when you press back you mention seeing the save button. I believe the save button should be gone completely with the modified tpl file

 

Edit: Post your modified product.tpl file and I will try it on one of my installations.

Edited by Rhapsody (see edit history)
Link to comment
Share on other sites

The problem may be the theme from Template Monster. Is it based on the old or new PS theme?

Try the stock PS theme with the mod and see if it works. If so, the problem is with your theme.

If not, more troubleshooting to do.

 

I think it is related to your theme, because when you press back you mention seeing the save button. I believe the save button should be gone completely with the modified tpl file

 

Edit: Post your modified product.tpl file and I will try it on one of my installations.

 

Sorry, of course I dont see the save button. It was with my own code, sorry. I have your product.tpl code now (only the "Customizable products" part).

 

I paste the whole product.tpl code here

{include file="$tpl_dir./errors.tpl"}
{if $errors|@count == 0}
<script type="text/javascript">
// <![CDATA[
// PrestaShop internal settings
var currencySign = '{$currencySign|html_entity_decode:2:"UTF-8"}';
var currencyRate = '{$currencyRate|floatval}';
var currencyFormat = '{$currencyFormat|intval}';
var currencyBlank = '{$currencyBlank|intval}';
var taxRate = {$tax_rate|floatval};
var jqZoomEnabled = {if $jqZoomEnabled}true{else}false{/if};
//JS Hook
var oosHookJsCodeFunctions = new Array();
// Parameters
var id_product = '{$product->id|intval}';
var productHasAttributes = {if isset($groups)}true{else}false{/if};
var quantitiesDisplayAllowed = {if $display_qties == 1}true{else}false{/if};
var quantityAvailable = {if $display_qties == 1 && $product->quantity}{$product->quantity}{else}0{/if};
var allowBuyWhenOutOfStock = {if $allow_oosp == 1}true{else}false{/if};
var availableNowValue = '{$product->available_now|escape:'quotes':'UTF-8'}';
var availableLaterValue = '{$product->available_later|escape:'quotes':'UTF-8'}';
var productPriceTaxExcluded = {$product->getPriceWithoutReduct(true)|default:'null'} - {$product->ecotax};
var reduction_percent = {if $product->specificPrice AND $product->specificPrice.reduction AND $product->specificPrice.reduction_type == 'percentage'}{$product->specificPrice.reduction*100}{else}0{/if};
var reduction_price = {if $product->specificPrice AND $product->specificPrice.reduction AND $product->specificPrice.reduction_type == 'amount'}{$product->specificPrice.reduction}{else}0{/if};
var specific_price = {if $product->specificPrice AND $product->specificPrice.price}{$product->specificPrice.price}{else}0{/if};
var specific_currency = {if $product->specificPrice AND $product->specificPrice.id_currency}true{else}false{/if};
var group_reduction = '{$group_reduction}';
var default_eco_tax = {$product->ecotax};
var ecotaxTax_rate = {$ecotaxTax_rate};
var currentDate = '{$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}';
var maxQuantityToAllowDisplayOfLastQuantityMessage = {$last_qties};
var noTaxForThisProduct = {if $no_tax == 1}true{else}false{/if};
var displayPrice = {$priceDisplay};
var productReference = '{$product->reference|escape:'htmlall':'UTF-8'}';
var productAvailableForOrder = {if (isset($restricted_country_mode) AND $restricted_country_mode) OR $PS_CATALOG_MODE}'0'{else}'{$product->available_for_order}'{/if};
var productShowPrice = '{if !$PS_CATALOG_MODE}{$product->show_price}{else}0{/if}';
var productUnitPriceRatio = '{$product->unit_price_ratio}';
var idDefaultImage = {if isset($cover.id_image_only)}{$cover.id_image_only}{else}0{/if};
{*
var ipa_default = {if isset($ipa_default)}{$ipa_default}{/if};
*}
// Customizable field
var img_ps_dir = '{$img_ps_dir}';
var customizationFields = new Array();
{assign var='imgIndex' value=0}
{assign var='textFieldIndex' value=0}
{foreach from=$customizationFields item='field' name='customizationFields'}
{assign var="key" value="pictures_`$product->id`_`$field.id_customization_field`"}
customizationFields[{$smarty.foreach.customizationFields.index|intval}] = new Array();
customizationFields[{$smarty.foreach.customizationFields.index|intval}][0] = '{if $field.type|intval == 0}img{$imgIndex++}{else}textField{$textFieldIndex++}{/if}';
customizationFields[{$smarty.foreach.customizationFields.index|intval}][1] = {if $field.type|intval == 0 && isset($pictures.$key) && $pictures.$key}2{else}{$field.required|intval}{/if};
{/foreach}
// Images
var img_prod_dir = '{$img_prod_dir}';
var combinationImages = new Array();
{if isset($combinationImages)}
{foreach from=$combinationImages item='combination' key='combinationId' name='f_combinationImages'}
 combinationImages[{$combinationId}] = new Array();
 {foreach from=$combination item='image' name='f_combinationImage'}
  combinationImages[{$combinationId}][{$smarty.foreach.f_combinationImage.index}] = {$image.id_image|intval};
 {/foreach}
{/foreach}
{/if}
combinationImages[0] = new Array();
{if isset($images)}
{foreach from=$images item='image' name='f_defaultImages'}
 combinationImages[0][{$smarty.foreach.f_defaultImages.index}] = {$image.id_image};
{/foreach}
{/if}
// Translations
var doesntExist = '{l s='The product does not exist in this model. Please choose another.' js=1}';
var doesntExistNoMore = '{l s='This product is no longer in stock' js=1}';
var doesntExistNoMoreBut = '{l s='with those attributes but is available with others' js=1}';
var uploading_in_progress = '{l s='Uploading in progress, please wait...' js=1}';
var fieldRequired = '{l s='Please fill in all required fields, then save the customization.' js=1}';
{if isset($groups)}
// Combinations
{foreach from=$combinations key=idCombination item=combination}
 addCombination({$idCombination|intval}, new Array({$combination.list}), {$combination.quantity}, {$combination.price}, {$combination.ecotax}, {$combination.id_image}, '{$combination.reference|addslashes}', {$combination.unit_impact}, {$combination.minimal_quantity});
{/foreach}
// Colors
{if $colors|@count > 0}
 {if $product->id_color_default}var id_color_default = {$product->id_color_default|intval};{/if}
{/if}
{/if}
//]]>
</script>
{include file="$tpl_dir./breadcrumb.tpl"}
{if isset($confirmation) && $confirmation}
<p class="confirmation">
{$confirmation}
</p>
{/if}
<div id="primary_block" class="clearfix">
{if isset($adminActionDisplay) && $adminActionDisplay}
<div id="admin-action">
 <p>{l s='This product is not visible to your customers.'}
 <input type="hidden" id="admin-action-product-id" value="{$product->id}" />
 <input type="submit" value="{l s='Publish'}" class="exclusive" onclick="submitPublishProduct('{$base_dir}{$smarty.get.ad}', 0)"/>
 <input type="submit" value="{l s='Back'}" class="exclusive" onclick="submitPublishProduct('{$base_dir}{$smarty.get.ad}', 1)"/>
 </p>
 <div class="clear" ></div>
 <p id="admin-action-result"></p>
 </p>
</div>
{/if}
{* left column *}
<div id="pb-right-column">
{* product img *}
 <div id="image-block" class="bordercolor">
  {if $have_image}
  <img src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large')}"
{if $jqZoomEnabled}class="jqzoom" alt="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'thickbox')}"{else} title="{$product->name|escape:'htmlall':'UTF-8'}" alt="{$product->name|escape:'htmlall':'UTF-8'}" {/if} id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}" />
  {else}
  <img src="{$img_prod_dir}{$lang_iso}-default-large.jpg" id="bigpic" alt="" title="{$cover.legend|escape:'htmlall':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}" />
  {/if}
 </div>
 {if isset($images) && count($images) > 0}
{* thumbnails *}
 <div id="views_block" {if isset($images) && count($images) < 2}class="hidden"{/if}>
 {if isset($images) && count($images) > 3}<a id="view_scroll_left" class="hidden" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Previous'}</a>{/if}
 <div id="thumbs_list">
  <ul id="thumbs_list_frame">
{if isset($images)}
 {foreach from=$images item=image name=thumbnails}
 {assign var=imageIds value="`$product->id`-`$image.id_image`"}
 <li id="thumbnail_{$image.id_image}" class="{if $smarty.foreach.thumbnails.last}thumb_last{/if}">
  <a href="{$link->getImageLink($product->link_rewrite, $imageIds, 'thickbox')}" rel="other-views" class="thickbox bordercolor {if (isset($image.cover) AND $image.cover == 1) OR (!isset($image.cover) AND $smarty.foreach.thumbnails.first)}shown{/if}" title="{$image.legend|htmlspecialchars}">
   <img id="thumb_{$image.id_image}" src="{$link->getImageLink($product->link_rewrite, $imageIds, 'medium')}" alt="{$image.legend|htmlspecialchars}" height="{$mediumSize.height}" width="{$mediumSize.width}" />
  </a>
 </li>
 {/foreach}
{/if}
  </ul>
 </div>
 {if isset($images) && count($images) > 3}<a id="view_scroll_right" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Next'}</a>{/if}
 </div>
 {/if}
 {if isset($images) && count($images) > 1}<span id="wrapResetImages" style="display:none;"><div><a id="resetImages" href="{$link->getProductLink($product)}" onclick="$('span#wrapResetImages').hide('slow');return (false);">{l s='Display all pictures'}</a></div></span>{/if}
{* usefull links *}
 <ul id="usefull_link_block" class="bordercolor">
  {if $HOOK_EXTRA_LEFT}{$HOOK_EXTRA_LEFT}{/if}
  <li class="print"><a href="javascript:print();">{l s='Print'}</a></li>
  {if $have_image && !$jqZoomEnabled}
  <li class="view-size"><span id="view_full_size" class="span_link">{l s='View full size'}</span></li>
  {/if}
 </ul>
{* social icons *}
	<div class="share bordercolor"><!-- AddThis Button BEGIN -->
  <div class="addthis_toolbox addthis_default_style ">
<a class="addthis_button_facebook_like" fb:like:layout="button_count"></a>
<a class="addthis_button_tweet"></a>
<a class="addthis_button_google_plusone" g:plusone:size="medium"></a>
<a class="addthis_counter addthis_pill_style"></a>
  </div>
  <script type="text/javascript" src="http://s7.addthis.com/js/250/addthis_widget.js#pubid=ra-4f419f410efe76d3"></script>
 </div>
</div>
{* right column *}
<div id="pb-left-column">
 <h1>{$product->name|escape:'htmlall':'UTF-8'}</h1>
 {if ($product->show_price AND !isset($restricted_country_mode)) OR isset($groups) OR $product->reference OR (isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS)}
 <form id="buy_block" class="bordercolor" {if $PS_CATALOG_MODE AND !isset($groups) AND $product->quantity > 0}class="hidden"{/if} action="{$link->getPageLink('cart.php')}" method="post">
{* hidden datas *}
  <p class="hidden">
<input type="hidden" name="token" value="{$static_token}" />
<input type="hidden" name="id_product" value="{$product->id|intval}" id="product_page_product_id" />
<input type="hidden" name="add" value="1" />
<input type="hidden" name="id_product_attribute" id="idCombination" value="" />
  </p>
  {if $product->show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
<div class="price bordercolor">
 {if !$priceDisplay || $priceDisplay == 2}{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, 2)}{assign var='productPriceWithoutRedution' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}{elseif $priceDisplay == 1}{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, 2)}{assign var='productPriceWithoutRedution' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}{/if}
{* price *}
 <span class="our_price_display">
  {if $priceDisplay >= 0 && $priceDisplay <= 2}
  <span id="our_price_display" class="price">{convertPrice price=$productPrice}</span>
  {if $tax_enabled && ((isset($display_tax_label) && $display_tax_label == 1) OR !isset($display_tax_label))}
   <span class="our_price_display_tax">{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}</span>
  {/if}
  {/if}
 </span>
{* tax excl *}
 {if $priceDisplay == 2}
  <span id="pretaxe_price"><span id="pretaxe_price_display">{convertPrice price=$product->getPrice(false, $smarty.const.NULL, 2)}</span> {l s='tax excl.'}</span>
 {/if}
{* add to cart btn *}
 <p id="add_to_cart" {if (!$allow_oosp && $product->quantity <= 0) OR !$product->available_for_order OR (isset($restricted_country_mode) AND $restricted_country_mode) OR $PS_CATALOG_MODE} style="display:none;"{/if}>
  <a class="exclusive" href="javascript:document.getElementById('add2cartbtn').click();">{l s='Add to cart'}</a>
  <input id="add2cartbtn" type="submit" name="Submit" value="{l s='Add to cart'}" />
 </p>
{* quantity wanted *}
 <p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity == 0) OR $virtual OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>
  <input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />
  <label>{l s='Quantity :'}</label>
 </p>
</div>
{* minimal quantity wanted *}
<p id="minimal_quantity_wanted_p" class="bordercolor"{if $product->minimal_quantity <= 1 OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display:none;"{/if}>{l s='You must add '}<b id="minimal_quantity_label">{$product->minimal_quantity}</b>{l s=' as a minimum quantity to buy this product.'}</p>
{if $product->minimal_quantity > 1}<script type="text/javascript">checkMinimalQuantity();</script>{/if}
  {/if}
<div class="other_options bordercolor">
  {if $product->show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
<div id="other_prices">
 {if $product->specificPrice AND $product->specificPrice.reduction}
{* old price *}
 <p id="old_price">
  {if $priceDisplay >= 0 && $priceDisplay <= 2}
   {if $productPriceWithoutRedution > $productPrice}
	<span id="old_price_display">{convertPrice price=$productPriceWithoutRedution}</span>
	{if $tax_enabled}{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}{/if}
   {/if}
  {/if}
 </p>
 {/if}
{* reduction percent *}
 {if $product->specificPrice AND $product->specificPrice.reduction_type == 'percentage'}
 <p id="reduction_percent">{l s='(price reduced by'} <span id="reduction_percent_display">{$product->specificPrice.reduction*100}</span> %{l s=')'}</p>
 {/if}
{* pack price *}
 {if $packItems|@count}
 <p class="pack_price">{l s='instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></p>
 {/if}
{* price ecotax *}
 {if $product->ecotax != 0}
 <p class="price-ecotax">{l s='include'} <span id="ecotax_price_display">{if $priceDisplay == 2}{$ecotax_tax_exc|convertAndFormatPrice}{else}{$ecotax_tax_inc|convertAndFormatPrice}{/if}</span> {l s='for green tax'}
  {if $product->specificPrice AND $product->specificPrice.reduction}<br />{l s='(not impacted by the discount)'}{/if}
 </p>
 {/if}
{* unit price *}
 {if !empty($product->unity) && $product->unit_price_ratio > 0.000000}
  {math equation="pprice / punit_price"  pprice=$productPrice  punit_price=$product->unit_price_ratio assign=unit_price}
  <p class="unit-price"><span id="unit_price_display" class="price">{convertPrice price=$unit_price}</span> {l s='per'} {$product->unity|escape:'htmlall':'UTF-8'}</p>
 {/if}
{* online only *}
 {if $product->online_only}<p class="online_only">{l s='Online only'}!</p>{/if}
{* number of item in stock *}
 {if ($display_qties == 1 && !$PS_CATALOG_MODE && $product->available_for_order)}
 <p id="pQuantityAvailable"  {if $product->quantity <= 0} style="display:none;"{/if} >
  <span id="quantityAvailable">{$product->quantity|intval}</span>
  <span {if $product->quantity > 1} style="display:none;"{/if} id="quantityAvailableTxt">{l s='item in stock'}</span>
  <span {if $product->quantity == 1} style="display:none;"{/if} id="quantityAvailableTxtMultiple">{l s='items in stock'}</span>
 </p>
 {/if}
{* last quantities *}
 <p id="last_quantities"{if ($product->quantity > $last_qties OR $product->quantity <= 0) OR $allow_oosp OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display:none;"{/if} >{l s='Warning: Last items in stock!'}</p>
{* product reference *}
 <p id="product_reference" {if isset($groups) OR !$product->reference}style="display:none;"{/if}><label for="product_reference">{l s='Reference :'} </label><span class="editable">{$product->reference|escape:'htmlall':'UTF-8'}</span></p>
{* availability *}
 <p id="availability_statut"{if ($product->quantity <= 0 && !$product->available_later && $allow_oosp) OR ($product->quantity > 0 && !$product->available_now) OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display:none;"{/if}>
  <span id="availability_label">{l s='Availability:'}</span>
  <span id="availability_value"{if $product->quantity <= 0} class="warning_inline"{/if}>
   {if $product->quantity <= 0}{if $allow_oosp}{$product->available_later}{else}{l s='This product is no longer in stock'}{/if}{else}{$product->available_now}{/if}
  </span>
 </p>
</div>
{*close if for show price*}
  {/if}
  <div id="attributes">
{* ON SALE *}
{if $product->on_sale}<span class="on_sale">{l s='On sale!'}</span>{elseif $product->specificPrice AND $product->specificPrice.reduction AND $productPriceWithoutRedution > $productPrice}<span class="discount">{l s='Reduced price!'}</span>{/if}
<div class="clearblock"></div>
{* attributes *}
{if isset($groups)}
{foreach from=$groups key=id_attribute_group item=group}
{if $group.attributes|@count}
<p>
 {assign var="groupName" value="group_$id_attribute_group"}
 <select name="{$groupName}" id="group_{$id_attribute_group|intval}" onchange="javascript:findCombination();{if $colors|@count > 0}$('#wrapResetImages').show('slow');{/if};">
  {foreach from=$group.attributes key=id_attribute item=group_attribute}
   <option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'htmlall':'UTF-8'}">{$group_attribute|escape:'htmlall':'UTF-8'}</option>
  {/foreach}
 </select>
 <label for="group_{$id_attribute_group|intval}">{$group.name|escape:'htmlall':'UTF-8'}:</label>
</p>
{/if}
{/foreach}
{/if}
  </div>
<div class="clearblock"></div>
</div>

{* short descriptions *}
 {if $product->description_short}
 <div id="short_description_block" class="bordercolor" style="display:none;">
  {if $product->description_short}
<div id="short_description_content" class="rte align_justify">{$product->description_short}</div>
  {/if}
  {if $product->description}
  <p class="buttons_bottom_block"><a href="javascript:{ldelim}{rdelim}" class="button">{l s='More details'}</a></p>
  {/if}
 </div>
 {/if}
{* pack content *}
 {if $packItems|@count > 0}
 <div class="pack_content bordercolor bgcolor">
  <h3>{l s='Pack content'}</h3>
  <ul>
  {foreach from=$packItems item=packItem}
<li>
 {$packItem.pack_quantity} x <a href="{$link->getProductLink($packItem.id_product, $packItem.link_rewrite, $packItem.category)}">{$packItem.name|escape:'htmlall':'UTF-8'}</a>
 <p>{$packItem.description_short|truncate:100:'...'}</p>
</li>
  {/foreach}
  </ul>
 </div>
 {/if}
{* Out of stock hook *}
 {if !$allow_oosp}
 <p id="oosHook"{if $product->quantity > 0} style="display: none;"{/if}>{$HOOK_PRODUCT_OOS}</p>
 {/if}
{* colors *}
 {if isset($colors) && $colors}
 <div id="color_picker" class="bgcolor bordercolor">
  <h3>{l s='Pick a color:' js=1}</h3>
  <ul id="color_to_pick_list">
  {foreach from=$colors key='id_attribute' item='color'}
<li><a id="color_{$id_attribute|intval}" class="color_pick" style="background:{$color.value};" onclick="updateColorSelect({$id_attribute|intval});$('#wrapResetImages').show('slow');" title="{$color.name}">{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$color.name}" width="20" height="20" />{/if}</a></li>
  {/foreach}
  </ul>
 </div>
 {/if}
 {if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}
 <div class="clearblock"></div>
 </form>
 {/if}
<!-- Rhapsody moved customizable fields in this section -->

<!-- Customizable products -->
{if $product->customizable}
<ul class="idTabs">
 <li><a style="cursor: pointer">{l s='Product customization'}</a></li>
</ul>
<div class="customization_block">
{* Rhapsody comment out this section
 <form method="post" action="{$customizationFormTarget}" enctype="multipart/form-data" id="customizationForm">
  <p>
<img src="{$img_dir}icon/infos.gif" alt="Informations" />
{l s='After saving your customized product, remember to add it to your cart.'}
{if $product->uploadable_files}<br />{l s='Allowed file formats are: GIF, JPG, PNG'}{/if}
  </p>
Rhapsody Commented out  *}
  {if $product->uploadable_files|intval}
  <h2>{l s='Pictures'}</h2>
  <ul id="uploadable_files">
{counter start=0 assign='customizationField'}
{foreach from=$customizationFields item='field' name='customizationFields'}
 {if $field.type == 0}
  <li class="customizationUploadLine{if $field.required} required{/if}">{assign var='key' value='pictures_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field}
   {if isset($pictures.$key)}<div class="customizationUploadBrowse">
	 <img src="{$pic_dir}{$pictures.$key}_small" alt="" />
	 <a href="{$link->getProductDeletePictureLink($product, $field.id_customization_field)}" title="{l s='Delete'}" >
	  <img src="{$img_dir}icon/delete.gif" alt="{l s='Delete'}" class="customization_delete_icon" width="11" height="13" />
	 </a>
	</div>{/if}
   <div class="customizationUploadBrowse"><input type="file" name="file{$field.id_customization_field}" id="img{$customizationField}" class="customization_block_input {if isset($pictures.$key)}filled{/if}" />{if $field.required}<sup>*</sup>{/if}
   <div class="customizationUploadBrowseDescription">{if !empty($field.name)}{$field.name}{else}{l s='Please select an image file from your hard drive'}{/if}</div></div>
  </li>
  {counter}
 {/if}
{/foreach}
  </ul>
  {/if}
  <div class="clear"></div>
  {if $product->text_fields|intval}
  <h2>{l s='Texts'}</h2>
  <ul id="text_fields">
{counter start=0 assign='customizationField'}
{foreach from=$customizationFields item='field' name='customizationFields'}
 {if $field.type == 1}
  <li class="customizationUploadLine{if $field.required} required{/if}">{assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field}
   {if !empty($field.name)}{$field.name}{/if}{if $field.required}<sup>*</sup>{/if}<textarea type="text" name="textField{$field.id_customization_field}" id="textField{$customizationField}" rows="1" cols="40" class="customization_block_input" />{if isset($textFields.$key)}{$textFields.$key|stripslashes}{/if}</textarea>
  </li>
  {counter}
 {/if}
{/foreach}
  </ul>
  {/if}
  <p style="clear: left;" id="customizedDatas">
<input type="hidden" name="ipa_customization" id="ipa_customization" value="{$ipa_customization}" />
<input type="hidden" name="quantityBackup" id="quantityBackup" value="" />
<input type="hidden" name="submitCustomizedDatas" value="1" />
 <p class="clear required"><sup>*</sup> {l s='required fields'}</p>

{* Rhapsody hid save button in next line
<input type="button" class="button" value="{l s='Save'}" onclick="javascript:saveCustomization()" />
* * * * end of comment *}
<span id="ajax-loader" style="display:none"><img src="{$img_ps_dir}loader.gif" alt="loader" /></span>
  </p>
 </form>
</div>
{/if}
{* Rhapsody moved customization block above  *}

  </form>
{* Rhapsody moved customization block above - need to capture the /form also *}
 {if $HOOK_EXTRA_RIGHT}{$HOOK_EXTRA_RIGHT}{/if}
</div>
</div>
{* quantity discount *}
{if $quantity_discounts}
<div id="quantityDiscount" class="bgcolor bordercolor">
 <h3>{l s='Quantity discount'}</h3>
 <table>
  <tr>
{foreach from=$quantity_discounts item='quantity_discount' name='quantity_discounts'}
 <th class="bordercolor">{$quantity_discount.quantity|intval}
 {if $quantity_discount.quantity|intval > 1}
  {l s='quantities'}
 {else}
  {l s='quantity'}
 {/if}
 </th>
{/foreach}
  </tr>
  <tr>
{foreach from=$quantity_discounts item='quantity_discount' name='quantity_discounts'}
 <td>
 {if $quantity_discount.price != 0 OR $quantity_discount.reduction_type == 'amount'}
  -{convertPrice price=$quantity_discount.real_value|floatval}
 {else}
  -{$quantity_discount.real_value|floatval}%
 {/if}
 </td>
{/foreach}
  </tr>
 </table>
</div>
{/if}
{* description and features *}
{if $product->description || $features || $accessories || $HOOK_PRODUCT_TAB || $attachments}
<div id="more_info_block" class="clear">
 <ul id="more_info_tabs" class="idTabs idTabsShort">
  {if $product->description}<li><a id="more_info_tab_more_info" href="#idTab1">{l s='More info'}</a></li>{/if}
  {if $features}<li><a id="more_info_tab_data_sheet" href="#idTab2">{l s='Data sheet'}</a></li>{/if}
  {if $attachments}<li><a id="more_info_tab_attachments" href="#idTab9">{l s='Download'}</a></li>{/if}
  {if isset($accessories) AND $accessories}<li><a href="#idTab4">{l s='Accessories'}</a></li>{/if}
  {$HOOK_PRODUCT_TAB}
 </ul>
 <div id="more_info_sheets" class="bgcolor bordercolor">
 {if $product->description}
{* full description *}
  <div id="idTab1"><div>{$product->description}</div></div>
 {/if}
 {if $features}
{* product's features *}
  <ul id="idTab2" class="bullet">
  {foreach from=$features item=feature}
<li><span>{$feature.name|escape:'htmlall':'UTF-8'}</span> {$feature.value|escape:'htmlall':'UTF-8'}</li>
  {/foreach}
  </ul>
 {/if}
 {if $attachments}
{* product's attachments *}
  <ul id="idTab9" class="bullet">
  {foreach from=$attachments item=attachment}
<li><a href="{$link->getPageLink('attachment.php', true)}?id_attachment={$attachment.id_attachment}">{$attachment.name|escape:'htmlall':'UTF-8'}</a><br />{$attachment.description|escape:'htmlall':'UTF-8'}</li>
  {/foreach}
  </ul>
 {/if}
 {if isset($accessories) AND $accessories}
{* accessories *}
  <ul id="idTab4">
{foreach from=$accessories item=accessory name=accessories_list}
{assign var='accessoryLink' value=$link->getProductLink($accessory.id_product, $accessory.link_rewrite, $accessory.category)}
<li class="bordercolor ajax_block_product {if $smarty.foreach.accessories_list.first}first_item{elseif $smarty.foreach.accessories_list.last}last_item{else}item{/if} product_accessories_description">
 <div class="accessories_desc">
  <a class="accessory_image product_img_link bordercolor" href="{$accessoryLink|escape:'htmlall':'UTF-8'}" title="{$accessory.legend|escape:'htmlall':'UTF-8'}"><img src="{$link->getImageLink($accessory.link_rewrite, $accessory.id_image, 'medium')}" alt="{$accessory.legend|escape:'htmlall':'UTF-8'}" /></a>
  <h5><a class="product_link" href="{$accessoryLink|escape:'htmlall':'UTF-8'}">{$accessory.name|truncate:22:'...':true|escape:'htmlall':'UTF-8'}</a></h5>
  <a class="product_descr" href="{$accessoryLink|escape:'htmlall':'UTF-8'}" title="{l s='More'}">{$accessory.description_short|strip_tags|truncate:70:'...'}</a>
 </div>
 <div class="accessories_price bordercolor">
  {if $accessory.show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}<span class="price">{if $priceDisplay != 1}{displayWtPrice p=$accessory.price}{else}{displayWtPrice p=$accessory.price_tax_exc}{/if}</span>{/if}
  {if ($accessory.allow_oosp || $accessory.quantity > 0) AND $accessory.available_for_order AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
   <a class="exclusive button ajax_add_to_cart_button" href="{$link->getPageLink('cart.php')}?qty=1&id_product={$accessory.id_product|intval}&token={$static_token}&add" rel="ajax_id_product_{$accessory.id_product|intval}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>
  {else}
   <span class="exclusive">{l s='Add to cart'}</span>
  {/if}
 </div>
</li>
{/foreach}
  </ul>
 {/if}
 {$HOOK_PRODUCT_TAB_CONTENT}
 </div>
</div>
{/if}
{$HOOK_PRODUCT_FOOTER}
{* pack items list *}
{if $packItems|@count > 0}
 <div id="pack_product_list">
  <h2>{l s='Pack content'}</h2>
  {include file="$tpl_dir./product-list-pack.tpl" products=$packItems}
 </div>
{/if}
{/if}

 

The template Is built for 1.4.8, but I use it with 1.4.9. Everything else is working so...

Edited by adameriksson (see edit history)
Link to comment
Share on other sites

I have confirmed the problem is with your product.tpl file when I try it with a stock ps theme on one of my 1.4.9.0 test installations. With your file I get the message.

 

There is 1 error :

  1. Please fill in all required fields, then save the customization.

Try using the product.tpl file I modified from the old template in your theme and see if it works, then go from there for any other mods.

 

A good tool to use to compare the files and make the changes is called WinMerge.

Link to comment
Share on other sites

I have confirmed the problem is with your product.tpl file when I try it with a stock ps theme on one of my 1.4.9.0 test installations. With your file I get the message.

 

There is 1 error :

  1. Please fill in all required fields, then save the customization.

Try using the product.tpl file I modified from the old template in your theme and see if it works, then go from there for any other mods.

 

A good tool to use to compare the files and make the changes is called WinMerge.

 

Okey, Thanks for your help! The sad thing is when i Use your code, everyting looks weird, I dont even see a add to cart button..

 

Well, I think I'm stuck with the save button then, If I'm not able to modify your tpl file to have it look like my themes tpl

Link to comment
Share on other sites

No problem. Seriously - create another theme folder and make changes to the stock PS theme which should be as easy as copying the product.tpl file that I posted. Once that works, use WinMerge to compare those files with your theme and that should help you find where / why there are differences.

Link to comment
Share on other sites

No problem. Seriously - create another theme folder and make changes to the stock PS theme which should be as easy as copying the product.tpl file that I posted. Once that works, use WinMerge to compare those files with your theme and that should help you find where / why there are differences.

 

That's a good idea.

 

I just duplicated standard theme, overvrited the product.tpl file with yours. I have the modified controller file.

 

But it doesnt work anyway, the text isn't in the cart. Maybe it is something with my templatemonster modules...

Link to comment
Share on other sites

does Template Monster modify the blockcart module?

 

Yeah The do, they have a modified ajax-cart.js. But I dont use their file yet. I don't know what it does.

 

Do you think it would work better if I use it?

 

I see now that I also have "blockcart-json.tpl" and "blockcart.tpl" in my themes/modules folder. So templatemonster have modified the cart module...

 

I did a comparison, looks like they only have customized it for design purpose, they have not changed core functions

Edited by adameriksson (see edit history)
Link to comment
Share on other sites

Yeah The do, they have a modified ajax-cart.js. But I dont use their file yet. I don't know what it does. Do you think it would work better if I use it? I see now that I also have "blockcart-json.tpl" and "blockcart.tpl" in my themes/modules folder. So templatemonster have modified the cart module... I did a comparison, looks like they only have customized it for design purpose, they have not changed core functions

I moved some code around in your monster template file and got it to work, but am not sure if it formats correctly since I don't have your entire theme. Try the attached file and unzip it to product.tpl

product.zip

Link to comment
Share on other sites

I moved some code around in your monster template file and got it to work, but am not sure if it formats correctly since I don't have your entire theme. Try the attached file and unzip it to product.tpl

 

IT WORKS!!!!!!

 

Thank you so much, you are the best! May I ask you what U think was the problem in the code? Was it the position of some code, or did you modify something else?

 

Thank so much, I'm so glad!

Link to comment
Share on other sites

  • 1 month later...

Hi everybody,

Thanks for this solution, works perfectly.

I would like it to work well with file fields, you can help me?

Regards

edit:

I use the Prestashop version 1.4.9, with the Prestashop_new theme.

And I've gotten it to work with ajax cart, deleting the code between "//for every 'add' buttons..." and "//for 'delete' buttons in the cart block.." in the ajax-cart.js theme's file.

Edited by franmille (see edit history)
Link to comment
Share on other sites

when I do all the said, the customization is saved but the attributes aren't.

 

when the line

 

<input type="hidden" name="submitCustomizedDatas" value="1" />

 

is in the product.tpl, the customization is saved but the attributes arent. if it is not, the attributes are saved but the customizations arent.

 

I'm on ps 1.4.8.2

 

pulling my hair here...

Edited by cagrie (see edit history)
Link to comment
Share on other sites

  • 1 month later...

Figured out a way to do it granted it's not the correct way and I'm on too short of a deadline to make it clean. Also, only for text fields. I didn't need image upload so I didnt even try with that.

 

See attached. Tested on 1.5.2. Put the file in /overrides/controllers/front/

 

Requires .tpl modifcation that is fairly straightforward: Remove the save button and put the following code in the form which submits to the cart:

{if $product->text_fields|intval}
   {counter start=0 assign='customizationField'}
   {foreach from=$customizationFields item='field' name='customizationFields'}
       {if $field.type == 1}
           <label for ="textField{$customizationField}">{assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field} {if !empty($field.name)}{$field.name}{/if}{if $field.required}<sup>*</sup>{/if}</label>
           <textarea type="text" name="textField{$field.id_customization_field}" id="textField{$customizationField}" rows="1" cols="40" class="customization_block_input" />{if isset($textFields.$key)}{$textFields.$key|stripslashes}{/if}</textarea>
           {counter}
       {/if}
   {/foreach}
{/if}
<input type="hidden" name="quantityBackup" id="quantityBackup" value="" />
<input type="hidden" name="submitCustomizedDatas" value="1" />

 

Of course all you really need are the inputs. The code is stolen from the other customization area on the page and minified a little. Nothing changed. Be sure to remove the customization form as well.

CartController.php

  • Like 1
Link to comment
Share on other sites

Figured out a way to do it granted it's not the correct way and I'm on too short of a deadline to make it clean. Also, only for text fields. I didn't need image upload so I didnt even try with that.

 

See attached. Tested on 1.5.2. Put the file in /overrides/controllers/front/

 

Requires .tpl modifcation that is fairly straightforward: Remove the save button and put the following code in the form which submits to the cart:

{if $product->text_fields|intval}
{counter start=0 assign='customizationField'}
{foreach from=$customizationFields item='field' name='customizationFields'}
	{if $field.type == 1}
		<label for ="textField{$customizationField}">{assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field} {if !empty($field.name)}{$field.name}{/if}{if $field.required}<sup>*</sup>{/if}</label>
		<textarea type="text" name="textField{$field.id_customization_field}" id="textField{$customizationField}" rows="1" cols="40" class="customization_block_input" />{if isset($textFields.$key)}{$textFields.$key|stripslashes}{/if}</textarea>
		{counter}
	{/if}
{/foreach}
{/if}
<input type="hidden" name="quantityBackup" id="quantityBackup" value="" />
<input type="hidden" name="submitCustomizedDatas" value="1" />

 

Of course all you really need are the inputs. The code is stolen from the other customization area on the page and minified a little. Nothing changed. Be sure to remove the customization form as well.

 

I tried on my PS 1.5.2 but no luck.

Can you help me out, did you change some else as well or just change the CartController.php file. I mean did you make changes ajax-cart.js too.

 

Regards,

Naeem

Link to comment
Share on other sites

This worked great on 1.5.3.1

 

How do I make it compatible with ajax cart?

 

Figured out a way to do it granted it's not the correct way and I'm on too short of a deadline to make it clean. Also, only for text fields. I didn't need image upload so I didnt even try with that.

 

See attached. Tested on 1.5.2. Put the file in /overrides/controllers/front/

 

Requires .tpl modifcation that is fairly straightforward: Remove the save button and put the following code in the form which submits to the cart:

{if $product->text_fields|intval}
{counter start=0 assign='customizationField'}
{foreach from=$customizationFields item='field' name='customizationFields'}
	{if $field.type == 1}
		<label for ="textField{$customizationField}">{assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field} {if !empty($field.name)}{$field.name}{/if}{if $field.required}<sup>*</sup>{/if}</label>
		<textarea type="text" name="textField{$field.id_customization_field}" id="textField{$customizationField}" rows="1" cols="40" class="customization_block_input" />{if isset($textFields.$key)}{$textFields.$key|stripslashes}{/if}</textarea>
		{counter}
	{/if}
{/foreach}
{/if}
<input type="hidden" name="quantityBackup" id="quantityBackup" value="" />
<input type="hidden" name="submitCustomizedDatas" value="1" />

 

Of course all you really need are the inputs. The code is stolen from the other customization area on the page and minified a little. Nothing changed. Be sure to remove the customization form as well.

Link to comment
Share on other sites

  • 4 weeks later...
  • 3 weeks later...
  • 2 weeks later...

Hi Everyone,

 

Sorry, had to edit my post. I think I have it working using shamun's CartController.php in Prestashop 1.5.2 with the default theme.

 

I moved the entire <!-- Customizable products --> content to where the add to cart button is. Removed the Save button and added onclick="javascript:saveCustomization()" to the add to cart input button.

 

It works and just need some CSS adjustments. But, I'm not quite sure if it won't affect other modules or features. Anyway, I achieved my goal in removing the save button and make sure the input data will display after clicking the add to cart button.

 

Thank you all! To Rhapsody and shamun, very useful post :)

Edited by dOnkSkie (see edit history)
Link to comment
Share on other sites

Working 1.5.3.1 Mod to remove save button! (without Ajax Cart)

 

The Zip file attached includes what is needed to modify the basic "default" theme on Prestashop 1.5.3.1 to eliminate the save button so you can add to cart directly. Thanks to shamun who got this to work on version 1.5.2 in post #124 above, the CartController.php override file has been updated with 1.5.3.1 code.

 

1. Put the CartController.php file in the override/controllers/front directory

2. Put the product.tpl file in your default theme directory (or the theme directory you created from the default theme).

3. In the BO under modules, set the Cart block configuration to deactivate the Ajax cart

4. In the BO on the Advnaced Parameters menu, select performance, Turn off the smarty cache and compile templates, then try it in the front office. It should work. Then reenable the smarty cache and turn compile off in the BO.

 

If anyone is able to accomplish the following that is NOT incorporated in this mod, please post in this thread:

1. update to include uploading of files & images

2. Get the Ajax cart working with this mod

1.5.3.1 Mod to eliminate svae button.zip

  • Like 3
Link to comment
Share on other sites

Hello Rhapsody, thanks for your time. It seems to be working but I have a problem:

 

With the new files (product.tpl and CartController.php in the override), the button to remove products in the cart redirect to the homepage and the product isn't removed from the cart.

 

I'm using prestashop 1.5 and the theme "Free Template PS001" from http://www.uhupage.com/

 

where could it be the problem? any idea about solving this?

 

Thanks.

Link to comment
Share on other sites

  • 2 weeks later...

hey, many thanks to all the contributors, was really stuck on this one ...

i managed to extend rhapsodys working 1.5 mod to also work with files, was actually pretty simple.

Just add the following in overrides/controllers/front/CartCOntroller.php

$this->pictureUpload($product);

below

$this->textRecord($product);

and add the slightly modified pictureUpload function from the productscontroller

protected function pictureUpload($product)
{
 if (!$field_ids = $product->getCustomizationFieldIds())
  return false;
 $authorized_file_fields = array();
 foreach ($field_ids as $field_id)
  if ($field_id['type'] == Product::CUSTOMIZE_FILE)
   $authorized_file_fields[(int)$field_id['id_customization_field']] = 'file'.(int)$field_id['id_customization_field'];
 $indexes = array_flip($authorized_file_fields);
 foreach ($_FILES as $field_name => $file)
  if (in_array($field_name, $authorized_file_fields) && isset($file['tmp_name']) && !empty($file['tmp_name']))
  {
   $file_name = md5(uniqid(rand(), true));
   if ($error = ImageManager::validateUpload($file, (int)Configuration::get('PS_PRODUCT_PICTURE_MAX_SIZE')))
 $this->errors[] = $error;
   $product_picture_width = (int)Configuration::get('PS_PRODUCT_PICTURE_WIDTH');
   $product_picture_height = (int)Configuration::get('PS_PRODUCT_PICTURE_HEIGHT');
   $tmp_name = tempnam(_PS_TMP_IMG_DIR_, 'PS');
   if ($error || (!$tmp_name || !move_uploaded_file($file['tmp_name'], $tmp_name)))
 return false;
   /* Original file */
   if (!ImageManager::resize($tmp_name, _PS_UPLOAD_DIR_.$file_name))
 $this->errors[] = Tools::displayError('An error occurred during the image upload process.');
   /* A smaller one */
   elseif (!ImageManager::resize($tmp_name, _PS_UPLOAD_DIR_.$file_name.'_small', $product_picture_width, $product_picture_height))
 $this->errors[] = Tools::displayError('An error occurred during the image upload process.');
   elseif (!chmod(_PS_UPLOAD_DIR_.$file_name, 0777) || !chmod(_PS_UPLOAD_DIR_.$file_name.'_small', 0777))
 $this->errors[] = Tools::displayError('An error occurred during the image upload process.');
   else
 $this->context->cart->addPictureToProduct($product->id, $indexes[$field_name], Product::CUSTOMIZE_FILE, $file_name);
   unlink($tmp_name);
  }
 return true;
}

 

then all you have to do id add

enctype="multipart/form-data"

to the add-to-cart form in product.tpl

 

Pretty easy to figure out, still hope it helps someone maybe.

 

Am still trying to get this to work with the ajax-cart, no luck so far.

Link to comment
Share on other sites

oh, right i should've been more specific. The enctype snippet needs to be in the "buy-block" form so:

 

<form id="buy_block" {if $PS_CATALOG_MODE AND !isset($groups) AND $product->quantity > 0}class="hidden"{/if} action="{$link->getPageLink('cart')}" method="post"  enctype="multipart/form-data">

 

let me know if this works :)

Link to comment
Share on other sites

  • 1 month later...

@huduydesign : I guess you figured it out? When i enter customizations, they are being saved to the cart. Or do you want to move the customizations out of the tab region? To achieve that you need to keep the form itself intact and move it around as a whole. You can switch around the individual parts to your liking but you need to keep all inputs and the submit (add to cart in this case) in the form.

Link to comment
Share on other sites

Defuzed I did finally get it to work but not using Rhapsody's method but one in post #132. Rhapsody's method I could not find right combinations to make it work so resorted to using the "save" function in the add to cart function, ajax off & the one cart file from Rhapsody's download is in there, not sure it's doing anything. This is same set up I used earlier but stopped it stopped working, possibly because I had ajax on or something went wacko when moving to VPS hosting. Hoping it continues to work.

Link to comment
Share on other sites

  • 3 weeks later...
  • 2 weeks later...

aaronjpitts, have you tried using rhapsody's code in 1.5.4.1? I'm using my modified version (with file-upload) and i didn't have to change anything when upgrading to 1.5.4.1 ( i don't think that update changed anything in the relevant files).

Link to comment
Share on other sites

yes friends try this...

 

add : function(idProduct, idCombination,addedFromProductPage, callerElement, quantity, whishlist){
if (addedFromProductPage)
       {
           $('#add_to_cart input').attr('disabled', true).removeClass('exclusive').addClass('exclusive_disabled');
           $('.filled').removeClass('filled');
       }
       else
           $(callerElement).attr('disabled', true);

       if ($('#cart_block_list').hasClass('collapsed'))
           this.expand();
       var formData = $('#customizationForm').serialize();

               $.ajax({
               url: $('#customizationForm').attr('action'),
               type: 'POST',
               data: formData,
               async: false,
                success: function (data) {
                    $.ajax({
                           type: 'POST',
                           url: baseUri,
                           async: true,
                           cache: false,
                           dataType : "json",
                           data: 'controller=cart&add=1&ajax=true&qty=' + ((quantity && quantity != null) ? quantity : '1') + '&id_product=' + idProduct + '&token=' + static_token + ( (parseInt(idCombination) && idCombination != null) ? '&ipa=' + parseInt(idCombination): ''),
                           success: function(jsonData,textStatus,jqXHR)
                           {
                               // add appliance to whishlist module
                               if (whishlist && !jsonData.errors)
                                   WishlistAddProductCart(whishlist[0], idProduct, idCombination, whishlist[1]);

                               // add the picture to the cart
                               var $element = $(callerElement).parent().parent().find('a.product_image img,a.product_img_link img');
                               if (!$element.length)
                                   $element = $('#bigpic');
                               var $picture = $element.clone();
                               var pictureOffsetOriginal = $element.offset();

                               if ($picture.size())
                                   $picture.css({'position': 'absolute', 'top': pictureOffsetOriginal.top, 'left': pictureOffsetOriginal.left});

                               var pictureOffset = $picture.offset();
                               if ($('#cart_block').offset().top && $('#cart_block').offset().left)
                                   var cartBlockOffset = $('#cart_block').offset();
                               else
                                   var cartBlockOffset = $('#shopping_cart').offset();

                               // Check if the block cart is activated for the animation
                               if (cartBlockOffset != undefined && $picture.size())
                               {
                                   $picture.appendTo('body');
                                   $picture.css({ 'position': 'absolute', 'top': $picture.css('top'), 'left': $picture.css('left'), 'z-index': 4242 })
                                   .animate({ 'width': $element.attr('width')*0.66, 'height': $element.attr('height')*0.66, 'opacity': 0.2, 'top': cartBlockOffset.top + 30, 'left': cartBlockOffset.left + 15 }, 1000)
                                   .fadeOut(100, function() {
                                       ajaxCart.updateCartInformation(jsonData, addedFromProductPage);
                                   });
                               }
                               else
                                   ajaxCart.updateCartInformation(jsonData, addedFromProductPage);
                           },
                           error: function(XMLHttpRequest, textStatus, errorThrown)
                           {
                               alert("Impossible to add the product to the cart.\n\ntextStatus: '" + textStatus + "'\nerrorThrown: '" + errorThrown + "'\nresponseText:\n" + XMLHttpRequest.responseText);
                               //reactive the button when adding has finished
                               if (addedFromProductPage)
                                   $('#add_to_cart input').removeAttr('disabled').addClass('exclusive').removeClass('exclusive_disabled');
                               else
                                   $(callerElement).removeAttr('disabled');
                           }
                       });
	        }
    });

it is work for me..

  • Like 5
Link to comment
Share on other sites