Add share button under product in prestashop - php

I got a social network share button from add to any. I want to place it under all my products.
I edited product.tpl in my theme and add addToAny code given by them. But its not showing there.
<!-- 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>
<div>
//Adding my addToAny share code here
</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}

In admin panel
goto --> preference --> performance --> select Force compile to yes. Smarty wont compile until you set it to yes.

Related

Show a Smarty custom variable in plain text

I'm modifying the modal tpl to display a message that shows the difference that is left to have a free shipping.
I know how to display the message but I can't show the variable I've created in the text. And I've doubts that I'm creating well the variable.
I have to show the difference between the subtotal and 150 €
I've tried:
<div class="col-md-7">
<div class="cart-content pt-3">
{if $cart.products_count > 1}
<p class="cart-products-count">
{l s='There are %products_count% items in your cart.' sprintf=['%products_count%' => $cart.products_count] d='Shop.Theme.Checkout'}
</p>
{else}
<p class="cart-products-count">
{l s='There is %product_count% item in your cart.' sprintf=['%product_count%' =>$cart.products_count] d='Shop.Theme.Checkout'}
</p>
{/if}
<p>
<strong>{l s='Total products:' d='Shop.Theme.Checkout'}</strong> {$cart.subtotals.products.value}
</p>
{hook h='displayCartAjaxInfo'}
<div class="cart-content-btn">
{l s='Proceed to checkout' d='Shop.Theme.Actions'}
<button type="button" class="btn btn-secondary btn-block" data-dismiss="modal">{l s='Continue shopping' d='Shop.Theme.Actions'}</button>
</div>
<div class="remember-vip">
<br>
{assign var="diferencia" value=$cart.subtotals.products.value-150.00}
Le faltan $diferencia para disponer de envío gratuito.
</div>
</div>
</div>
This is how the code looks now:
Current result

Using Smarty loop to wrap a div around every two items

I think I am on the right track but not working as I hoped; I want to wrap every two items with a div wrapper which breaks things onto new lines every 2 items but not really working how I have done. I am rather new to Smarty.
TPL
<div class="row-fluid">
<div class="span12">
{foreach from=$cart.products item="pp" key="pp_key" name="loop"}
{if $pp.extra.package_info.p_id == $key && !$pp.extra.package_info.hidden}
<div class="span6">
<p>{$pp.product_id|fn_specific_development_get_category}<br>
{$pp.product}
</p>
{if $pp.product_options}
{include file="common/options_info.tpl" product_options=$cart_products.$pp_key.product_options}
{else}
-
{/if}
<p class="center">{$pp.amount / $product.amount}</p>
{if $product.price_rule == "S"}
<p>{include file="common/price.tpl" value=$pp.extra.package_info.f_price class="none"}</p>
<p>{include file="common/price.tpl" value=$pp.extra.package_info.f_price*$pp.amount class="none"}</p>
{/if}
</div>
{/if}
{if $pp.extra.package_info.p_id == $key}
<input type="hidden" name="cart_products[{$key}][package][{$pp.extra.package_info.table_key}][{$pp.extra.package_info.inc}][product_id]" value="{$pp.product_id}" />
<input type="hidden" name="cart_products[{$key}][package][{$pp.extra.package_info.table_key}][{$pp.extra.package_info.inc}][amount]" value="{$pp.amount / $product.amount}" />
{if $pp.product_options}
{foreach from=$pp.product_options key="opt_id" item="opt_value"}
<input type="hidden" name="cart_products[{$key}][package][{$pp.extra.package_info.table_key}][{$pp.extra.package_info.inc}][product_options][{$opt_id}]" value="{$opt_value}" />
{/foreach}
{/if}
{/if}
{if $smarty.foreach.loop.index is div by 2}
</div><div class="row-fluid">
{/if}
{/foreach}
</div>
</div>
It should end up something like....
<div class="row-fluid">
<div class="span6">....</div>
<div class="span6">....</div>
</div>
<div class="row-fluid">
<div class="span6">....</div>
<div class="span6">....</div>
</div>
<div class="row-fluid">
<div class="span6">....</div>
</div>
For anyone else wanting to know here was my solution:
Used a iteration and strip to wrap content loop
{foreach from=$cart.products item="pp" key="pp_key" name="loop"}
{strip}
{if $pp.extra.package_info.p_id == $key && !$pp.extra.package_info.hidden}
<div class="span6">
<p>{$pp.product_id|fn_specific_development_get_category}<br>
{$pp.product}
</p>
{if $pp.product_options}
{include file="common/options_info.tpl" product_options=$cart_products.$pp_key.product_options}
{else}
-
{/if}
<p class="center">{$pp.amount / $product.amount}</p>
{if $product.price_rule == "S"}
<p>{include file="common/price.tpl" value=$pp.extra.package_info.f_price class="none"}</p>
<p>{include file="common/price.tpl" value=$pp.extra.package_info.f_price*$pp.amount class="none"}</p>
{/if}
</div>
{/if}
{if $pp.extra.package_info.p_id == $key}
<input type="hidden" name="cart_products[{$key}][package][{$pp.extra.package_info.table_key}][{$pp.extra.package_info.inc}][product_id]" value="{$pp.product_id}" />
<input type="hidden" name="cart_products[{$key}][package][{$pp.extra.package_info.table_key}][{$pp.extra.package_info.inc}][amount]" value="{$pp.amount / $product.amount}" />
{if $pp.product_options}
{foreach from=$pp.product_options key="opt_id" item="opt_value"}
<input type="hidden" name="cart_products[{$key}][package][{$pp.extra.package_info.table_key}][{$pp.extra.package_info.inc}][product_options][{$opt_id}]" value="{$opt_value}" />
{/foreach}
{/if}
{/if}
{/strip}
{if $smarty.foreach.loop.last or $smarty.foreach.loop.iteration is div by 2}
</div><div class="row-fluid">
{/if}
{/foreach}

