Jump to content
Yotpo

[Free Module] Product Reviews - Dramatically increase your reviews

Recommended Posts

Hi MacMaster, one off topic question, why do you say " we are running 1.4.8 " instead of " I am running 1.4.8 "  ;)

 

I succeed to activate snippets on my side, PS 1.5.4.1, ticking snippets in module options, yotpo dashboard and adding that code to my theme/product.tpl :

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">

        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
</div>

Apparently under PS 1.5 ( your case, not tested by me ), you must also tick snippets option in module option and yotpo dashboard and add that code to controllers/ProductController.php :

if(count($this->errors) == 0) {
$yotpo = Module::getInstanceByName('yotpo');
$score = $yotpo->hookyotpoProductAverageScore(array('product_id' => $this->product->id));
$count = $yotpo->hookyotpoProductReviewCount(array('product_id' => $this->product->id));
self::$smarty->assign(array('yotpoProductAverageScore' => $score,
'yotpoProductReviewCount' => $count));
}

AND that code to your theme/product.tpl :

{$yotpoProductAverageScore}
{$yotpoProductReviewCount}

Please see that tutorial http://support.yotpo.com/entries/24922853-Enable-Rich-Snippets-for-Prestashop-Yotpo-Premium-only-

 

Yotpo changed snippets from the old data-vocabulary method to the google recommended schema.org method :)

Edited by KevinNash (see edit history)

Share this post


Link to post
Share on other sites

Hello KevinNash,

 

What would become of the world without your swift support replays!?

 

Many thanks!

 

  1. In the specific case the word "we" comes from first person plural, since "we" are several persons involved in the webshop concerned. However, even in general I prefer "we" to "he" when I talk of myself! ;-)
     
  2. We have ticked the box in Yotpo dashboard, however we do not find any tickbox in the module since the upgrade to Yotpo 1.4.2?
     
  3. We have indeed found the code that you refer to. However, what is unclear to us is if we just copy/past the code in the end of respective file which was our initial idee or if it need to be nestled in with the other code at a specific place in the file. When we got the following instruction from Yotpo support "In addition to adding the code to /ProductController.php you need to mark-up the rest of the product page ( product.tpl). I do recommend you contact your web-developer for this." we got a bit confused since it sounds like it require some major coding rather than straight forward copy/past.

     

What is your view on the above?

Edited by MacMaster (see edit history)

Share this post


Link to post
Share on other sites

You are welcome, thank you very much :)

 

Personnally, I do all my tests on a test shop, a sort of clone including yotpo ;)  That way I can give FTP access and PS back-office to differents supports teams. When it works I switch to the real shop, same thing when I test modules.

 

I think, the product.tpl code isn't a problem, when it works, you'll see the value of the ratings on the product page, for example you'll see 0 0 for a product with 0 review and 0 stars. So you can move the code to the bottom of the tpl file to be sure that numbers are at the bottom of the page.

 

For the php code, the risk is a blank page but you can revert at any time if this happens.

 

In my opinion, I think that is just copy/paste like for 1.5 version. Maybe you can ask Yotpo support for confirmation about that ?

 

You can eventually send them product.tpl and ProductController.php files and they will modify them for you ?

 

I suppose they did tests on 1.4 version so they can help you :)

Share this post


Link to post
Share on other sites

Hi KevinNash,

 

You seem to be right on the money! This is the current status:

 

  • We ticked snippets in yotpo dashboard, however we find no tickbox in module option so question is if we need to upload other version to active rich snippets.
  • Adding related code to ProductController.php always gives us a blank page. We tried few different places with same result
  • Adding related code to product.tpl, makes the type and property appear (ratingvalue and ratingcount) in structured data tester. However it does not find the values so it does not show any values.

so currently 1 step forward and 3/4 step back.........

Share this post


Link to post
Share on other sites

Hi MacMaster :)  For the new snippets way, you must be on 1.4.3 Yotpo module, you can get it there http://addons.prestashop.com/fr/social-commerce-facebook-modules-prestashop/7366-yotpo-social-reviews.html

 

Please uninstall the old one before beacause 1.4.3 is very different and add some old Yotpo database value can disturb the new version. So I advise to uninstall the old one and reinitialize the new 1.4.3 one.

 

The tickbox is present for me on this 1.4.3 version :

 

post-603134-0-24345800-1409941915_thumb.jpg

 

You should see it too ;)

 

Sorry to not be useful about the blank page, I don't have 1.4 version and my php skills are limited to copy-paste or something like this haha :D

Edited by KevinNash (see edit history)

Share this post


Link to post
Share on other sites

Me have black belt in copy past coding! :D

 

And it is safe to uninstall the old version. We will not lose any reviews or other things?

Edited by MacMaster (see edit history)

Share this post


Link to post
Share on other sites

No don't worry I did it several times :)

 

I experiment a lot with Yotpo that's why I try to help here ;)

 

Just don't fordet to copy your App key and Secret token, you'll need it with the new module and every reviews will be back ;)

  • Like 1

Share this post


Link to post
Share on other sites

The beauty of IT. First it progresses very very slowly forward and when you finally are almost there......it is all gone.

 

We unistalled the 1.4.2 completely and tried to install 1.4.3 and made the following findings:

  • 1.4.3 does not show in our PS 1.4.8 after installation so no reviews are visible.
  • The module is presented as 1.4.3 but still there is no tickbox for rich snippets in PS backoffice.

 

It is going to be a long night....with many whisky if needed

 

[update: The site is now restored to 1.4.2, which should be enough for rich snippets according to yotpo. Also the tickbox for rich snippets have now become visible als in PS backoffice. However the following issues remain:

  • Any attempt to add code to ProductController.php gives a blank page
  • We do not see the numbers you are talking about "I think, the product.tpl code isn't a problem, when it works, you'll see the value of the ratings on the product page, for example you'll see 0 0 for a product with 0 review and 0 stars. So you can move the code to the bottom of the tpl file to be sure that numbers are at the bottom of the page."]
Edited by MacMaster (see edit history)

Share this post


Link to post
Share on other sites

If you need an old module version, PM me you email, I have some, 1.4.2 included.

 

And you are right IT is exactly like you said <_<

Share this post


Link to post
Share on other sites

I guess 1.4 and 1.5 are totally different on this point :wacko:

 

Did you contact yotpo support ?

 

On 1.5, I did several tests, it was only good with last 1.4.3 module version.

 

There is this information in 1.4.3 changelog who isn't in 1.4.2 :

 

2014-07-17
----
1) Make rich snippets available via hooks for prestashop 1.5 and above.
2) Store in db only average score and reviews count instead of the entire rich snippet div.

 

1.5 and above so what about 1.4 ? Only support can help you at this point sorry :(

 

Here's a picture of the snippets numbers when I added the prodcut.tpl code, in that example, rating is 5 with 3 reviews :

 

post-603134-0-59416900-1409941818_thumb.jpg

 

Share this post


Link to post
Share on other sites

Yes exactly that seem to be essence of the problem. The numbers are not visible on page and when I test in google test tool it is able to detect the properties "rating value" and "rating count" but not the values for that product.

Share this post


Link to post
Share on other sites

Wow, you guys have been busy!

 

KevinNash, as usual you have been awesome and helpful -- thanks!

 

MacMaster -- did you end up contacting Support? Were they able to help you out?

Share this post


Link to post
Share on other sites

Hi Yotpo,

 

We have sent an email to the support and presented the current status, including the related files for reference.

Share this post


Link to post
Share on other sites

Hi, I am wondering if its possible to have an image shown on my prestashops home page , saying (click here to see all the reviews from our customers)

 

and then the image will link to a page which displays all the reviews left for all products purchased from my prestashop

Share this post


Link to post
Share on other sites

Hey Michael!

 

You can do this really easily with our Reviews Tab.

 

Just log into your Yotpo account and go to Tools > On Site > Reviews Tab.

 

If you need any help, please don't hesitate to contact our Support team at support@yotpo.com.

 

Thanks!

Share this post


Link to post
Share on other sites

Running ps1609 latst build as of today

 

Have installed yotopo using default bootstrap theme.

 

Am a premium user, and can only get the reviews tab on the left pane of the page.

 

1) Where is the full documentation / installation for PS1.6 for this module?

2) How do we export our current revies?

3) How to get the star rating on the right side of the picture (exactly how it is with the default comment module)

4) Reviews tab, instead of floating left, how do we get it in a tab view or in the footer of the product page 

 

Thanks

Share this post


Link to post
Share on other sites

Hey Ricky

 

You can find all of our Prestashop documentation, including installation manual here: http://support.yotpo.com/forums/21917328-Prestashop-Guides

 

If you need any help (or even want us to do the installation for you) please contact our awesome Support team at support@yotpo.com. They will also be able to help with exporting reviews and configuring the star rating and reviews tab.

 

As a Premium user, you get priority ticketing : )

 

Thanks, Ricky!

Share this post


Link to post
Share on other sites

Hello, everyone! Maybe someone can help. Installed this module, updated to the latest version. My Site in Russian. Translation into Russian is not fully. On the product page is all translated. Widget from the bookmarks are not translated into Russian. How to translate a widget?

post-548012-0-71749400-1411477705_thumb.png

post-548012-0-69262900-1411477723_thumb.png

Share this post


Link to post
Share on other sites

Just tried to add a customer email to the blacklist as they felt they were being pestered as he received multiple emails having purchaed multiple products. But that is now part of the premium only package? As is the ability to change the number of emails sent if a customer buys more than one product. Shame, but I understand.

So a couple of clarifications please

 

1) Can the customers unsubscribe from mail after purchase emails even if we are not in premium (using the link at the bottom of the email). If this is yes, it means that at least they can add themselves to the blacklist even if we can not do it for them

 

2) I know we cannot change it, but if a customer buys 10 items how many emails can they expect to receive?

Share this post


Link to post
Share on other sites

Hey Ron!

 

1) Yes, ALL emails Yotpo sends to shoppers have unsubscribe links (doesn't matter if you're on the free or Premium plan)

 

2) A customer who buys 10 items will get a maximum of 3 review-request emails (for the 3 most expensive items they purchased.) These emails will be spread out over 15 days.

  • Like 1

Share this post


Link to post
Share on other sites

Please help me,

 

I've added the code to the product.tpl 

 

The stars are working but i get 2 errors on price and availability

 

tem 
type: http://schema.org/product property:   aggregaterating:
Item 1
image: http://www.slaapzakken-discounter.nl/11-large_default/gabbag-slaapzak.jpg name: Gabbag slaapzak description: De Gabbag slaapzak is gemaakt van 100% katoen en heeft een hollow fibre vulling die zorgt voor een uitstekende warmte isolatie. availability: http://schema.org/InStock price: € 39,95
Fout: Page contains property "availability" which is not part of the schema.
Fout: Page contains property "price" which is not part of the schema.
Item 1
type: http://schema.org/aggregaterating property:   ratingvalue: 4.4 ratingcount: 5

This is the code i've been using. Please advise what i am doing wrong

 

{*
* 2007-2013 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2013 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}
 
{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 productBasePriceTaxExcluded = {$product->base_price} - {$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|floatval}{else}0{/if};
var specific_price = {if $product->specificPrice AND $product->specificPrice.price}{$product->specificPrice.price}{else}0{/if};
var product_specific_price = new Array();
{foreach from=$product->specificPrice key=key_specific_price' item='specific_price_value'}
product_specific_price['{$key_specific_price}] = '{$specific_price_value}';
{/foreach}
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 stock_management = {$stock_management|intval};
{if !isset($priceDisplayPrecision)}
{assign var='priceDisplayPrecision' value=2}
{/if}
{if !$priceDisplay || $priceDisplay == 2}
{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, $priceDisplayPrecision)}
{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
{elseif $priceDisplay == 1}
{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, $priceDisplayPrecision)}
{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
{/if}
 
 
var productPriceWithoutReduction = '{$productPriceWithoutReduction}';
var productPrice = '{$productPrice}';
 
// 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='This combination does not exist for this product. Please select another combination.' 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 be patient.' js=1}';
var fieldRequired = '{l s='Please fill in all the required fields before saving your customization.' js=1}';
 
{if isset($groups)}
// Combinations
{foreach from=$combinations key=idCombination item=combination}
var specific_price_combination = new Array();
var available_date = new Array();
specific_price_combination['reduction_percent'] = {if $combination.specific_price AND $combination.specific_price.reduction AND $combination.specific_price.reduction_type == 'percentage'}{$combination.specific_price.reduction*100}{else}0{/if};
specific_price_combination['reduction_price'] = {if $combination.specific_price AND $combination.specific_price.reduction AND $combination.specific_price.reduction_type == 'amount'}{$combination.specific_price.reduction}{else}0{/if};
specific_price_combination['price'] = {if $combination.specific_price AND $combination.specific_price.price}{$combination.specific_price.price}{else}0{/if};
specific_price_combination['reduction_type'] = '{if $combination.specific_price}{$combination.specific_price.reduction_type}{/if}';
specific_price_combination['id_product_attribute'] = {if $combination.specific_price}{$combination.specific_price.id_product_attribute|intval}{else}0{/if};
available_date['date'] = '{$combination.available_date}';
available_date['date_formatted'] = '{dateFormat date=$combination.available_date full=false}';
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}, available_date, specific_price_combination);
{/foreach}
{/if}
 
{if isset($attributesCombinations)}
// Combinations attributes informations
var attributesCombinations = new Array();
{foreach from=$attributesCombinations key=id item=aC}
tabInfos = new Array();
tabInfos['id_attribute'] = '{$aC.id_attribute|intval}';
tabInfos['attribute'] = '{$aC.attribute}';
tabInfos['group'] = '{$aC.group}';
tabInfos['id_attribute_group'] = '{$aC.id_attribute_group|intval}';
attributesCombinations.push(tabInfos);
{/foreach}
{/if}
//]]>
</script>
 
 
 
{include file="$tpl_dir./breadcrumb.tpl"}
 
 
 
<div id="primary_block" class="clearfix" itemscope itemtype="http://schema.org/Product">
   
   
                                                                       
{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|escape:'htmlall':'UTF-8'}', 0, '{$smarty.get.adtoken|escape:'htmlall':'UTF-8'}')"/>
<input type="submit" value="{l s='Back'}" class="exclusive" onclick="submitPublishProduct('{$base_dir}{$smarty.get.ad|escape:'htmlall':'UTF-8'}', 1, '{$smarty.get.adtoken|escape:'htmlall':'UTF-8'}')"/>
</p>
<p id="admin-action-result"></p>
</p>
</div>
{/if}
 
{if isset($confirmation) && $confirmation}
<p class="confirmation">
{$confirmation}
</p>
{/if}
 
<!-- right infos--> 
<div id="pb-right-column">
  
 
 
  <div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
 
        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
</div>
  
<!--Googl rich snippets catégorie-->  
<!--  <div class="breadCrumb ">
 
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="/" itemprop="url">
<span itemprop="title" style="display:none;">Accueil</span>
</a>
</div>
 
<div itemscope itemtype="http://data-vocabulary.org/Breadcrumb">
<a href="" itemprop="url">
<span itemprop="title" style="display:none;">{$product->category|escape:'htmlall':'UTF-8'}</span>
</a>
</div>
 
</div> -->
 
  
  
<!-- product img-->
<div id="image-block">
{if $have_image}
<span id="view_full_size">
<!--<img src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')}"{if $jqZoomEnabled} class="jqzoom"{/if} title="{$product->name|escape:'htmlall':'UTF-8'}" alt="{$product->name|escape:'htmlall':'UTF-8'}" id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}"/>-->
<img itemprop="image" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')}" {if $jqZoomEnabled}class="jqzoom" alt="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'thickbox_default')}"{else} title="{$product->name|escape:'htmlall':'UTF-8'}" alt="{$product->name|escape:'htmlall':'UTF-8'}" {/if} id="bigpic" width="{$largeSize.width}" height="{$largeSize.height}" />
 
 
 
        
        <span class="span_link">{l s='Maximize'}</span>
</span>
{else}
<span id="view_full_size">
<img src="{$img_prod_dir}{$lang_iso}-default-large_default.jpg" id="bigpic" alt="" title="{$product->name|escape:'htmlall':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}" />
<span class="span_link">{l s='Maximize'}</span>
</span>
{/if}
</div>
{if isset($images) && count($images) > 0}
<!-- thumbnails -->
<div id="views_block" class="clearfix {if isset($images) && count($images) < 2}hidden{/if}">
{if isset($images) && count($images) > 3}<span class="view_scroll_spacer"><a id="view_scroll_left" class="hidden" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">{l s='Previous'}</a></span>{/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}">
<a href="{$link->getImageLink($product->link_rewrite, $imageIds, 'thickbox_default')}" rel="other-views" class="thickbox{if $smarty.foreach.thumbnails.first} shown{/if}" title="{$image.legend|htmlspecialchars}">
<img id="thumb_{$image.id_image}" src="{$link->getImageLink($product->link_rewrite, $imageIds, 'medium_default')}" 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}<p class="resetimg clear"><span id="wrapResetImages" style="display: none;"><img src="{$img_dir}icon/cancel_11x13.gif" alt="{l s='Cancel'}" width="11" height="13"/> <a id="resetImages" href="{$link->getProductLink($product)}" onclick="$('span#wrapResetImages').hide('slow');return (false);">{l s='Display all pictures'}</a></span></p>{/if}
 
    
 
        <!-- usefull links-->
<ul id="usefull_link_block">
{if $HOOK_EXTRA_LEFT}{$HOOK_EXTRA_LEFT}{/if}
      
      
        
        
<!--<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
 
        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
</div>-->
 
 
 
        
        
        
 
      
      
<!--<li class="print"><a href="javascript:print();">{l s='Print'}</a></li>-->
{if $have_image && !$jqZoomEnabled}
{/if}
</ul>
    <br>    
                      
    
                                                                  
  
  
    
    <div class='yotpo QABottomLine'
data-appkey='ioUbc4m3DXvofBdMiuLXcIWzqeWCXl5nAd12uTQi'
data-product-id='{$yotpoProductId|intval}'></div>
  
  <br>
 
 
 
</div>
    
   
 
 
<!-- left infos-->
<div id="pb-left-column">
<!--<h1>{$product->name|escape:'htmlall':'UTF-8'}</h1>-->
    <h1><span itemprop="name">{$product->name|escape:'htmlall':'UTF-8'}</span></h1>
    
    
   <!-- <span itemprop="brand" itemscope itemtype="http://schema.org/Organization">
    <span itemprop="name">{$product->supplier_name}</span></span>-->
              
{if $product->description_short OR $packItems|@count > 0}
<div id="short_description_block">
    <!--<div id="short_description_content" class="rte align_justify" itemprop="description">{$product->description_short}-->
    
    
{if $product->description_short}
<div id="short_description_content" class="rte align_justify" itemprop="description">{$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}
{if $packItems|@count > 0}
<div class="short_description_pack">
<h3>{l s='Pack content'}</h3>
{foreach from=$packItems item=packItem}
<div class="pack_content">
{$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}</p>
</div>
{/foreach}
</div>
{/if}
</div>
{/if}
      
    
    
 
  
 
 
    
 
{*{if isset($colors) && $colors}
<!-- colors -->
<div id="color_picker">
<p>{l s='Pick a color:' js=1}</p>
<div class="clear"></div>
<ul id="color_to_pick_list" class="clearfix">
{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 class="clear"></div>
</div>
{/if}*}
 
{if ($product->show_price AND !isset($restricted_country_mode)) OR isset($groups) OR $product->reference OR (isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS)}
<!-- add to cart form-->
<!--<div itemscope itemtype="http://schema.org/Offer">-->
    <link itemprop="availability" href="http://schema.org/InStock"/>        
<form id="buy_block" {if $PS_CATALOG_MODE AND !isset($groups) AND $product->quantity > 0}class="hidden"{/if} action="{$link->getPageLink('cart')|escape:'html'}" 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="product_attributes">
{if isset($groups)}
<!-- attributes -->
<div id="attributes">
<div class="clear"></div>
{foreach from=$groups key=id_attribute_group item=group}
{if $group.attributes|@count}
<fieldset class="attribute_fieldset">
<label class="attribute_label" for="group_{$id_attribute_group|intval}">{$group.name|escape:'htmlall':'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="attribute_select" onchange="findCombination();getProductAttribute();">
{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>
{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}
<li{if $group.default == $id_attribute} class="selected"{/if}>
<a id="color_{$id_attribute|intval}" class="color_pick{if ($group.default == $id_attribute)} selected{/if}" style="background: {$colors.$id_attribute.value};" title="{$colors.$id_attribute.name}" onclick="colorPickerClick(this);getProductAttribute();">
{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}
<img src="{$img_col_dir}{$id_attribute}.jpg" alt="{$colors.$id_attribute.name}" width="20" height="20" /><br />
{/if}
</a>
</li>
{if ($group.default == $id_attribute)}
{$default_colorpicker = $id_attribute}
{/if}
{/foreach}
</ul>
<input type="hidden" class="color_pick_hidden" name="{$groupName}" value="{$default_colorpicker}" />
{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}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} onclick="findCombination();getProductAttribute();" />
<span>{$group_attribute|escape:'htmlall':'UTF-8'}</span>
</li>
{/foreach}
</ul>
{/if}
</div>
</fieldset>
{/if}
{/foreach}
</div>
{/if}
<p id="product_reference" {if isset($groups) OR !$product->reference}style="display: none;"{/if}>
<label>{l s='Reference:'} </label>
<span class="editable">{$product->reference|escape:'htmlall':'UTF-8'}</span>
</p>
            
              <!-- Out of stock hook -->
<div id="oosHook"{if $product->quantity > 0} style="display: none;"{/if}>
{$HOOK_PRODUCT_OOS}
</div>
 
<!-- 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}>
<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}" size="2" maxlength="3" {if $product->minimal_quantity > 1}onkeyup="checkMinimalQuantity({$product->minimal_quantity});"{/if} />
</p>
 