Execute event onload php file

This is the code I have right now and I'd like to execute que script (at the bottom) as soon as the page loads instead of onclick the button.
{capture name=path}
{l s='Amanpay payment.' mod='amanpay'}
{/capture}
<h1 class="page-heading">
{l s='Order summary' mod='amanpay'}
</h1>
{assign var='current_step' value='payment'}
{include file="$tpl_dir./order-steps.tpl"}
{if $nbProducts <= 0}
<p class="alert alert-warning">
{l s='Your shopping cart is empty.' mod='amanpay'}
</p>
{else}
<div class="box cheque-box">
<h3 class="page-subheading">
{l s='Amanpay payment.' mod='amanpay'}
</h3>
<p class="cheque-indent">
<strong class="dark">
{l s='You have chosen to pay by Amanpay.' mod='amanpay'}
{l s='Here is a short summary of your order:' mod='amanpay'}
</strong>
</p>
<p>
- {l s='The total amount of your order is' mod='amanpay'}
<span id="amount" class="price">{displayPrice price=$total}</span>
{if $use_taxes == 1}
{l s='(tax incl.)' mod='amanpay'}
{/if}
</p>
<p>
- {l s='Please confirm your order by clicking "I confirm my order."' mod='amanpay'}.
</p>
</div>
<p class="cart_navigation clearfix" id="cart_navigation">
{*
<a
class="button-exclusive btn btn-default"
href="{$link->getPageLink('order', true, NULL, "step=3")|escape:'html':'UTF-8'}">
<i class="icon-chevron-left"></i>{l s='Other payment methods' mod='amanpay'}
</a>
*}
<a class="button btn btn-default button-medium" href="#" onclick="return confirm(event)">
<span>{l s='I confirm my order' mod='amanpay'}
<i class="icon-chevron-right right"></i>
</span>
</a>
{*<div style="float: right;margin-top: -38px;">*}
{$amanpay_widget}
{*</div>*}
</p>
<script type="text/javascript">
function confirm (e)
{
e.preventDefault();
AmnPy.loadModal();
}
</script>
{/if}
As I said, I need the page to trigger the script onload instead of having to click the confirmation button
Perfect! finally... here was the answer:
<script>
$( document ).ready(function() {
AmnPy.loadModal();
});
</script>

Radio button in mobile theme Prestashop not working