<!-- minimal quantity wanted -->
<p id="minimal_quantity_wanted_p"{if $product->minimal_quantity <= 1 OR !$product->available_for_order OR $PS_CATALOG_MODE} style="display: none;"{/if}>
{l s='This product is not sold individually. You must select at least'} <b id="minimal_quantity_label">{$product->minimal_quantity}</b> {l s='quantity for this product.'}
</p>
{if $product->minimal_quantity > 1}
<script type="text/javascript">
checkMinimalQuantity();
</script>
{/if}
 
<!-- 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>
<p id="availability_date"{if ($product->quantity > 0) OR !$product->available_for_order OR $PS_CATALOG_MODE OR !isset($product->available_date) OR $product->available_date < $smarty.now|date_format:'%Y-%m-%d'} style="display: none;"{/if}>
<span id="availability_date_label">{l s='Availability date:'}</span>
<span id="availability_date_value">{dateFormat date=$product->available_date full=false}</span>
</p>
<!-- 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}
 
<!-- Out of stock hook -->
<div id="oosHook"{if $product->quantity > 0} style="display: none;"{/if}>
{$HOOK_PRODUCT_OOS}
</div>
 
<p class="warning_inline" 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>
</div>
 
<div class="content_prices clearfix">
<!-- prices -->
{if $product->show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
 
{if $product->online_only}
<p class="online_only">{l s='Online only'}</p>
{/if}
 
      
      
      
      {if $product->specificPrice AND $product->specificPrice.reduction && $product->specificPrice.reduction > 0}
      <!--Prix initial : <p id="old_price"><span class="bold">-->
{if $priceDisplay >= 0 && $priceDisplay <= 2}
{if $productPriceWithoutReduction > $productPrice}
            <!--<span id="old_price_display">{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}
{/if}
</span>
<!-- </p>-->
      <!--Ma réduction :--> 
      <!--<p id="reduction_percent" {if !$product->specificPrice OR $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if}><span id="reduction_percent_display">{if $product->specificPrice AND $product->specificPrice.reduction_type == 'percentage'}-{$product->specificPrice.reduction*100}%{/if}</span></p>-->  
        
{/if}
      
      
      
      
 
      
      
<div class="price">
<p class="our_price_display">
{if $priceDisplay >= 0 && $priceDisplay <= 2}
    <span itemprop="price" id="our_price_display">{convertPrice price=$productPrice}</span>
    <!--{if $tax_enabled  && ((isset($display_tax_label) && $display_tax_label == 1) OR !isset($display_tax_label))}
        {if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}
    {/if}-->
{/if}
</p>
 
 
 
 
 
 
 
        
{if $product->on_sale}  
<!--<img src="{$img_dir}onsale_{$lang_iso}.gif" alt="{l s='On sale'}" class="on_sale_img"/>-->
<!--<span class="on_sale">{l s='On sale!'}</span>-->
{elseif $product->specificPrice AND $product->specificPrice.reduction AND $productPriceWithoutReduction > $productPrice}
<span class="discount">{l s='Reduced price!'}</span>
{/if}
{if $priceDisplay == 2}
<br />
<span id="pretaxe_price"><span id="pretaxe_price_display">{convertPrice price=$product->getPrice(false, $smarty.const.NULL)}</span> {l s='tax excl.'}</span>
{/if}
</div>
<!--<p id="reduction_percent" {if !$product->specificPrice OR $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if}><span id="reduction_percent_display">{if $product->specificPrice AND $product->specificPrice.reduction_type == 'percentage'}-{$product->specificPrice.reduction*100}%{/if}</span></p>-->
<p id="reduction_amount" {if !$product->specificPrice OR $product->specificPrice.reduction_type != 'amount' || $product->specificPrice.reduction|intval ==0} style="display:none"{/if}>
<span id="reduction_amount_display">
{if $product->specificPrice AND $product->specificPrice.reduction_type == 'amount' AND $product->specificPrice.reduction|intval !=0}
-{convertPrice price=$productPriceWithoutReduction-$productPrice|floatval}
{/if}
</span>
</p>
 
 
 
 
 
 
{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>
<br class="clear" />
{/if}
{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}
{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:'htmlall':'UTF-8'}</p>
{/if}
{*close if for show price*}
{/if}
 
{if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}
 
<div class="clear"></div>
</div>
</form>
{/if}
{if isset($HOOK_EXTRA_RIGHT) && $HOOK_EXTRA_RIGHT}{$HOOK_EXTRA_RIGHT}{/if}
</div>
</div>
 
{if (isset($quantity_discounts) && count($quantity_discounts) > 0)}
<!-- quantity discount -->
<ul class="idTabs clearfix">
<li><a href="#discount" style="cursor: pointer" class="selected">{l s='Sliding scale pricing'}</a></li>
</ul>
<div id="quantityDiscount">
<table class="std">
<thead>
<tr>
<th>{l s='Product'}</th>
<th>{l s='From (qty)'}</th>
<th>{if Configuration::get('PS_DISPLAY_DISCOUNT_PRICE')}{l s='Price'}{else}{l s='Discount'}{/if}</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}">
<td>
{if (isset($quantity_discount.attributes) && ($quantity_discount.attributes))}
{$product->getProductName($quantity_discount.id_product, $quantity_discount.id_product_attribute)}
{else}
{$product->getProductName($quantity_discount.id_product)}
{/if}
</td>
<td>{$quantity_discount.quantity|intval}</td>
<td>
{if $quantity_discount.price >= 0 OR $quantity_discount.reduction_type == 'amount'}
{if Configuration::get('PS_DISPLAY_DISCOUNT_PRICE')}
{convertPrice price=$productPrice-$quantity_discount.real_value|floatval}
{else}
-{convertPrice price=$quantity_discount.real_value|floatval}
{/if}
{else}
{if Configuration::get('PS_DISPLAY_DISCOUNT_PRICE')}
{convertPrice price = $productPrice-($productPrice*$quantity_discount.reduction)|floatval}
{else}
-{$quantity_discount.real_value|floatval}%
{/if}
{/if}
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
{/if}
{if isset($HOOK_PRODUCT_FOOTER) && $HOOK_PRODUCT_FOOTER}{$HOOK_PRODUCT_FOOTER}{/if}
 
<!-- description and 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}
<div id="more_info_block" class="clear">
<ul id="more_info_tabs" class="idTabs idTabsShort clearfix">
{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}
{if isset($product) && $product->customizable}<li><a href="#idTab10">{l s='Product customization'}</a></li>{/if}
{$HOOK_PRODUCT_TAB}
</ul>
<div id="more_info_sheets" class="sheets align_justify">
{if isset($product) && $product->description}
<!-- full description -->
<div id="idTab1" class="rte">{$product->description}</div>
{/if}
{if isset($features) && $features}
<!-- product's features -->
<ul id="idTab2" class="bullet">
{foreach from=$features item=feature}
            {if isset($feature.value)}
   <li><span>{$feature.name|escape:'htmlall':'UTF-8'}</span> {$feature.value|escape:'htmlall':'UTF-8'}</li>
            {/if}
{/foreach}
</ul>
{/if}
{if isset($attachments) && $attachments}
<ul id="idTab9" class="bullet">
{foreach from=$attachments item=attachment}
<li><a href="{$link->getPageLink('attachment', true, NULL, "id_attachment={$attachment.id_attachment}")|escape:'html'}">{$attachment.name|escape:'htmlall':'UTF-8'}</a><br />{$attachment.description|escape:'htmlall':'UTF-8'}</li>
{/foreach}
</ul>
{/if}
{if isset($accessories) AND $accessories}
<!-- accessories -->
<div id="idTab4" class="bullet">
<div class="block products_block accessories_block clearfix">
<div class="block_content">
<ul>
{foreach from=$accessories item=accessory name=accessories_list}
{if ($accessory.allow_oosp || $accessory.quantity_all_versions > 0 || $accessory.quantity > 0) AND $accessory.available_for_order AND !isset($restricted_country_mode)}
{assign var='accessoryLink' value=$link->getProductLink($accessory.id_product, $accessory.link_rewrite, $accessory.category)}
<li class="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">
<p class="s_title_block">
<a href="{$accessoryLink|escape:'htmlall':'UTF-8'}">{$accessory.name|escape:'htmlall':'UTF-8'}</a>
{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}
</p>
<div class="product_desc">
<a href="{$accessoryLink|escape:'htmlall':'UTF-8'}" title="{$accessory.legend|escape:'htmlall':'UTF-8'}" class="product_image"><img src="{$link->getImageLink($accessory.link_rewrite, $accessory.id_image, 'medium_default')|escape:'html'}" alt="{$accessory.legend|escape:'htmlall':'UTF-8'}" width="{$mediumSize.width}" height="{$mediumSize.height}" /></a>
<div class="block_description">
<a href="{$accessoryLink|escape:'htmlall':'UTF-8'}" title="{l s='More'}" class="product_description">{$accessory.description_short|strip_tags|truncate:400:'...'}</a>
</div>
<div class="clear_product_desc"> </div>
</div>
 
<p class="clearfix" style="margin-top:5px">
<a class="button" href="{$accessoryLink|escape:'htmlall':'UTF-8'}" title="{l s='View'}">{l s='View'}</a>
{if !$PS_CATALOG_MODE && ($accessory.allow_oosp || $accessory.quantity > 0)}
<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'}" rel=nofollow"ajax_id_product_{$accessory.id_product|intval}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>
{/if}
</p>
 