I have Prestashop 1.6 and using the default theme called default-bootstrap.
In mobile devices, the radio buttons when selecting product attributes (for example size/colour etc) on product page do not work. The problem occurs only on mobile devices and only with this theme (with another theme they work).
When tapping the product attribute, the URL bar is changed, but the selection of attribute doesn't change (and if added to cart, the wrong selection remains).
For example in this page: http://clubvapea.es/gb/e-liquids/182-full-month-pack-4-x-mix-of-avoria-12ml-german-e-liquid-valeo.html
This is added to the end of the URL: #/90-avoria-nicotina9mg
But in mobile devices nothing happens.
What is the problem?
Thank you for your help!
My themes/default-bootstrap/product.tpl
SKIPPED TO FIRST PLACE WHERE ATTRIBUTE IS SHOWN AS THE CODE IS TOO LONG
<!-- pb-right-column-->
<div class="pb-right-column col-xs-12 col-sm-4 col-md-3">
{if ($product->show_price && !isset($restricted_country_mode)) || isset($groups) || $product->reference || (isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS)}
<!-- add to cart form-->
<form id="buy_block"{if $PS_CATALOG_MODE && !isset($groups) && $product->quantity > 0} class="hidden"{/if} action="{$link->getPageLink('cart')|escape:'html':'UTF-8'}" 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>
<div class="box-info-product">
<div class="content_prices clearfix">
{if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
<!-- prices -->
<div>
<p class="our_price_display" itemprop="offers" itemscope itemtype="http://schema.org/Offer">{strip}
{if $product->quantity > 0}<link itemprop="availability" href="http://schema.org/InStock"/>{/if}
{if $priceDisplay >= 0 && $priceDisplay <= 2}
<span id="our_price_display" class="price" itemprop="price">{convertPrice price=$productPrice}</span>
{if $tax_enabled && ((isset($display_tax_label) && $display_tax_label == 1) || !isset($display_tax_label))}
{if $priceDisplay == 1} {l s='tax excl.'}{else} {l s='tax incl.'}{/if}
{/if}
<meta itemprop="priceCurrency" content="{$currency->iso_code}" />
{hook h="displayProductPriceBlock" product=$product type="price"}
{/if}
{/strip}</p>
<p id="reduction_percent" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if}>{strip}
<span id="reduction_percent_display">
{if $product->specificPrice && $product->specificPrice.reduction_type == 'percentage'}-{$product->specificPrice.reduction*100}%{/if}
</span>
{/strip}</p>
<p id="reduction_amount" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'amount' || $product->specificPrice.reduction|floatval ==0} style="display:none"{/if}>{strip}
<span id="reduction_amount_display">
{if $product->specificPrice && $product->specificPrice.reduction_type == 'amount' && $product->specificPrice.reduction|floatval !=0}
-{convertPrice price=$productPriceWithoutReduction-$productPrice|floatval}
{/if}
</span>
{/strip}</p>
<p id="old_price"{if (!$product->specificPrice || !$product->specificPrice.reduction) && $group_reduction == 0} class="hidden"{/if}>{strip}
{if $priceDisplay >= 0 && $priceDisplay <= 2}
{hook h="displayProductPriceBlock" product=$product type="old_price"}
<span id="old_price_display">{if $productPriceWithoutReduction > $productPrice}<span class="price">{convertPrice price=$productPriceWithoutReduction}</span>{if $tax_enabled && $display_tax_label == 1} {if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}{/if}{/if}</span>
{/if}
{/strip}</p>
{if $priceDisplay == 2}
<br />
<span id="pretaxe_price">{strip}
<span id="pretaxe_price_display">{convertPrice price=$product->getPrice(false, $smarty.const.NULL)}</span> {l s='tax excl.'}
{/strip}</span>
{/if}
</div> <!-- end prices -->
{if $packItems|#count && $productPrice < $product->getNoPackPrice()}
<p class="pack_price">{l s='Instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></p>
{/if}
{if $product->ecotax != 0}
<p class="price-ecotax">{l s='Including'} <span id="ecotax_price_display">{if $priceDisplay == 2}{$ecotax_tax_exc|convertAndFormatPrice}{else}{$ecotax_tax_inc|convertAndFormatPrice}{/if}</span> {l s='for ecotax'}
{if $product->specificPrice && $product->specificPrice.reduction}
<br />{l s='(not impacted by the discount)'}
{/if}
</p>
{/if}
{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">{convertPrice price=$unit_price}</span> {l s='per'} {$product->unity|escape:'html':'UTF-8'}</p>
{hook h="displayProductPriceBlock" product=$product type="unit_price"}
{/if}
{/if} {*close if for show price*}
{hook h="displayProductPriceBlock" product=$product type="weight"}
<div class="clear"></div>
</div> <!-- end content_prices -->
<div class="product_attributes clearfix">
<!-- quantity wanted -->
{if !$PS_CATALOG_MODE}
<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
<label>{l s='Quantity'}</label>
<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}" />
<a href="#" data-field-qty="qty" class="btn btn-default button-minus product_quantity_down">
<span><i class="icon-minus"></i></span>
</a>
<a href="#" data-field-qty="qty" class="btn btn-default button-plus product_quantity_up">
<span><i class="icon-plus"></i></span>
</a>
<span class="clearfix"></span>
</p>
{/if}
<!-- minimal quantity wanted -->
<p id="minimal_quantity_wanted_p"{if $product->minimal_quantity <= 1 || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
{l s='The minimum purchase order quantity for the product is'} <b id="minimal_quantity_label">{$product->minimal_quantity}</b>
</p>
{if isset($groups)}
<!-- attributes -->
<div id="attributes">
<div class="clearfix"></div>
{foreach from=$groups key=id_attribute_group item=group}
{if $group.attributes|#count}
<fieldset class="attribute_fieldset">
<label class="attribute_label" {if $group.group_type != 'color' && $group.group_type != 'radio'}for="group_{$id_attribute_group|intval}"{/if}>{$group.name|escape:'html':'UTF-8'} </label>
{assign var="groupName" value="group_$id_attribute_group"}
<div class="attribute_list">
{if ($group.group_type == 'select')}
<select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="form-control attribute_select no-print">
{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:'html':'UTF-8'}">{$group_attribute|escape:'html':'UTF-8'}</option>
{/foreach}
</select>
{elseif ($group.group_type == 'color')}
<ul id="color_to_pick_list" class="clearfix">
{assign var="default_colorpicker" value=""}
{foreach from=$group.attributes key=id_attribute item=group_attribute}
{assign var='img_color_exists' value=file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}
<li{if $group.default == $id_attribute} class="selected"{/if}>
<a href="{$link->getProductLink($product)|escape:'html':'UTF-8'}" id="color_{$id_attribute|intval}" name="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" class="color_pick{if ($group.default == $id_attribute)} selected{/if}"{if !$img_color_exists && isset($colors.$id_attribute.value) && $colors.$id_attribute.value} style="background:{$colors.$id_attribute.value|escape:'html':'UTF-8'};"{/if} title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}">
{if $img_color_exists}
<img src="{$img_col_dir}{$id_attribute|intval}.jpg" alt="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" width="20" height="20" />
{/if}
</a>
</li>
{if ($group.default == $id_attribute)}
{$default_colorpicker = $id_attribute}
{/if}
{/foreach}
</ul>
<input type="hidden" class="color_pick_hidden" name="{$groupName|escape:'html':'UTF-8'}" value="{$default_colorpicker|intval}" />
{elseif ($group.group_type == 'radio')}
<ul>
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<li>
<input type="radio" class="attribute_radio" name="{$groupName|escape:'html':'UTF-8'}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} />
<span>{$group_attribute|escape:'html':'UTF-8'}</span>
</li>
{/foreach}
</ul>
{/if}
</div> <!-- end attribute_list -->
</fieldset>
{/if}
{/foreach}
</div> <!-- end attributes -->
{/if}
</div> <!-- end product_attributes -->
<div class="box-cart-bottom">
<div{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE} class="unvisible"{/if}>
<p id="add_to_cart" class="buttons_bottom_block no-print">
<button type="submit" name="Submit" class="exclusive">
<span>{if $content_only && (isset($product->customization_required) && $product->customization_required)}{l s='Customize'}{else}{l s='Add to cart'}{/if}</span>
</button>
</p>
</div>
{if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}
</div> <!-- end box-cart-bottom -->
</div> <!-- end box-info-product -->
</form>
{/if}
</div> <!-- end pb-right-column-->
</div> <!-- end primary_block -->
{if !$content_only}
{if (isset($quantity_discounts) && count($quantity_discounts) > 0)}
<!-- quantity discount -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='Volume discounts'}</h3>
<div id="quantityDiscount">
<table class="std table-product-discounts">
<thead>
<tr>
<th>{l s='Quantity'}</th>
<th>{if $display_discount_price}{l s='Price'}{else}{l s='Discount'}{/if}</th>
<th>{l s='You Save'}</th>
</tr>
</thead>
<tbody>
{foreach from=$quantity_discounts item='quantity_discount' name='quantity_discounts'}
<tr id="quantityDiscount_{$quantity_discount.id_product_attribute}" class="quantityDiscount_{$quantity_discount.id_product_attribute}" data-discount-type="{$quantity_discount.reduction_type}" data-discount="{$quantity_discount.real_value|floatval}" data-discount-quantity="{$quantity_discount.quantity|intval}">
<td>
{$quantity_discount.quantity|intval}
</td>
<td>
{if $quantity_discount.price >= 0 || $quantity_discount.reduction_type == 'amount'}
{if $display_discount_price}
{convertPrice price=$productPrice-$quantity_discount.real_value|floatval}
{else}
{convertPrice price=$quantity_discount.real_value|floatval}
{/if}
{else}
{if $display_discount_price}
{convertPrice price = $productPrice-($productPrice*$quantity_discount.reduction)|floatval}
{else}
{$quantity_discount.real_value|floatval}%
{/if}
{/if}
</td>
<td>
<span>{l s='Up to'}</span>
{if $quantity_discount.price >= 0 || $quantity_discount.reduction_type == 'amount'}
{$discountPrice=$productPrice-$quantity_discount.real_value|floatval}
{else}
{$discountPrice=$productPrice-($productPrice*$quantity_discount.reduction)|floatval}
{/if}
{$discountPrice=$discountPrice*$quantity_discount.quantity}
{$qtyProductPrice = $productPrice*$quantity_discount.quantity}
{convertPrice price=$qtyProductPrice-$discountPrice}
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
</section>
{/if}
{if isset($features) && $features}
<!-- Data sheet -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='Data sheet'}</h3>
<table class="table-data-sheet">
{foreach from=$features item=feature}
<tr class="{cycle values="odd,even"}">
{if isset($feature.value)}
<td>{$feature.name|escape:'html':'UTF-8'}</td>
<td>{$feature.value|escape:'html':'UTF-8'}</td>
{/if}
</tr>
{/foreach}
</table>
</section>
<!--end Data sheet -->
{/if}
{if $product->description}
<!-- More info -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='More info'}</h3>{/if}
{if isset($product) && $product->description}
<!-- full description -->
<div class="rte">{$product->description}</div>
</section>
<!--end More info -->
{/if}
{if isset($packItems) && $packItems|#count > 0}
<section id="blockpack">
<h3 class="page-product-heading">{l s='Pack content'}</h3>
{include file="$tpl_dir./product-list.tpl" products=$packItems}
</section>
{/if}
<!--HOOK_PRODUCT_TAB -->
<section class="page-product-box">
{$HOOK_PRODUCT_TAB}
{if isset($HOOK_PRODUCT_TAB_CONTENT) && $HOOK_PRODUCT_TAB_CONTENT}{$HOOK_PRODUCT_TAB_CONTENT}{/if}
</section>
<!--end HOOK_PRODUCT_TAB -->
{if isset($accessories) && $accessories}
<!--Accessories -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='Accessories'}</h3>
<div class="block products_block accessories-block clearfix">
<div class="block_content">
<ul id="bxslider" class="bxslider clearfix">
{foreach from=$accessories item=accessory name=accessories_list}
{if ($accessory.allow_oosp || $accessory.quantity_all_versions > 0 || $accessory.quantity > 0) && $accessory.available_for_order && !isset($restricted_country_mode)}
{assign var='accessoryLink' value=$link->getProductLink($accessory.id_product, $accessory.link_rewrite, $accessory.category)}
<li class="item product-box 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="product_desc">
<a href="{$accessoryLink|escape:'html':'UTF-8'}" title="{$accessory.legend|escape:'html':'UTF-8'}" class="product-image product_image">
<img class="lazyOwl" src="{$link->getImageLink($accessory.link_rewrite, $accessory.id_image, 'home_default')|escape:'html':'UTF-8'}" alt="{$accessory.legend|escape:'html':'UTF-8'}" width="{$homeSize.width}" height="{$homeSize.height}"/>
</a>
<div class="block_description">
<a href="{$accessoryLink|escape:'html':'UTF-8'}" title="{l s='More'}" class="product_description">
{$accessory.description_short|strip_tags|truncate:25:'...'}
</a>
</div>
</div>
<div class="s_title_block">
<h5 itemprop="name" class="product-name">
<a href="{$accessoryLink|escape:'html':'UTF-8'}">
{$accessory.name|truncate:20:'...':true|escape:'html':'UTF-8'}
</a>
</h5>
{if $accessory.show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
<span class="price">
{if $priceDisplay != 1}
{displayWtPrice p=$accessory.price}{else}{displayWtPrice p=$accessory.price_tax_exc}
{/if}
</span>
{/if}
</div>
<div class="clearfix" style="margin-top:5px">
{if !$PS_CATALOG_MODE && ($accessory.allow_oosp || $accessory.quantity > 0)}
<div class="no-print">
<a class="exclusive button ajax_add_to_cart_button" href="{$link->getPageLink('cart', true, NULL, "qty=1&id_product={$accessory.id_product|intval}&token={$static_token}&add")|escape:'html':'UTF-8'}" data-id-product="{$accessory.id_product|intval}" title="{l s='Add to cart'}">
<span>{l s='Add to cart'}</span>
</a>
</div>
{/if}
</div>
</li>
{/if}
{/foreach}
</ul>
</div>
</div>
</section>
<!--end Accessories -->
{/if}
{if isset($HOOK_PRODUCT_FOOTER) && $HOOK_PRODUCT_FOOTER}{$HOOK_PRODUCT_FOOTER}{/if}
<!-- description & features -->
{if (isset($product) && $product->description) || (isset($features) && $features) || (isset($accessories) && $accessories) || (isset($HOOK_PRODUCT_TAB) && $HOOK_PRODUCT_TAB) || (isset($attachments) && $attachments) || isset($product) && $product->customizable}
{if isset($attachments) && $attachments}
<!--Download -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='Download'}</h3>
{foreach from=$attachments item=attachment name=attachements}
{if $smarty.foreach.attachements.iteration %3 == 1}<div class="row">{/if}
<div class="col-lg-4">
<h4>{$attachment.name|escape:'html':'UTF-8'}</h4>
<p class="text-muted">{$attachment.description|escape:'html':'UTF-8'}</p>
<a class="btn btn-default btn-block" href="{$link->getPageLink('attachment', true, NULL, "id_attachment={$attachment.id_attachment}")|escape:'html':'UTF-8'}">
<i class="icon-download"></i>
{l s="Download"} ({Tools::formatBytes($attachment.file_size, 2)})
</a>
<hr />
</div>
{if $smarty.foreach.attachements.iteration %3 == 0 || $smarty.foreach.attachements.last}</div>{/if}
{/foreach}
</section>
<!--end Download -->
{/if}
{if isset($product) && $product->customizable}
<!--Customization -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='Product customization'}</h3>
<!-- Customizable products -->
<form method="post" action="{$customizationFormTarget}" enctype="multipart/form-data" id="customizationForm" class="clearfix">
<p class="infoCustomizable">
{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>
{if $product->uploadable_files|intval}
<div class="customizableProductsFile">
<h5 class="product-heading-h5">{l s='Pictures'}</h5>
<ul id="uploadable_files" class="clearfix">
{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)|escape:'html':'UTF-8'}" 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 form-group">
<label class="customizationUploadBrowseDescription">
{if !empty($field.name)}
{$field.name}
{else}
{l s='Please select an image file from your computer'}
{/if}
{if $field.required}<sup>*</sup>{/if}
</label>
<input type="file" name="file{$field.id_customization_field}" id="img{$customizationField}" class="form-control customization_block_input {if isset($pictures.$key)}filled{/if}" />
</div>
</li>
{counter}
{/if}
{/foreach}
</ul>
</div>
{/if}
{if $product->text_fields|intval}
<div class="customizableProductsText">
<h5 class="product-heading-h5">{l s='Text'}</h5>
<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}">
<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 name="textField{$field.id_customization_field}" class="form-control customization_block_input" id="textField{$customizationField}" rows="3" cols="20">{strip}
{if isset($textFields.$key)}
{$textFields.$key|stripslashes}
{/if}
{/strip}</textarea>
</li>
{counter}
{/if}
{/foreach}
</ul>
</div>
{/if}
<p id="customizedDatas">
<input type="hidden" name="quantityBackup" id="quantityBackup" value="" />
<input type="hidden" name="submitCustomizedDatas" value="1" />
<button class="button btn btn-default button button-small" name="saveCustomization">
<span>{l s='Save'}</span>
</button>
<span id="ajax-loader" class="unvisible">
<img src="{$img_ps_dir}loader.gif" alt="loader" />
</span>
</p>
</form>
<p class="clear required"><sup>*</sup> {l s='required fields'}</p>
</section>
<!--end Customization -->
{/if}
{/if}
{/if}
ALSO SKIPPED SOME CODE FROM THE END AS IT IS TOO LONG
Radio button works. The problem in styles. More precisely - in the used classes.
Selector "div.radio span" should be replaced by "div.radio div.radio span" in the file themes\THEME\css\autoload\uniform.default.css in lines 12, 194 and 196.
12:
div.selector, div.selector span, div.checker span, div.radio span, div.uploader, div.uploader span.action, div.button, div.button span {
to
div.selector, div.selector span, div.checker span, div.radio div.radio span, div.uploader, div.uploader span.action, div.button, div.button span {
194:
div.radio span.checked {
background-position: -13px -243px; }
to
div.radio div.radio span.checked {
196:
div.radio input {
opacity: 0;
filter: alpha(opacity=0);
-moz-opacity: 0;
border: none;
background: none;
display: -moz-inline-box;
display: inline-block;
*display: inline;
zoom: 1;
text-align: center; }
to
div.radio div.radio input {

Prestashop list 2 products in 1 <li>

I have a slider that list 4 pr slide.
I want to add an extra row so it will show 2x4 products.
To make it happen I need to list 2 products pr.
I have really tried to fix it but there is something wrong with my code and how I count my products.
Please take a look:`{if isset($products)}
{include file="$tpl_dir./breadcrumb.tpl"}
{assign var=count value=0}
{foreach from=$products item=product name=products}
{if $count == 0}
<li style="position: relative;">
{/if}
<div id="ProductCon">
<div class="prodimage"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></div>
<h3>{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</h3>
</div>
{if $count == 1}
</li>
{/if}
{function name='counter2'}
{$count+1}
{/function}
{/foreach}
</ul>
</div>
<!-`
You can probably check the index value in the foreach loop. Here is an example how you could achieve it. This also checks if the list has odd number of products and closes the li tag for last product. Hope this helps
<ul>
{foreach from=$products item=product name=products}
{if $smarty.foreach.products.first == true || $smarty.foreach.products.index % 2 == 0}
<li style="position: relative;">
{/if}
<div id="ProductCon">
<div class="prodimage"><img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} /></div>
<h3>{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}</h3>
</div>
{if $smarty.foreach.products.index % 2 == 1 || $smarty.foreach.products.last == true}
</li>
{/if}
{/foreach}
</ul>
Smarty is not a (complete) programming language, it's a templating engine. Some things are purposely not permitted.
You should be using a counter which is a prop smarty offers in order for you to not have to use programming logic to achieve your goal.
For assignments you need to use a special Smarty function smarty assign.
For smarty counter this should work:
{counter start=0 skip=1 assign="count"}
{foreach from=$products item=product name=products}
{if $count == 0}
<li style="position: relative;">
{/if}
<div id="ProductCon">
<div class="prodimage">
<a href="{$product.link|escape:'htmlall':'UTF-8'}" class="product_img_link" title="{$product.name|escape:'htmlall':'UTF-8'}">
<img src="{$link->getImageLink($product.link_rewrite, $product.id_image, 'home')}" alt="{$product.legend|escape:'htmlall':'UTF-8'}" {if isset($homeSize)} width="{$homeSize.width}" height="{$homeSize.height}"{/if} />
</a>
</div>
<h3>
{$product.name|truncate:35:'...'|escape:'htmlall':'UTF-8'}
</h3>
</div>
{if $count == 1}
</li>
{/if}
{counter}
{/foreach}

Categories