</li>
{/if}
{/foreach}
</ul>
</div>
</div>
</div>
{/if}
 
<!-- Customizable products -->
{if isset($product) && $product->customizable}
<div id="idTab10" class="bullet customization_block">
<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">
<h3>{l s='Pictures'}</h3>
<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'}" 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">
<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="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">
<h3>{l s='Text'}</h3>
<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}" 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>
</div>
{/if}
<p id="customizedDatas">
<input type="hidden" name="quantityBackup" id="quantityBackup" value="" />
<input type="hidden" name="submitCustomizedDatas" value="1" />
<input type="button" class="button" value="{l s='Save'}" onclick="javascript:saveCustomization()" />
<span id="ajax-loader" style="display:none"><img src="{$img_ps_dir}loader.gif" alt="loader" /></span>
</p>
</form>
<p class="clear required"><sup>*</sup> {l s='required fields'}</p>
</div>
{/if}
 
{if isset($HOOK_PRODUCT_TAB_CONTENT) && $HOOK_PRODUCT_TAB_CONTENT}{$HOOK_PRODUCT_TAB_CONTENT}{/if}
</div>
</div>
{/if}
{if isset($packItems) && $packItems|@count > 0}
<div id="blockpack">
{l s='Pack content'}
{include file="$tpl_dir./product-list.tpl" products=$packItems}
</div>
{/if}
{/if}

Share this post


Link to post
Share on other sites

Hi,

 

Yotpo automatic emails was working before a dns reset of my dedicated cloud VPS, i've access to all dns settings in the manager, what I need to change ? I sent a message to the yotpo support and he says that it's a DNS problem but i can resolve it but I don't know what settings i had before the OVH reset of my dns :/

 

please help it's important and maybe a little thing to add in but automatic emails can't be sent :/

 

thanks in advance

Share this post


Link to post
Share on other sites

Okay so....

 

My host provider say all dns is okay and want to know what yotpo NEEDS but i don't know how much time yotpo will answer me and i don't know if they can help.

 

Can someone please have email after purchase working send me screenshots of DNS zones of domain especially if hosted with OVH

 

thanks in advance, i'm losing faith.

Share this post


Link to post
Share on other sites

Okay so....

 

My host provider say all dns is okay and want to know what yotpo NEEDS but i don't know how much time yotpo will answer me and i don't know if they can help.

 

Can someone please have email after purchase working send me screenshots of DNS zones of domain especially if hosted with OVH

 

thanks in advance, i'm losing faith.

You may be better in direct contact with Yotpo support on their website. They are usually very good

  • Like 1

Share this post


Link to post
Share on other sites

Major bug today for Yotpo users !

 

If you have Yotpo on your website ( at least on PS 1.5 version ) :

 

Customers can't register anymore ! They got an empty page after entering their email !

 

If you disable Yotpo, everything is back to normal :blink:

Edited by KevinNash (see edit history)

Share this post


Link to post
Share on other sites

Damn ! What happened to them !

 

On mine it only block new registration, I was lucky a customer told me that on livechat !

 

I just disabled Yotpo it and opened a support ticket :(

Share this post


Link to post
Share on other sites

Hey guys, 

 

We experienced a temporary & unexpected interruption of service but we're back up now.  We're investigating the root cause and I will get back to you with a full report as soon as I have all the info (probably tomorrow).

 

We're sincerely sorry for any inconvenience and thanks for your patience.

Share this post


Link to post
Share on other sites

Hey guys,

 

Sorry I am coming back to you late. Here is the incident report from our CTO.

 

Root Cause
The root cause was the extension of a JavaScript function that interfered with correct behavior of jQuery basic functionality. Yotpo QA and integration tests failed to catch the issue before deployment.

Applied Fix
We rolled back to the previous working code of the widget.js library, after confirming backward compatibility with other projects that were deployed on the same deployment.

Security Measures Taken Mitigate and Prevent Further Incidents

After a long debrief with all of our developers and QA engineers, we have developed with following measures to be applied to future deployment of new code:
 

  • We are adding integration tests to the first development testing phase of our deployment pipeline to ensure correct integration of JavaScript code with all common JavaScript libraries.

 

  • We are increasing the amount and frequency of testing on simulated live store environments.

 

  • We are redefining our Javascript coding standards, and limiting our work scope by not extending core functionality of other Javascript libraries.

 

  • We are implementing an extended version of our roll-out mechanism to be used when deploying sensitive code.

 

If you have any questions please don't hesitate to PM me!

Share this post


Link to post
Share on other sites

Hello Talia :)

 

The bug was huge, but a bug can happen of course ;)

 

By the way, Yotpo reaction and speed to put everything on track again was just really impressive :D

 

Congratulations to all the team, mistakes can happen but we can see if a company is reliable by seing how they handle them.

 

We clearly saw that with Yotpo :)

  • Like 1

Share this post


Link to post
Share on other sites

Is it possible to display the review ratings on the right of the product image instead of underneath?

Share this post


Link to post
Share on other sites

Hi

I have some questions about Yotpo. I tried to contact with the yotpo team thru their site but i had no answer.

 

The first i notice is that the (test at least) emails are going to junk.

To be more specific... i tried with my email ...@hotmail.com and i see it going to junk.

So my first question is what will happen when i send emails to my real customers, will they got them normally to their inputs or to the junk?

 

The second i saw was this... the yotpo says everywhere about free trial but to have the free trial you have to give your card details.

I have no objection to pay for a module that is meeting my needs, also i have no objection to pay in order to see it working and then to decide if i will every month for this but at least in my language (Greek) when we are saying free trial we mean you do not have to pay... for play :)

I hope, something i misunderstood as English are not my native language.

 

Thanks in advance

Mary

  • Like 1

Share this post


Link to post
Share on other sites

Is it possible to display the review ratings on the right of the product image instead of underneath?

 

Hi, this is called the bottomline function, in the module option, you can choose left or right ;)

 

You can also choose custom, in that case you will have a code to add to your product.tpl and that way place the ratings exactly where you want :)

 

 

To be more specific... i tried with my email ...@hotmail.com and i see it going to junk.

So my first question is what will happen when i send emails to my real customers, will they got them normally to their inputs or to the junk?

 

The second i saw was this... the yotpo says everywhere about free trial but to have the free trial you have to give your card details.

 

 

Junk is not related to Yotpo but by the sent email address used, the way the emails clients decide to add an email to junk or spam is a mystery ;) The best is to use your shop email, not a hotmail or generic email provider.

 

Yotpo is totally free, no credit card needed, unless you choose to go to the awesome premium functions :)

Just register there https://my.yotpo.com/register install the free module http://addons.prestashop.com/fr/social-commerce-facebook-modules-prestashop/7366-yotpo-social-reviews.html and you are done :)

 

By the way, I don't understand, you say that you did emails test so you must already be registered at Yotpo ;)

Edited by KevinNash (see edit history)

Share this post


Link to post
Share on other sites

Hi

 

1)i added the stars for my product list.but it doesnt look like default review stars. how do i fix it?

 

 

http://clip2net.com/s/39wCVy7

 

 

2) its showing yotpo reviews on bottom of other tabs content,also tab isnt looking fine.

 

http://www.shop4play.com/index.php?id_product=1&controller=product&id_lang=1#idTab-yotpo

 

 

 

Regards

Ps3z

Edited by ps3z (see edit history)

Share this post


Link to post
Share on other sites

Hi,

I installed the Rich Snippets on my website www.impression-rollup.fr 

It is a PrestaShop 1.5.6.1 version with the last YOTPO 1.4.3 plug in.

 

I have problem with the yotpoProductAverageScore.

It is ok in my database, but i don't find this information on my product page, nor on google webmaster tools.

I don't have any problem with the yotpoProductReviewCount !!! it appears well, and google considered it without problem!!!

 

Any solution for me?

Share this post


Link to post
Share on other sites

Hi,

I installed the Rich Snippets on my website www.impression-rollup.fr 

It is a PrestaShop 1.5.6.1 version with the last YOTPO 1.4.3 plug in.

 

I have problem with the yotpoProductAverageScore.

It is ok in my database, but i don't find this information on my product page, nor on google webmaster tools.

I don't have any problem with the yotpoProductReviewCount !!! it appears well, and google considered it without problem!!!

 

Any solution for me?

Ok after reading this topic, I found the solution!!

Reinitialized the plugin!!!

It works now!

 

Thanks

Share this post


Link to post
Share on other sites

Right :) I remember posted that solution a while ago ;)

 

Sometimes it tooks time to see the snippets to appear on Google search results, a few days or weeks, it depends of Google ;)

Edited by KevinNash (see edit history)

Share this post


Link to post
Share on other sites

Hi MacMaster, one off topic question, why do you say " we are running 1.4.8 " instead of " I am running 1.4.8 "  ;)

 

I succeed to activate snippets on my side, PS 1.5.4.1, ticking snippets in module options, yotpo dashboard and adding that code to my theme/product.tpl :

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">

        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
</div>

Apparently under PS 1.5 ( your case, not tested by me ), you must also tick snippets option in module option and yotpo dashboard and add that code to controllers/ProductController.php :

if(count($this->errors) == 0) {
$yotpo = Module::getInstanceByName('yotpo');
$score = $yotpo->hookyotpoProductAverageScore(array('product_id' => $this->product->id));
$count = $yotpo->hookyotpoProductReviewCount(array('product_id' => $this->product->id));
self::$smarty->assign(array('yotpoProductAverageScore' => $score,
'yotpoProductReviewCount' => $count));
}

AND that code to your theme/product.tpl :

{$yotpoProductAverageScore}
{$yotpoProductReviewCount}

Please see that tutorial http://support.yotpo.com/entries/24922853-Enable-Rich-Snippets-for-Prestashop-Yotpo-Premium-only-

 

Yotpo changed snippets from the old data-vocabulary method to the google recommended schema.org method :)

 

hi kevin

 

im using yotpo by longtime. but rich snippets doesnt show on google. i have to add code to product.tpl ? tutorial is weak on yotpo page.

 

presta ver: 1.6.0.9

{*
* 2007-2014 PrestaShop
*
* NOTICE OF LICENSE
*
* This source file is subject to the Academic Free License (AFL 3.0)
* that is bundled with this package in the file LICENSE.txt.
* It is also available through the world-wide-web at this URL:
* http://opensource.org/licenses/afl-3.0.php
* If you did not receive a copy of the license and are unable to
* obtain it through the world-wide-web, please send an email
* to license@prestashop.com so we can send you a copy immediately.
*
* DISCLAIMER
*
* Do not edit or add to this file if you wish to upgrade PrestaShop to newer
* versions in the future. If you wish to customize PrestaShop for your
* needs please refer to http://www.prestashop.com for more information.
*
*  @author PrestaShop SA <contact@prestashop.com>
*  @copyright  2007-2014 PrestaShop SA
*  @license    http://opensource.org/licenses/afl-3.0.php  Academic Free License (AFL 3.0)
*  International Registered Trademark & Property of PrestaShop SA
*}
{include file="$tpl_dir./errors.tpl"}
{if $errors|@count == 0}
	{if !isset($priceDisplayPrecision)}
		{assign var='priceDisplayPrecision' value=2}
	{/if}
	{if !$priceDisplay || $priceDisplay == 2}
		{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL, $priceDisplayPrecision)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
	{elseif $priceDisplay == 1}
		{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL, $priceDisplayPrecision)}
		{assign var='productPriceWithoutReduction' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
	{/if}
	<div class="primary_block row" itemscope itemtype="http://schema.org/Product">
		{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'}" name="publish_button" class="exclusive" />
					<input type="submit" value="{l s='Back'}" name="lnk_view" class="exclusive" />
				</p>
				<p id="admin-action-result"></p>
			</div>
<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">

        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
</div>

		{/if}
		{if isset($confirmation) && $confirmation}
			<p class="confirmation">
				{$confirmation}
			</p>
		{/if}
		<!-- left infos-->  
		<div class="pb-left-column col-xs-12 col-sm-7 col-md-7">
			<!-- product img-->        
			<div id="image-block" class="clearfix">				
				{if $have_image}
					<span id="view_full_size" {if (count($images) != 1)} class="hide-m"{/if}>
						{if $jqZoomEnabled && $have_image && !$content_only}
							<a class="jqzoom" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" rel="gal1" href="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'thickbox_default')|escape:'html':'UTF-8'}" itemprop="url">
								<img itemprop="image" class="mainimage" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')|escape:'html':'UTF-8'}" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" alt="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}"/>
							</a>
						{else}
							<img id="bigpic" class="mainimage" itemprop="image" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'large_default')|escape:'html':'UTF-8'}" title="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" alt="{if !empty($cover.legend)}{$cover.legend|escape:'html':'UTF-8'}{else}{$product->name|escape:'html':'UTF-8'}{/if}" width="{$largeSize.width}" height="{$largeSize.height}"/>
							{if !$content_only}
								<span class="span_link no-print">{l s='View larger'}</span>
							{/if}
						{/if}
					</span>
				{else}
					<span id="view_full_size"{if (count($images) != 1)} class="hide-m"{/if}>
						<img itemprop="image" itemprop="image" src="{$img_prod_dir}{$lang_iso}-default-large_default.jpg" id="bigpic" alt="" title="{$product->name|escape:'html':'UTF-8'}" width="{$largeSize.width}" height="{$largeSize.height}"/>
						{if !$content_only}
							<span class="span_link">
								{l s='View larger'}
							</span>
						{/if}
					</span>
				{/if}
				<div class="product-labels">
					{if $product->new}
						<span class="new-box">
							<span class="new-label">{l s='New'}</span>
						</span>
					{/if}
					{if $product->on_sale}
						<span class="sale-box no-print">
							<span class="sale-label">{l s='Sale!'}</span>
						</span>
					{elseif $product->specificPrice && $product->specificPrice.reduction && $productPriceWithoutReduction > $productPrice}
						<span class="discount">{l s='Reduced price!'}</span>
					{/if}
					{if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
					<p id="reduction_percent" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if}>
						<span id="reduction_percent_display">
							{if $product->specificPrice && $product->specificPrice.reduction_type == 'percentage'}-{$product->specificPrice.reduction*100}%{/if}
						</span>
					</p>
					{/if}
				</div>
				<div class="content_prices clearfix{if (!$product->specificPrice || !$product->specificPrice.reduction) && $group_reduction == 0} no-old-price{else} old-price-exist{/if}">
					{if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
						<!-- prices -->
						<div class="price">
							<p class="our_price_display" itemprop="offers" itemscope itemtype="http://schema.org/Offer">
								{if $product->quantity > 0}<link itemprop="availability" href="http://schema.org/InStock"/>{/if}
								{if $priceDisplay >= 0 && $priceDisplay <= 2}
									<span id="our_price_display" 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}" />
								{/if}
							</p>							
							<p id="old_price"{if (!$product->specificPrice || !$product->specificPrice.reduction) && $group_reduction == 0} class="hidden"{/if}>
								{if $priceDisplay >= 0 && $priceDisplay <= 2}
									<span id="old_price_display">{if $productPriceWithoutReduction > $productPrice}{convertPrice price=$productPriceWithoutReduction}{/if}</span>
									<!-- {if $tax_enabled && $display_tax_label == 1}{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}{/if} -->
								{/if}
							</p>
							{if $priceDisplay == 2}
								<br />
								<span id="pretaxe_price">
									<span id="pretaxe_price_display">{convertPrice price=$product->getPrice(false, $smarty.const.NULL)}</span>
									{l s='tax excl.'}
								</span>
							{/if}
						</div> <!-- end prices -->
						<p id="reduction_amount" {if !$product->specificPrice || $product->specificPrice.reduction_type != 'amount' || $product->specificPrice.reduction|floatval ==0} style="display:none"{/if}>
							<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>
						</p>
						{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='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 && $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>
						{/if}
					{/if} {*close if for show price*}
					<div class="clear"></div>
				</div> <!-- end content_prices -->
				{if ($cookie->ts_countdown == 1)}
			        {assign var=to value="-"|explode:$product->specificPrice.to} 
			        {if isset($product->specificPrice.to) && ($to[0] != "0000")}
			        	<div class="countdown" title="{l s='To the end of this offer'}"></div>
			        	<script>
			        	$(document).ready(function(){
			        		$(function() {
							    $('.countdown').countdown({
							        date: "{$product->specificPrice.to|replace:' ':'T'}",
							          render: function(data) {
							            $(this.el).html("<div>" + this.leadingZeros(data.days, 2) + " <span>{l s='Days'}</span></div><div>" + this.leadingZeros(data.hours, 2) + " <span>{l s='Hours'}</span></div><div>" + this.leadingZeros(data.min, 2) + " <span>{l s='Min'}</span></div><div>" + this.leadingZeros(data.sec, 2) + " <span>{l s='Sec'}</span></div>");
							            $(this.el).attr('title', this.leadingZeros(data.days, 2)+" {l s='Days'} {l s='and'} "+this.leadingZeros(data.hours, 2)+" {l s='Hours'} {l s='to the end of this offer'}");
							          }
							    });
							});
			        	});
			        	</script>			        	
			        {/if}
			        {/if}
			</div> <!-- end image-block -->
			{if isset($images) && count($images) > 0}
				<!-- thumbnails -->
				<div id="views_block" class="clearfix num-{count($images)}">
					{if isset($images) && count($images) > 0}
						<span class="view_scroll_spacer product-scroll-arrow">
							<a id="view_scroll_left" class="button" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">
								{l s='Previous'}
							</a>
						</span>
					{/if}
					<div id="thumbs_list" {if isset($images) && count($images) < 2}class="hidden"{/if}>
						<ul id="thumbs_list_frame">
						{if isset($images)}
							{foreach from=$images item=image name=thumbnails}
								{assign var=imageIds value="`$product->id`-`$image.id_image`"}
								{if !empty($image.legend)}
									{assign var=imageTitle value=$image.legend|escape:'html':'UTF-8'}
								{else}
									{assign var=imageTitle value=$product->name|escape:'html':'UTF-8'}
								{/if}
								<li id="thumbnail_{$image.id_image}"{if $smarty.foreach.thumbnails.last} class="last"{/if}>
									<a 
										{if $jqZoomEnabled && $have_image && !$content_only}
											href="javascript:void(0);"
											rel="{literal}[spam-filter]/literal}gallery: 'gal1', smallimage: '{$link->getImageLink($product->link_rewrite, $imageIds, 'large_default')|escape:'html':'UTF-8'}',largeimage: '{$link->getImageLink($product->link_rewrite, $imageIds, 'thickbox_default')|escape:'html':'UTF-8'}'{literal[spam-filter]{/literal}"
										{else}
											href="{$link->getImageLink($product->link_rewrite, $imageIds, 'thickbox_default')|escape:'html':'UTF-8'}"
											data-fancybox-group="other-views"
											class="fancybox{if $image.id_image == $cover.id_image} shown{/if}"
										{/if}
										title="{$imageTitle}">
										<img class="img-responsive" id="thumb_{$image.id_image}" src="{$link->getImageLink($product->link_rewrite, $imageIds, 'large_default')|escape:'html':'UTF-8'}" alt="{$imageTitle}" title="{$imageTitle}" height="{$cartSize.height}" width="{$cartSize.width}" itemprop="image" />
									</a>
								</li>
							{/foreach}
						{/if}
						</ul>
					</div> <!-- end thumbs_list -->
					{if isset($images) && count($images) > 0}
						<a id="view_scroll_right" class="button product-scroll-arrow" title="{l s='Other views'}" href="javascript:{ldelim}{rdelim}">
							{l s='Next'}
						</a>
					{/if}
				</div> <!-- end views-block -->
				<!-- end thumbnails -->
			{/if}
			{if isset($images) && count($images) > 1}
				<p class="resetimg clear no-print">
					<span id="wrapResetImages" style="display: none;">
						<a href="{$link->getProductLink($product)|escape:'html':'UTF-8'}" name="resetImages">
							<i class="icon-repeat"></i>
							{l s='Display all pictures'}
						</a>
					</span>
				</p>
			{/if}

		</div> <!-- end pb-left-column -->
		<!-- end left infos--> 
		<!-- center infos -->		
		<!-- end center infos-->
		<!-- pb-right-column-->
		<div class="pb-right-column col-xs-12 col-sm-5 col-md-5 {if (isset($theme_settings)) && ($theme_settings.product_rating == 0)}hide_stars{/if}">
			<div class="pb-center-column">
			{if $product->online_only}
				<p class="online_only">{l s='Online only'}</p>
			{/if}
	
			<h1 itemprop="name">{$product->name|escape:'html':'UTF-8'}</h1>
			{if isset($HOOK_EXTRA_RIGHT) && $HOOK_EXTRA_RIGHT}{$HOOK_EXTRA_RIGHT}{/if}
			<p id="product_reference"{if empty($product->reference) || !$product->reference} style="display: none;"{/if}>
				<label>{l s='Model'}:</label>
				<span class="editable" itemprop="sku">{if !isset($groups)}{$product->reference|escape:'html':'UTF-8'}{/if}</span>
			</p>
			{capture name=condition}
				{if $product->condition == 'new'}{l s='New'}
				{elseif $product->condition == 'used'}{l s='Used'}
				{elseif $product->condition == 'refurbished'}{l s='Refurbished'}
				{/if}
			{/capture}
			<p id="product_condition"{if !$product->condition} style="display: none;"{/if}>
				<label>{l s='Condition'}:</label>
				<span class="editable" itemprop="condition">{$smarty.capture.condition}</span>
			</p>
			{if isset($product->manufacturer_name) && $product->manufacturer_name != ""}
			<p class="product-manufacturer" itemprop="brand" itemscope itemtype="http://schema.org/Organization">
				 <label class="value_name">{l s='Brand'}:</label>
				 <a href="{$link->getmanufacturerLink($product->id_manufacturer)|escape:'htmlall':'UTF-8'}" itemprop="name">{$product->manufacturer_name}</a>
			</p>
			{/if}	
			{if ($display_qties == 1 && !$PS_CATALOG_MODE && $PS_STOCK_MANAGEMENT && $product->available_for_order)}
				<!-- number of item in stock -->
				<p id="pQuantityAvailable"{if $product->quantity <= 0} style="display: none;"{/if}>
					<label class="value_name">{l s='Quantity'}:</label>
					<span id="quantityAvailable">{$product->quantity|intval}</span>
					<span {if $product->quantity > 1} style="display: none;"{/if} id="quantityAvailableTxt">{l s='Item'}</span>
					<span {if $product->quantity == 1} style="display: none;"{/if} id="quantityAvailableTxtMultiple">{l s='Items'}</span>
				</p>
			{/if}
			{if $PS_STOCK_MANAGEMENT}
				<!-- availability -->
				<p id="availability_statut"{if ($product->quantity <= 0 && !$product->available_later && $allow_oosp) || ($product->quantity > 0 && !$product->available_now) || !$product->available_for_order || $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>
				<p class="warning_inline" id="last_quantities"{if ($product->quantity > $last_qties || $product->quantity <= 0) || $allow_oosp || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none"{/if} >{l s='Warning: Last items in stock!'}</p>
			{/if}
			<p id="availability_date"{if ($product->quantity > 0) || !$product->available_for_order || $PS_CATALOG_MODE || !isset($product->available_date) || $product->available_date < $smarty.now|date_format:'%Y-%m-%d'} style="display: none;"{/if}>
				<span id="availability_date_label">{l s='Availability date:'}</span>
				<span id="availability_date_value">{dateFormat date=$product->available_date full=false}</span>
			</p>

			<!-- Out of stock hook -->
			<div id="oosHook"{if $product->quantity > 0} style="display: none;"{/if}>
				{$HOOK_PRODUCT_OOS}
			</div>	
			<hr class="product-page-separator" />		
			{if $product->description_short || $packItems|@count > 0}
				{if (isset($theme_settings) && ($theme_settings.short_desc == 1))}
				<div id="short_description_block">
					{if $product->description_short}
						<div id="short_description_content" class="rte align_justify" itemprop="description">{$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}
					<!--{if $packItems|@count > 0}
						<div class="short_description_pack">
						<h3>{l s='Pack content'}</h3>
							{foreach from=$packItems item=packItem}
							
							<div class="pack_content">
								{$packItem.pack_quantity} x <a href="{$link->getProductLink($packItem.id_product, $packItem.link_rewrite, $packItem.category)|escape:'html':'UTF-8'}">{$packItem.name|escape:'html':'UTF-8'}</a>
								<p>{$packItem.description_short}</p>
							</div>
							{/foreach}
						</div>
					{/if}-->
				</div> <!-- end short_description_block -->
				{/if}
			{/if}
			
		</div>
			{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="product_attributes clearfix">						
						{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}
															<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}" style="background: {$colors.$id_attribute.value|escape:'html':'UTF-8'};" title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}">
																	{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}
																		<img src="{$img_col_dir}{$id_attribute|intval}.jpg" alt="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" width="23" height="23" />
																	{/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 {if (isset($theme_settings) && ($theme_settings.product_select_type == 0))}class="no-radiobuttons"{/if}>
														{foreach from=$group.attributes key=id_attribute item=group_attribute}
															<li>
																<input type="radio" class="attribute_radio" name="{$groupName|escape:'html':'UTF-8'}" id="{$groupName|escape:'html':'UTF-8'}_{$id_attribute}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} />
																<label for="{$groupName|escape:'html':'UTF-8'}_{$id_attribute}">{$group_attribute|escape:'html':'UTF-8'}</label>
															</li>
														{/foreach}
													</ul>
												{/if}
											</div> <!-- end attribute_list -->
										</fieldset>
									{/if}
								{/foreach}
							</div> <!-- end attributes -->
							<hr class="product-page-separator" />
						{/if}
					</div> <!-- end product_attributes -->
					<!-- 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}" />
						<span class="number-manage">							
							<a href="#" data-field-qty="qty" class="btn btn-default button-plus product_quantity_up ">
								<span>B</span>
							</a>
							<a href="#" data-field-qty="qty" class="btn btn-default button-minus product_quantity_down">
								<span>B</span>
							</a>
						</span>
						<span class="clearfix"></span>
					</p>
					{/if}
					<div{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE} class="unvisible main-button"{else} class="main-button"{/if}>
						<p id="add_to_cart" class="buttons_bottom_block no-print">
							<button type="submit" name="Submit" class="button">
								<span>{l s='Add to cart'}</span>
							</button>
						</p>
					</div>					
					<!-- 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='This product is not sold individually. You must select at least'} <b id="minimal_quantity_label">{$product->minimal_quantity}</b> {l s='quantity for this product.'}
					</p>
					<div class="box-cart-bottom{if ($theme_settings.product_payment_logos == 0)} hide-pp{/if}">						
						{if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}
					</div> <!-- end box-cart-bottom -->

					{if isset($theme_settings)}
						{if ($theme_settings.favorite_module.install == "installed") && ($theme_settings.favorite_module.enable == "enabled")}
						<div class="function_button product_like hidden">
		                    <a title="{l s='Add this product to my favorites'}" href="#" onclick="return false;" class="addfav button"></a>
		                    <a title="{l s='Remove product from my favorites'}"  href="#" onclick="return false;" class="remfav button hidden"></a>
		                </div>
		                {/if}
		                {if ($theme_settings.wishlist_module.install == "installed") && ($theme_settings.wishlist_module.enable == "enabled")}
		                <div class="function_button product_wishlist hidden">
							<a href="#" class="wishlist_button button addToWishlist" onclick="WishlistCart('wishlist_block_list', 'add', '{$product->id|intval}', false, 1); return false;" data-wishid="{$product->id|intval}" title="{l s='Add to Wishlist'}"></a>
						</div>
						{/if}
						{if ($theme_settings.product_print == 1)}
						<div class="function_button product_print">
							<a class="button" href="javascript:print();" title=""></a>
						</div>
						{/if}
						{if $HOOK_EXTRA_LEFT}{$HOOK_EXTRA_LEFT}{/if}
						{if $theme_settings.share_buttons == 1}
						<!-- AddThis Button BEGIN -->
							<div class="addthis_toolbox addthis_default_style addthis_32x32_style">
								<div class="addthis-container">
								<a class="addthis_button_preferred_1"></a>
								<a class="addthis_button_preferred_2"></a>
								<a class="addthis_button_preferred_3"></a>
								<a class="addthis_button_preferred_4"></a>
								<a class="addthis_button_compact"></a>
								<a class="addthis_counter addthis_bubble_style"></a>
								</div>
							</div>
							<script type="text/javascript">
								var addthis_config = { "data_track_addressbar":true }; 
								addthis_config.data_track_addressbar = false;
							</script>
							<script type="text/javascript" src="//s7.addthis.com/js/300/addthis_widget.js#pubid=ra-4f8c6f62449043f7"></script>
						<!-- AddThis Button END -->
						{/if}
					{/if}
				</div> <!-- end box-info-product -->
			</form>
			{/if}					
			{if !$content_only}
				<!-- usefull links-->
				<ul id="usefull_link_block" class="clearfix no-print">					
					{if $have_image && !$jqZoomEnabled}{/if}
				</ul>
			{/if}			
		</div> <!-- end pb-right-column-->
	</div> <!-- end primary_block -->

	{if !$content_only}
	<div class="sections">
		<div class="sections-titles">			
			{if isset($features) && $features}<h3 class="page-product-heading active" data-tab-label="1"><span>{l s='Features'}</span></h3>{/if}
			{if $product->description}<h3 class="page-product-heading{if (!$features)} active{/if}" data-tab-label="2"><span>{l s='More info'}</span></h3>{/if}
			{$HOOK_PRODUCT_TAB}
			{if (isset($quantity_discounts) && count($quantity_discounts) > 0)}<h3 class="page-product-heading" data-tab-label="3"><span>{l s='Volume discounts'}</span></h3>{/if}
			{if isset($accessories) && $accessories}<h3 class="page-product-heading" data-tab-label="4"><span>{l s='Accessories'}</span></h3>{/if}
			{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}
					<h3 class="page-product-heading" data-tab-label="5"><span>{l s='Download'}</span></h3>
				{/if}
				{if isset($product) && $product->customizable}
					<h3 class="page-product-heading" data-tab-label="6"><span>{l s='Product customization'}</span></h3>
				{/if}
			{/if}
			{if isset($packItems) && $packItems|@count > 0}<h3 class="page-product-heading" data-tab-label="7"><span>{l s='Pack content'}</span></h3>{/if}
			{if isset($posts) && $posts|@count > 0}<h3 class="page-product-heading" data-tab-label="15"><span>{l s='Related Posts' mod='ph_relatedposts'}</span></h3>{/if}
		</div>
		<div class="sections-bodies">
		<div class="bodies-indent">
		{if isset($features) && $features}
			<!-- Data sheet -->
			<section class="page-product-box" data-tab="1">
				<h3 class="page-product-heading">{l s='Data sheet'}</h3>
				<div class="section-body">
					<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>
				</div>
			</section>
			<!--end Data sheet -->
		{/if}
		{if $product->description}
			<!-- More info -->
			<section class="page-product-box {if isset($features) && $features}d-hidden{/if}" data-tab="2">
				<h3 class="page-product-heading">{l s='More info'}</h3>{/if}
				{if isset($product) && $product->description}
					<!-- full description -->
					<div class="rte section-body">{$product->description}</div>
			</section>
			<!--end  More info -->
		{/if}{if (isset($quantity_discounts) && count($quantity_discounts) > 0)}
			<!-- quantity discount -->			
			<section class="page-product-box d-hidden" data-tab="3">
				<h3 class="page-product-heading">{l s='Volume discounts'}</h3>
				<div id="quantityDiscount" class="section-body">
					<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}
		<!--HOOK_PRODUCT_TAB -->
		{if isset($HOOK_PRODUCT_TAB_CONTENT) && $HOOK_PRODUCT_TAB_CONTENT}{$HOOK_PRODUCT_TAB_CONTENT}{/if}
		<!--end HOOK_PRODUCT_TAB -->
		{if isset($accessories) && $accessories}
			<!--Accessories -->
			<section class="page-product-box d-hidden" data-tab="4">
				<h3 class="page-product-heading">{l s='Accessories'}</h3>
				<div class="block products_block accessories-block clearfix section-body">
					<div class="block_content">
						<ul class="clearfix p-accessories">
							{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_accessories-indent">
										<div class="product_desc">
											<a href="{$accessoryLink|escape:'html':'UTF-8'}" title="{$accessory.legend|escape:'html':'UTF-8'}" class="product-image product_image">
												{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}
												<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 class="product-name">
												<a href="{$accessoryLink|escape:'html':'UTF-8'}">
													{$accessory.name|truncate:20:'...':true|escape:'html':'UTF-8'}
												</a>
											</h5>											
										</div>
										<div class="clearfix addtocart-button">
											{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>
										</div>
									</li>
								{/if}
							{/foreach}
						</ul>
					</div>
				</div>
				<script type="text/javascript">
					$(window).load(function () {
						$('.sections > div').equalHeights();
				        $(".p-accessories").flexisel({
				              pref: "accs",
				              visibleItems: 3,
				              animationSpeed: 500,
				              autoPlay: false,
				              autoPlaySpeed: 3500,            
				              pauseOnHover: true,
				              enableResponsiveBreakpoints: true,
				              clone : true,
				              responsiveBreakpoints: { 
				                  portrait: { 
				                      changePoint:400,
				                      visibleItems: 1
				                  }, 
				                  landscape: { 
				                      changePoint:768,
				                      visibleItems: 2
				                  },
				                  tablet: { 
				                      changePoint:991,
				                      visibleItems: 2
				                  },
				                  tablet_land: { 
				                      changePoint:1199,
				                      visibleItems: 3
				                  }
				              }
				          });    
				       });
					</script>
			</section>
			<!--end Accessories -->
		{/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 d-hidden" data-tab="5">
				<h3 class="page-product-heading">{l s='Download'}</h3>
				<div class="section-body">
				{foreach from=$attachments item=attachment name=attachements}
					{if $smarty.foreach.attachements.iteration %3 == 1}<div class="row">{/if}
						<div class="col-lg-4">
							<h4><a href="{$link->getPageLink('attachment', true, NULL, "id_attachment={$attachment.id_attachment}")|escape:'html':'UTF-8'}">{$attachment.name|escape:'html':'UTF-8'}</a></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}
			</div>
			</section>
			<!--end Download -->
			{/if}
			{if isset($product) && $product->customizable}
			<!--Customization -->
			<section class="page-product-box d-hidden" data-tab="6">
				<h3 class="page-product-heading">{l s='Product customization'}</h3>
				<!-- Customizable products -->
				<div class="section-body">
				<form method="post" action="{$customizationFormTarget}" enctype="multipart/form-data" id="customizationForm" class="clearfix section-body">
					<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>	
				</div>
			</section>
			<!--end Customization -->
			{/if}
		{/if}
		{if isset($packItems) && $packItems|@count > 0}
		<section id="blockpack" class="d-hidden" data-tab="7">
			<h3 class="page-product-heading">{l s='Pack content'}</h3>
			<div class="section-body">{include file="$tpl_dir./product-list.tpl" products=$packItems}</div>
		</section>
		{/if}
		</div>
		</div>		
	</div>	
	{/if}
	{if !$content_only}
	{if isset($HOOK_PRODUCT_FOOTER) && $HOOK_PRODUCT_FOOTER}{$HOOK_PRODUCT_FOOTER}{/if}
	{/if}
{if (isset($cookie->id_customer))}
	{assign var=custID value=$cookie->id_customer}
{else}
	{assign var=custID value=$cookie->id_guest}
{/if}
<script type="text/javascript">
	jQuery(document).ready(function(){		
		var pid = {$product->id};
	  	$.ajax({
		    type: 'POST',
		    url: baseDir+'modules/pk_themesettings/ajax.php',
		    data: 'id={$product->id}&customer={$custID}&lang_id={$cookie->id_lang}&imgName=home_default&wishlist=blockwishlist&favorites=favoriteproducts',
		    success: function(result){
		      if (result == '0')
		      {
		        console.log("no data")
		      } 
			  else {       
				var pData = JSON.parse(result);					
				if (pData.modules.enabled.favorites == "enabled" || pData.modules.installed.favorites == "installed") {
					$(".product_like").removeClass("hidden");
					jQuery.each(pData.isFavorite, function(index, value) {
				   		if (value == true) {
				   			$(".product_like").addClass("active");
				   		}
				   	});
			  	}
			  	if (pData.modules.enabled.wishlist == "enabled" || pData.modules.installed.wishlist == "installed") {
					$(".product_wishlist").removeClass("hidden");
					jQuery.each(pData.isInWishlist, function(index, value) {
				   		if (value == true) {
				   			$(".product_wishlist").addClass("active");
				   		}
				   	});
			  	}
		      }
		    }
		 });
	});
</script>
{strip}
{if isset($smarty.get.ad) && $smarty.get.ad}
	{addJsDefL name=ad}{$base_dir|cat:$smarty.get.ad|escape:'html':'UTF-8'}{/addJsDefL}
{/if}
{if isset($smarty.get.adtoken) && $smarty.get.adtoken}
	{addJsDefL name=adtoken}{$smarty.get.adtoken|escape:'html':'UTF-8'}{/addJsDefL}
{/if}
{addJsDef allowBuyWhenOutOfStock=$allow_oosp|boolval}
{addJsDef availableNowValue=$product->available_now|escape:'quotes':'UTF-8'}
{addJsDef availableLaterValue=$product->available_later|escape:'quotes':'UTF-8'}
{addJsDef attribute_anchor_separator=$attribute_anchor_separator|addslashes}
{addJsDef attributesCombinations=$attributesCombinations}
{addJsDef currencySign=$currencySign|html_entity_decode:2:"UTF-8"}
{addJsDef currencyRate=$currencyRate|floatval}
{addJsDef currencyFormat=$currencyFormat|intval}
{addJsDef currencyBlank=$currencyBlank|intval}
{addJsDef currentDate=$smarty.now|date_format:'%Y-%m-%d %H:%M:%S'}
{if isset($combinations) && $combinations}
	{addJsDef combinations=$combinations}
	{addJsDef combinationsFromController=$combinations}
	{addJsDef displayDiscountPrice=$display_discount_price}
	{addJsDefL name='upToTxt'}{l s='Up to' js=1}{/addJsDefL}
{/if}
{if isset($combinationImages) && $combinationImages}
	{addJsDef combinationImages=$combinationImages}
{/if}
{addJsDef customizationFields=$customizationFields}
{addJsDef default_eco_tax=$product->ecotax|floatval}
{addJsDef displayPrice=$priceDisplay|intval}
{addJsDef ecotaxTax_rate=$ecotaxTax_rate|floatval}
{addJsDef group_reduction=$group_reduction}
{if isset($cover.id_image_only)}
	{addJsDef idDefaultImage=$cover.id_image_only|intval}
{else}
	{addJsDef idDefaultImage=0}
{/if}
{addJsDef img_ps_dir=$img_ps_dir}
{addJsDef img_prod_dir=$img_prod_dir}
{addJsDef id_product=$product->id|intval}
{addJsDef jqZoomEnabled=$jqZoomEnabled|boolval}
{addJsDef maxQuantityToAllowDisplayOfLastQuantityMessage=$last_qties|intval}
{addJsDef minimalQuantity=$product->minimal_quantity|intval}
{addJsDef noTaxForThisProduct=$no_tax|boolval}
{if isset($customer_group_without_tax)}
	{addJsDef customerGroupWithoutTax=$customer_group_without_tax|boolval}
{else}
	{addJsDef customerGroupWithoutTax=0}
{/if}
{addJsDef oosHookJsCodeFunctions=Array()}
{addJsDef productHasAttributes=isset($groups)|boolval}
{addJsDef productPriceTaxExcluded=($product->getPriceWithoutReduct(true)|default:'null' - $product->ecotax)|floatval}
{addJsDef productBasePriceTaxExcluded=($product->base_price - $product->ecotax)|floatval}
{addJsDef productBasePriceTaxExcl=($product->base_price|floatval)}
{addJsDef productReference=$product->reference|escape:'html':'UTF-8'}
{addJsDef productAvailableForOrder=$product->available_for_order|boolval}
{addJsDef productPriceWithoutReduction=$productPriceWithoutReduction|floatval}
{addJsDef productPrice=$productPrice|floatval}
{addJsDef productUnitPriceRatio=$product->unit_price_ratio|floatval}
{addJsDef productShowPrice=(!$PS_CATALOG_MODE && $product->show_price)|boolval}
{addJsDef PS_CATALOG_MODE=$PS_CATALOG_MODE}
{if $product->specificPrice && $product->specificPrice|@count}
	{addJsDef product_specific_price=$product->specificPrice}
{else}
	{addJsDef product_specific_price=array()}
{/if}
{if $display_qties == 1 && $product->quantity}
	{addJsDef quantityAvailable=$product->quantity}
{else}
	{addJsDef quantityAvailable=0}
{/if}
{addJsDef quantitiesDisplayAllowed=$display_qties|boolval}
{if $product->specificPrice && $product->specificPrice.reduction && $product->specificPrice.reduction_type == 'percentage'}
	{addJsDef reduction_percent=$product->specificPrice.reduction*100|floatval}
{else}
	{addJsDef reduction_percent=0}
{/if}
{if $product->specificPrice && $product->specificPrice.reduction && $product->specificPrice.reduction_type == 'amount'}
	{addJsDef reduction_price=$product->specificPrice.reduction|floatval}
{else}
	{addJsDef reduction_price=0}
{/if}
{if $product->specificPrice && $product->specificPrice.price}
	{addJsDef specific_price=$product->specificPrice.price|floatval}
{else}
	{addJsDef specific_price=0}
{/if}
{addJsDef specific_currency=($product->specificPrice && $product->specificPrice.id_currency)|boolval} {* TODO: remove if always false *}
{addJsDef stock_management=$stock_management|intval}
{addJsDef taxRate=$tax_rate|floatval}
{addJsDefL name=doesntExist}{l s='This combination does not exist for this product. Please select another combination.' js=1}{/addJsDefL}
{addJsDefL name=doesntExistNoMore}{l s='This product is no longer in stock' js=1}{/addJsDefL}
{addJsDefL name=doesntExistNoMoreBut}{l s='with those attributes but is available with others.' js=1}{/addJsDefL}
{addJsDefL name=fieldRequired}{l s='Please fill in all the required fields before saving your customization.' js=1}{/addJsDefL}
{addJsDefL name=uploading_in_progress}{l s='Uploading in progress, please be patient.' js=1}{/addJsDefL}
{addJsDefL name='product_fileDefaultHtml'}{l s='No file selected' js=1}{/addJsDefL}
{addJsDefL name='product_fileButtonHtml'}{l s='Choose File' js=1}{/addJsDefL}
{/strip}
{/if}

Regards

Matt

Edited by ps3z (see edit history)

Share this post


Link to post
Share on other sites

Hi ps3z :)

 

Right, you need to activate snippets in yotpo dashboard add that code in your theme/product.tpl under PS1.5 or 1.6 :

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">

        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
</div>

Add it at the end, if that is OK, you should see the number of the aggregated value just after your product description and google rich snippets test should be fine too https://www.google.com/webmasters/tools/richsnippets

Edited by KevinNash (see edit history)

Share this post


Link to post
Share on other sites

Hi ps3z :)

 

Right, you need to activate snippets in yotpo dashboard add that code in your theme/product.tpl under PS1.5 or 1.6 :

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">

        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
</div>

Add it at the end, if that is OK, you should see the number of the aggregated value just after your product description and google rich snippets test should be fine too https://www.google.com/webmasters/tools/richsnippets

 

 

ok thanks Kevin. i hope that will be indexed soon.

Share this post


Link to post
Share on other sites

Hi ps3z :)

 

Right, you need to activate snippets in yotpo dashboard add that code in your theme/product.tpl under PS1.5 or 1.6 :

<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">

        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
</div>

Add it at the end, if that is OK, you should see the number of the aggregated value just after your product description and google rich snippets test should be fine too https://www.google.com/webmasters/tools/richsnippets

 

 

Hi kevin

 

i tested it.its showing on test page.but google will index it soon? http://c2n.me/3b5w1Ep

Edited by ps3z (see edit history)

Share this post


Link to post
Share on other sites

Hi, if it shows in the tool, everything is fine and that's perfect :)

 

The time to appear in serach results depends of Google, can be a few days, a few weeks or... never :(

 

Google isn't obligated to show them, and the parameters for them decide to show them or not is a mystery.

 

I guess a minimum number of reviews is a mandatory to see them ;)

  • Like 1

Share this post


Link to post
Share on other sites

Hi, if it shows in the tool, everything is fine and that's perfect :)

 

The time to appear in serach results depends of Google, can be a few days, a few weeks or... never :(

 

Google isn't obligated to show them, and the parameters for them decide to show them or not is a mystery.

 

I guess a minimum number of reviews is a mandatory to see them ;)

 

 

ok thanks. i hope it will appear on my website soon.

 

By the way we having some issues for non default themes, theme developers are doesnt support Yotpo. their tabs are different than default one. i said to them for integrate yotpo to their themes for support the new buyers.

 

i did integrate it to my website but all codes are being removed when i update the theme versions.but if they will add Yotpo integration,that will be more better.

 

 

Regards

Matt

Share this post


Link to post
Share on other sites

Hello,

Anyone to help add css code star rating. I have no idea where to put it. SITE

 

<div class="yotpo bottomLine"
data-appkey="{$yotpoAppkey}"
data-domain="{$yotpoDomain}"
data-product-id="{$product.id_product}"
data-product-models=""
data-name="{$product.name|escape:'htmlall':'UTF-8'}"
data-url="{$product.link|escape:'htmlall':'UTF-8'}"
data-image-url="{$link->getImageLink($product.link_rewrite, $product.id_image, '')}"
data-description="{$product.description_short|strip_tags:'UTF-8'|truncate:360:'...'}"
data-lang="{$yotpoLanguage|escape:'htmlall':'UTF-8'}"
data-bread-crumbs="">
</div>

Share this post


Link to post
Share on other sites

Hello, locate the file product-list.tpl. This is found in your current theme's files and add that code in that file :)

 

You might need to adjust the related product_list.css file in order to come to the requested result.

  • Like 2

Share this post


Link to post
Share on other sites

Hello, locate the file product-list.tpl. This is found in your current theme's files and add that code in that file :)

 

You might need to adjust the related product_list.css file in order to come to the requested result.

 

Hello,

Thank you. I add the code before {/foreach} and nothing. Is there a specific place you have to put it? I would like it around price.

Share this post


Link to post
Share on other sites

Hi, place it after :

			<div class="right_block">
                                  xxxxxxxx
				</div>

The stars should be near the price :)

Share this post


Link to post
Share on other sites

I signed up for yotpo recently to test it out with a free account. I decided to stop using it. If i uninstall the module from my webshop, will the automated emails also stop automaticly? Or how do i force yotpo to stop sending mails to my customers?

Share this post


Link to post
Share on other sites

Hello, too bad you don't want to use it anymore.

 

You must also disable mail after purchase in your Yotpo account to stop them. To do so, you must delete all the reminders in the mail after purchase section.

Share this post


Link to post
Share on other sites

I put the code

  <!-- YOTPO Hook:
                                    To get the average score  add the following line to the product page template: -->
                                <div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">
                                        <span itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
                                        <span itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
                                </div>
                                <!-- //YOTPO Hook: -->

into my product.tpl at the end of the center infos div. Numeric values appear but CSS is missing. Looks wrong.

 

Why?

 

 

post-402975-0-44327100-1423773685_thumb.png

Share this post


Link to post
Share on other sites

This normal behavior, this code is for google snippets only, it won't show anything else so there is no css about it ;)

 

The stars in product page are handled by Yotpo module settings.

Share this post


Link to post
Share on other sites

Hi Kevin,

 

well, I expected something like this. But I did integreate it at the right place, right?

So, everybody who wants to use this will zhave these numbers on their product page? I hope I am wrong here and there is better solution.

 

 

 

I got another big issue:

 

A customer bought and then wrote us she wants absolutley not that her data (email) is uses by any! other means that her order.

 

so, is there a nice way how to exclude this customer from being mailed (spam in her view etc. and the misuse of her data by our shop...) by Yotpo?

A dirty solution could be to deactivate the module before I 'switch' the order status in BO that triggers the yotpo mechnism (of sending mil etc.).

 

Thanks alot.

Share this post


Link to post
Share on other sites

Hi Kevin,

 

well, I expected something like this. But I did integreate it at the right place, right?

So, everybody who wants to use this will zhave these numbers on their product page? I hope I am wrong here and there is better solution.

 

 

 

I got another big issue:

 

A customer bought and then wrote us she wants absolutley not that her data (email) is uses by any! other means that her order.

 

so, is there a nice way how to exclude this customer from being mailed (spam in her view etc. and the misuse of her data by our shop...) by Yotpo?

A dirty solution could be to deactivate the module before I 'switch' the order status in BO that triggers the yotpo mechnism (of sending mil etc.).

 

Thanks alot.

There is a blacklist in Premium Yotpo "Black List lets you select specific individuals to exclude from receiving your Yotpo emails."

 

Or you could create a new "shipped" status in prestashop, perhaps call it "shipped No review" then use that for those customers who would not want follow up emails

 

To be honest though, I believe asking for a review IS part of the order and a legitimate use of the email address

Share this post


Link to post
Share on other sites

In my opinion, it isn't part of the order, the review is specific and come after. If the customer untick newsletter and partners offers, he shouldn't receive anything.

 

Email blacklist is part of Yotpo premium but I think it should be a free version mandatory too.

 

 

Hi Kevin,

 

well, I expected something like this. But I did integreate it at the right place, right?

So, everybody who wants to use this will zhave these numbers on their product page? I hope I am wrong here and there is better solution.

 

Hi,

 

Personnally, I placed those numbers at the bottom of the product page, under my long product description, so you can do the same and move the Yotpo code at the bottom of your product.tpl

 

There is a way to hide those numbers with that code :

	<div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating">

        <span class="hidden" itemprop="ratingValue">{hook h="yotpoProductAverageScore" product_id=$product->id}</span>
        <span class="hidden" itemprop="ratingCount">{hook h="yotpoProductReviewCount" product_id=$product->id}</span>
              
    </div>

But I read somewhere that Google doesn't like hidden text so I am not sure if it is safe to hide the snippets numbers.

Edited by KevinNash (see edit history)

Share this post


Link to post
Share on other sites

Hi Kevin

 

thankd for participating again in this thread.

 

Well, concerning hiding the starts via CSS...it is the nature of Google to dislike this. But if this relates to micro code / rich snippets matters I do not know. Perhaps you still know the source?

 

 

Too bad, that blacklist option isnt part of basic Yotpo!

 

I once gave my favorite programmer the taks to make this Yotpo accepatance through customers optional in the check out process. But to my ...I forgot to integrate this.

 

So I really will have to think this over again.

 

Since, YOTPO, customer rights are more important to many that your on profit based policies. Nevertheless, your service is else fine.

 

Share this post


Link to post
Share on other sites

So,

 

we should try to beautify this snippet. CSS around some stars and span text. Since I am not doing things like this on a daily basis I would have to do some recherche on the proper code.

May be there is a chance some one else could publish some code here ;)

 

E.g:

<span 'this cool thingy got' </span>&XY  <span 'stars' </span>

 

Hehe, the most craplike line written ever but you got the idea.

Share this post


Link to post
Share on other sites