Jump to content

Free Extra Product Tabs (Override)


Recommended Posts

Hi there; 
 
Sorry for the English, in advance ... 
 
A customer asked me to put an extra field in the product description, after buskar some free module and not find it, because I have done it by override, and it would take less than to create a module from scratch, and thus also to update no problem 
 
Share with the community in case anyone else needs to add extra fields in the product page. 
 
It is tested OK with prestashop 1.6.0.9
 
I'll explain how to do this by override instead of modifying the core files directly, so we can then updated without any problem

  • you have to create the new variable in class product.php. can be done in two ways. One would be copying the whole class i add the new variable. Or two, use a constructor and thus add only the new variable. We will use the second. Create new file called Product.php and save it in /override/classes. Copy and Paste this:
<?php 
Class Product extends ProductCore
{
    public $extrafield;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, 	$context = null)
    {
        self::$definition['conseil'] = array('type' => self::TYPE_HTML, 'validate' => 'isCleanHtml');
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
}
  • ​variable $extrafield we have created, we will create the column in the database to store the data used by the $extrafield. Open database, select the ps_product_lang table and create a new column, called 'extrafield' and the type TEXT and NULL.

post-330363-0-92020400-1409129891_thumb.png

 

  • ok. with the above I have already done we can work with the new variable. Let's put it in the backoffice to work with her. Will place it below the short description in the Product Information tab. Open informations.tpl, this in adim/themes/default/template/controllers/products, copy all and create a new file called informations.tpl too ,paste this content in new file and save it in /override/controllers/admin/templates/products. Now search this in the new file
<div class="form-group">
<label class="control-label col-lg-3" for="resultImage">
<span class="label-tooltip" data-toggle="tooltip"
title="{l s='The tag to copy/paste into the description.'}">
{l s='Image tag to insert'}
</span>
</label>
<div class="col-lg-4">
<input type="text" id="resultImage" name="resultImage" />
</div>
<p class="help-block"></p>
</div>
</div>
{/if}

Paste this at the end:

<div class="form-group">
		<div class="col-lg-1"><span class="pull-right">{include file="controllers/products/multishop/checkbox.tpl" field="extrafield" type="tinymce" multilang="true"}</span></div>
		<label class="control-label col-lg-2" for="extrafield_{$id_lang}">
			<span class="label-tooltip" data-toggle="tooltip"
				title="{l s='Appears in the body of the product page.'}">
				{l s='Extrafield'}
			</span>
		</label>
		<div class="col-lg-9">
			{include
				file="controllers/products/textarea_lang.tpl"
				languages=$languages input_name='extrafield'
				class="autoload_rte"
				input_value=$product->extrafield}
		</div>
	</div>
  • Now delete class_index.php in folder /cache. Now with that and the new field should appear in the back in the Product Information tab, under the product description.

 

  • We can only make it appear in the front office. We can only make it appear in the front office. You can have it two ways, with tabs (as the PS version 1.5) or sections (as in PS 1.6). Include in the product. tpl for tour theme he following lines

          When tabs (PS. 1.5):

          For the tab:

{if $product-> extrafield} 
<li> <a href="#tab99" data-toggle="tab"> {ls = 'Extrafield'} </a> </ li> 
{/ if}

       And for the Content tab:

{if $product-> extrafield}
<- Extrafield ->
<section id = "tab99" class = "tab-pane page-product-box">
{if isset ($product) && $product->extrafield}
<- Extrafield Text ->
<div class = "rte"> {$product->extrafield} </ div>
{/ if}
</ section>
<- end Extrafield ->
{/ if} 

      When Sections (as PS 1.6):

{if $product->extrafield} 
<- Extrafield -> 
<section class = "page-product-box"> 
<h3 class = "page-product-heading"> {ls = 'Extrafield'} </ h3> {/ if} 
{if isset ($product) && $product->extrafield} 
<- Extrafield Text -> 
<div class = "rte"> {$product->extrafield} </ div> 
</ section> 
<- end Extrafield -> 
{/ if} 
  • For the Last, delete cache and Force Compilation Smarty.

 

Bye Friends

Edited by burrots (see edit history)

Share this post


Link to post
Share on other sites

Hi there; 

 

Sorry for the English, in advance ... 

 

A customer asked me to put an extra field in the product description, after buskar some free module and not find it, because I have done it by override, and it would take less than to create a module from scratch, and thus also to update no problem 

 

Share with the community in case anyone else needs to add extra fields in the product page. 

 

It is tested OK with prestashop 1.6.0.9 Multilanguage nor without MultiShop 

 

1 Download attached zip and unzip in the override folder of your server. 

 

 

 

 

 

 

2.In the DB ps_product_lang create the table a new column type TEXT called 'extrafIeld' 

 

 

 

 

 

 

3 Modify the file product.tpl your theme by adding the following code to display in our front field 'extrafield'. 

 

{if $ product-> extrafield} 
<- Extrafield -> 
<section class = "page-product-box"> 
<h3 class = "page-product-heading"> {ls = 'Extrafield'} </ h3> {/ if} 
{if isset ($ product) && $ product-> extrafield} 
<- Extrafield Text -> 
<div class = "rte"> {$ product-> extrafield} </ div> 
</ section> 
<- end Extrafield -> 
{/ if} 
If you use tabs as in version 1.5, the code would look like: 

 

For the tab: 

 

{if $ product-> extrafield} 
<li> <a href="#tab99" data-toggle="tab"> {ls = 'Extrafield'} </a> </ li> 
{/ if} 
And the contents of the flange: 
{if $ product-> extrafield} 
<- Extrafield -> 
<section id = "tab99" class = "tab-pane page-product-box">
{if isset ($ product) && $ product-> extrafield} 
<- Extrafield Text -> 
<div class = "rte"> {$ product-> extrafield} </ div> 
{/ if} 
</ section> 
<- end Extrafield -> 
{/ if} 
Now if you go to the backoffice on the products, on the tab of information, you'll see below the description is the 'extrafiled' field (you change the name conseil) that have previously created, you add information, guards and the front and should aparecerte the new field. 

 

 

 

 

 

Fast and simple, of course if you need more fields simply change 'extrafield' for 'extrafield2', 'extrafield3' ... and repeat the above steps. 

 

Hope you like. 

 

greetings

 

Can you attach the DB colum file here or write in english so we can understand in display pic language is not english, and where should I place the code in product.tple fle my tpl file code ie here

{*

* 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:

* 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-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}

{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}

 

<script type="text/javascript">

{if $smarty.const._PS_VERSION_ > '1.6.0.0'}

var is_16 = 1;

{else}

var is_16 = 0;

{/if}

</script>

{if $theme_options['product_layout'] == full}

<script>

$(document).ready(function(){

  $('body').addClass('fullwidth');

  $('.to-row').wrapAll( "<div class='row' />");

});

</script>

{/if}

{include file="$tpl_dir./breadcrumb.tpl"}

<div itemscope itemtype="http://schema.org/Product" id="primary_block" class="row clearfix">

 

{if isset($adminActionDisplay) && $adminActionDisplay}

<div id="admin-action">

  <p>{l s='This product is not visible to your customers.'}

  <input type="hidden" id="admin-action-product-id" value="{$product->id}" />

  <input type="submit" value="{l s='Publish'}" class="exclusive" onclick="submitPublishProduct('{$base_dir}{$smarty.get.ad|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" class="{if $theme_options['product_layout'] == full}col-md-6 col-sm-6{else}col-md-7{/if}">

  <!-- product img-->

  <div class="product_img">

   <div class="icons">

   {if $product->online_only}

    <p class="online_only">{l s='Online only'}</p>

   {/if}

   

   {if $product->on_sale}

    <span class="on_sale">{l s='On sale!'}</span>

   {/if}

   </div>

   <div id="image-block">

   {if $have_image}

    <span id="view_full_size">

     {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" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'ph_large')|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" itemprop="image" src="{$link->getImageLink($product->link_rewrite, $cover.id_image, 'ph_large')|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}" />

     {/if}

    </span>

   {else}

    <span id="view_full_size">

     <img itemprop="image" src="{$img_prod_dir}{$lang_iso}-default-ph_large.jpg" id="bigpic" alt="" title="{$product->name|escape:'html':'UTF-8'}"/>

    </span>

   {/if}

   </div>

  {if isset($images) && count($images) > 0}

  <!-- thumbnails -->

  <div id="views_block" class="clearfix {if isset($images) && count($images) < 2}hidden{/if}">

   <div id="thumbs_list">

    <a href="#" class="thumb_arrow prev">{l s='Previous'}</a>

    <ul id="thumbs_list_frame" class="nolist {if $theme_options['product_layout'] == full}fullthumb{/if}">

    {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:'htmlall':'UTF-8'}

      {else}

       {assign var=imageTitle value=$product->name|escape:'htmlall':'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, 'ph_large')|escape:'html':'UTF-8'}',largeimage: '{$link->getImageLink($product->link_rewrite, $imageIds)|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, 'ph_medium')|escape:'html':'UTF-8'}" alt="{$imageTitle}" title="{$imageTitle}" itemprop="image" />

       </a>

      </li>

     {/foreach}

    {/if}

    </ul>

    <a href="#" class="thumb_arrow next">{l s='Next'}</a>

   </div>

  </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)|escape:'html'}" onclick="$('span#wrapResetImages').hide('slow');return (false);">{l s='Display all pictures'}</a></span></p>{/if}

  </div><!-- .product_img -->

 

  {if $HOOK_EXTRA_LEFT}{$HOOK_EXTRA_LEFT}{/if}

  {*<ul id="usefull_link_block" class="nolist">

   {if $HOOK_EXTRA_LEFT}{$HOOK_EXTRA_LEFT}{/if}

   <li class="print"><a href="javascript:print();">{l s='Print'}</a></li>

   {if $have_image && !$jqZoomEnabled}

   {/if}

   <li class="clearBoth"></li>

   <li class="social">

    <a href="http://www.facebook.com/share.php?u={$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}">

     <i class="fa fa-facebook-square"></i> {l s='Share on Facebook'}

    </a>

   </li>

   <li class="social">

    <a href="http://pinterest.com/pin/create/button/?url={$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}&media={$link->getImageLink($product->link_rewrite, $cover.id_image, 'ph_large')|escape:'html'}&description=" class="pin-it-button" count-layout="horizontal">

     <i class="fa fa-pinterest"></i> {l s='Share on Pinterest'}

    </a>

   </li>

   <li class="social">

    <a href="https://plus.google.com/share?url={$smarty.server.HTTP_HOST}{$smarty.server.REQUEST_URI}">

     <i class="fa fa-google-plus"></i> {l s='Share on Google +'}

    </a>

   </li>

  </ul>*}

</div>

 

<!-- left infos-->

<div id="pb-left-column" class="{if $theme_options['product_layout'] == full}col-md-6 col-sm-6{else}col-md-5{/if}">

  <h4 itemprop="name">{$product->name|escape:'htmlall':'UTF-8'}</h4>

 

  <div class="star_place"></div>

 

  

  <div class="availability clearBoth">

   <!-- 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}

 

   {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 && !$allow_oosp} 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>

    {hook h="displayProductDeliveryTime" product=$product}

    <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}

  

   <!-- number of item in stock -->

   {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}>

      (<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}

 

   <p class="clearBoth" 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>

  </div><!-- .availability -->

 

  {if $product->description_short OR $packItems|@count > 0}

  <div id="short_description_block" class="clearBoth">

   {if $product->description_short}

     <!-- <div itemprop="description" id="short_description_content" class="rte align_justify">{$product->description_short}</div> -->

   {/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'}">{$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-->

  <form itemprop="offers" itemscope itemtype="http://schema.org/Offer" 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="content_prices clearBoth {if $theme_options['product_layout'] == full}col-md-8{/if} to-row">

    <!-- prices -->

    {if $product->show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}

     <p class="our_price_display clearBoth" itemprop="offers" itemscope itemtype="http://schema.org/Offer">

      {if $product->quantity > 0}<link itemprop="availability" href="http://schema.org/InStock"/>{/if}

      {l s='price'}

      {if $priceDisplay >= 0 && $priceDisplay <= 2}

       <span id="our_price_display" itemprop="price">{convertPrice price=$productPrice}</span>

       <meta itemprop="priceCurrency" content="{$currency->iso_code}" />

       {hook h="displayProductPriceBlock" product=$product type="price"}

      {/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 class="pull-left old_price_container {if !$product->specificPrice OR !$product->specificPrice.reduction}hidden{/if}">

     <p id="reduction_percent" {if !$product->specificPrice OR $product->specificPrice.reduction_type != 'percentage'} style="display:none;"{/if}>

      {l s='You save:'}

      <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}>

      {l s='You save:'}

      <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>

     <p id="old_price"{if !$product->specificPrice || !$product->specificPrice.reduction} class="hidden"{/if}>

     {if $priceDisplay >= 0 && $priceDisplay <= 2}

       {l s='Old price'}

       {hook h="displayProductPriceBlock" product=$product type="old_price"}

       <span id="old_price_display">{if $productPriceWithoutReduction > $productPrice}{convertPrice price=$productPriceWithoutReduction}{/if}</span>

     {/if}

     </p>

    </div><!-- .old_price_container -->

    {if $packItems|@count && $productPrice < $product->getNoPackPrice()}

    <div class="pull-left old_price_container">

     <p class="pack_price">{l s='Instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></p>

    </div><!-- .old_price_container -->

    {/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}

    <div class="clear"></div>

   </div>

 

   <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}{if file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')} texture{/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="45" height="45" /><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>

 

   <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} ><label>{l s='Warning'}:</label> <span class="editable">{l s='Last items in stock!'}</span></p>

  </div>

  <div class="clearBoth buy_container" {if $theme_options['product_layout'] == full}col-md-8{/if} {if (!$allow_oosp && $product->quantity <= 0) OR !$product->available_for_order OR (isset($restricted_country_mode) AND $restricted_country_mode) OR $PS_CATALOG_MODE}style="display:none"{/if}>

   <!-- quantity wanted -->

   <p id="quantity_wanted_p" class="pull-left" {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>

    <a href="#" class="less">{l s='Less'}</a>

    <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} />

    <a href="#" class="more">{l s='more'}</a>

   </p>

   <p id="add_to_cart" class="pull-right button button_buy with-icon">

    <i class="cart-stay fa fa-shopping-cart"></i>

    <i class="cart-animate fa fa-spinner fa-spin hide"></i>

    <input class="exclusive" type="submit" value="{l s='Add to cart'}" name="Submit" />

   </p>

  </div>

    <div class="{if $theme_options['product_layout'] == full}col-md-4 col-sm-6 col-xs-4 col-ms-6{/if} options-button-container to-row">

  {if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}

  </div>

  </form>

  {/if}

  {if isset($HOOK_EXTRA_RIGHT) && $HOOK_EXTRA_RIGHT}{$HOOK_EXTRA_RIGHT}{/if}

</div>

</div><!-- #primary_block -->

 

{if (isset($quantity_discounts) && count($quantity_discounts) > 0)}

<div class="home-line">

<h2><span>{l s='Sliding scale pricing'}</span></h2>

<div id="quantityDiscount">

  <table class="std table-product-discounts">

   <thead>

    <tr>

     <th>{l s='Quantity'}</th>

     <th>{if $display_discount_price}{l s='Price'}{else}{l s='Discount'}{/if}</th>

     <th>{l s='You Save'}</th>

    </tr>

   </thead>

   <tbody>

    {foreach from=$quantity_discounts item='quantity_discount' name='quantity_discounts'}

    <tr id="quantityDiscount_{$quantity_discount.id_product_attribute}" class="quantityDiscount_{$quantity_discount.id_product_attribute}" data-discount-type="{$quantity_discount.reduction_type}" data-discount="{$quantity_discount.real_value|floatval}" data-discount-quantity="{$quantity_discount.quantity|intval}">

     <td>

      {$quantity_discount.quantity|intval}

     </td>

     <td>

      {if $quantity_discount.price >= 0 || $quantity_discount.reduction_type == 'amount'}

       {if $display_discount_price}

        {convertPrice price=$productPrice-$quantity_discount.real_value|floatval}

       {else}

        {convertPrice price=$quantity_discount.real_value|floatval}

       {/if}

      {else}

       {if $display_discount_price}

        {convertPrice price = $productPrice-($productPrice*$quantity_discount.reduction)|floatval}

       {else}

        {$quantity_discount.real_value|floatval}%

       {/if}

      {/if}

     </td>

     <td>

      <span>{l s='Up to'}</span>

      {if $quantity_discount.price >= 0 || $quantity_discount.reduction_type == 'amount'}

       {$discountPrice=$productPrice-$quantity_discount.real_value|floatval}

      {else}

       {$discountPrice=$productPrice-($productPrice*$quantity_discount.reduction)|floatval}

      {/if}

      {$discountPrice=$discountPrice*$quantity_discount.quantity}

      {$qtyProductPrice = $productPrice*$quantity_discount.quantity}

      {convertPrice price=$qtyProductPrice-$discountPrice}

     </td>

    </tr>

    {/foreach}

   </tbody>

  </table>

</div>

</div><!-- .home-line -->

{/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="clearBoth">

<ul id="more_info_tabs" class="nolist 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">

   <ul id="product_list" class="nolist grid">

   {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)}*}

   {if $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="col-lg-4 col-sm-6 col-xs-6 col-ms-12">

     <div>

      <p class="icons">

      {if isset($accessory.new) && $accessory.new == 1}<span class="new_list">{l s='New'}</span>{/if}

      {if isset($accessory.on_sale) && $accessory.on_sale && isset($accessory.show_price) && $accessory.show_price && !$PS_CATALOG_MODE}<span class="on_sale_list">{l s='Sale'}</span>

      {elseif isset($accessory.reduction) && $accessory.reduction && isset($accessory.show_price) && $accessory.show_price && !$PS_CATALOG_MODE}<span class="discount_list">{l s='Promotion'}</span>{/if}

      </p>

      <a href="{$accessoryLink|escape:'html'}"><img class="img-responsive" src="{$link->getImageLink($accessory.link_rewrite, $accessory.id_image, 'ph_home')|escape:'html'}" alt="{$accessory.name|escape:'htmlall':'UTF-8'}" /></a>

      <div class="desc">

      <h3><a href="{$accessoryLink|escape:'html'}" title="{l s='View product'} {$accessory.name|escape:'htmlall':'UTF-8'}">{$accessory.name|truncate:100:'...'|escape:'htmlall':'UTF-8'}</a></h3>

      {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}

     

       <div class="info">

        <div class="buttons-wrapper">

        {if $theme_options['control_display_add2cart_accessories']}

         {if ($accessory.id_product_attribute == 0 || (isset($add_prod_display) && ($add_prod_display == 1))) && $accessory.available_for_order && !isset($restricted_country_mode) && $accessory.minimal_quantity <= 1 && $accessory.customizable != 2 && !$PS_CATALOG_MODE}

          {if ($accessory.allow_oosp || $accessory.quantity > 0)}

           {if isset($static_token)}

            <a class="ajax_add_to_cart_button pull-left button yellow" rel="ajax_id_product_{$accessory.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$accessory.id_product|intval}&token={$static_token}", false)|escape:'html'}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>

           {else}

            <a class="ajax_add_to_cart_button pull-left button yellow" rel="ajax_id_product_{$accessory.id_product|intval}" href="{$link->getPageLink('cart',false, NULL, "add=1&id_product={$accessory.id_product|intval}", false)|escape:'html'}" title="{l s='Add to cart'}">{l s='Add to cart'}</a>

           {/if}     

          {else}

          {/if}

         {/if}

        {/if}

        {if !$accessory.available_for_order || isset($restricted_country_mode) || $accessory.quantity < 1 && !$accessory.allow_oosp}

         {if $theme_options['control_display_noavailable_text']}

          <span class="noavailable_text">{$theme_options['control_noavailable_text']}</a></span>

         {/if}

        {/if}

        {if $theme_options['control_display_view_accessories']}

         <a href="{$accessory.link|escape:'html'}" title="{l s='View product'}" class="pull-right button">{l s='View product'}</a>

        {/if}

        </div>

       </div><!-- .info -->

      </div><!-- .desc -->

     </div>

    </li>

   {/if} 

   {/foreach}

   </ul>

   

  </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">

  <h2><span>{l s='Pack content'}</span></h2>

  <div class="row">

  {include file="$tpl_dir./product-list.tpl" products=$packItems}

  </div>

{if isset($HOOK_PRODUCT_FOOTER) && $HOOK_PRODUCT_FOOTER}{$HOOK_PRODUCT_FOOTER}{/if}

 

</div>

{/if}

{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}

{addJsDef customerGroupWithoutTax=$customer_group_without_tax|boolval}

{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}

Filed name can be changed?

I can see extra field section in backoffice but not in front product page

Edited by lovemyseo (see edit history)

Share this post


Link to post
Share on other sites

Internet consultation as adding a new column in a table, I can not show it all. All you need to know is to be called 'Extrafield' and type 'TEXT'. Even easier, copy the features like this in the 'description' column, but where it gets the name 'Extrafield'.

 

In product.tpl change this:

<!-- 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="clearBoth">
<ul id="more_info_tabs" class="nolist 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}

For this:

<!-- description and features -->
{if (isset($product) && $product->description) || (isset($product) && $product->extrafield) || (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="clearBoth">
<ul id="more_info_tabs" class="nolist idTabs idTabsShort clearfix">
  {if $product->description}<li><a id="more_info_tab_more_info" href="#idTab1">{l s='More info'}</a></li>{/if}
  {if $product->extrafield}<li><a id="more_info_tab_extrafield" href="#idTab99">{l s='Extrafield'}</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}
<div id="more_info_sheets" class="sheets align_justify">
{if isset($product) && $product->extrafield}
  <!-- Extrafield description -->
  <div id="idTab99" class="rte">{$product->extrafield}</div>
{/if}

Share this post


Link to post
Share on other sites

 

Internet consultation as adding a new column in a table, I can not show it all. All you need to know is to be called 'Extrafield' and type 'TEXT'. Even easier, copy the features like this in the 'description' column, but where it gets the name 'Extrafield'.

 

In product.tpl change this:

<!-- 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="clearBoth">
<ul id="more_info_tabs" class="nolist 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}

For this:

<!-- description and features -->
{if (isset($product) && $product->description) || (isset($product) && $product->extrafield) || (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="clearBoth">
<ul id="more_info_tabs" class="nolist idTabs idTabsShort clearfix">
  {if $product->description}<li><a id="more_info_tab_more_info" href="#idTab1">{l s='More info'}</a></li>{/if}
  {if $product->extrafield}<li><a id="more_info_tab_extrafield" href="#idTab99">{l s='Extrafield'}</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}
<div id="more_info_sheets" class="sheets align_justify">
{if isset($product) && $product->extrafield}
  <!-- Extrafield description -->
  <div id="idTab99" class="rte">{$product->extrafield}</div>
{/if}

Done as suggested can see the extra field section in back office but I enterd data not displaying in front office.when I click save and stay datta dont get saved

post-411458-0-72653100-1408917042_thumb.png

Share this post


Link to post
Share on other sites

Hi there,

 

Thanks for the effort but I encounter the same problem as lovemyseo.

I also get smarty errors when debug's enabled. I've tried to add a bit of text in the database field directly but that isn't working aswell

 

PS. Version 1.6.0.6

 

FO error:

Notice: Undefined property: Product::$extrafield in /var/www/vhosts/dampers.nl/layered.dampers.nl/cache/smarty/compile/bc/09/4f/bc094faadc6a4afd7d1a231be13d5d5623e94800.file.product.tpl.php on line 724 Notice: Undefined property: Product::$extrafield in /var/www/vhosts/dampers.nl/layered.dampers.nl/cache/smarty/compile/bc/09/4f/bc094faadc6a4afd7d1a231be13d5d5623e94800.file.product.tpl.php on line 729

 

BO error:

Notice op lijn 189 in bestand /var/www/vhosts/dampers.nl/layered.dampers.nl/cache/smarty/compile/c2/39/c8/c239c8750b6ceb0a940e6e5d884ad2c72a6866ee.file.informations.tpl.php

[8] Undefined index: class_input_ajax

Notice op lijn 189 in bestand /var/www/vhosts/dampers.nl/layered.dampers.nl/cache/smarty/compile/c2/39/c8/c239c8750b6ceb0a940e6e5d884ad2c72a6866ee.file.informations.tpl.php
[8] Trying to get property of non-object

Notice op lijn 561 in bestand /var/www/vhosts/dampers.nl/layered.dampers.nl/cache/smarty/compile/c2/39/c8/c239c8750b6ceb0a940e6e5d884ad2c72a6866ee.file.informations.tpl.php
[8] Undefined property: Product::$extrafield

 

Hope this information is usefull!

Share this post


Link to post
Share on other sites

You've gone the Preferences / Performance tab and have pointed to Force Compile "YES"?

 

And you've deleted the file class_index.php from the location    /cache?

Share this post


Link to post
Share on other sites

Hi Burrots,

 

Thanks for the quick response.

 

I've forced recompiling and deleted the class_index.php but no luck on getting the errors out, They're still there.

 

Any ideas?

Share this post


Link to post
Share on other sites

First of all, Thank you for your help!!

 

I followed all the steps and I can see the extrafield in the backoffice, but when I try to change the product. tpl of my theme I get an error while trying to open the product page. Maybe I'm not placing it right. This is my product. tpl code:

 

 

{*
* 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:
* 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 itemscope itemtype="http://schema.org/Product">
<div class="primary_block row">
{if !$content_only}
<div class="container">
<div class="top-hr"></div>
</div>
{/if}
{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>
{/if}
{if isset($confirmation) && $confirmation}
<p class="confirmation">
{$confirmation}
</p>
{/if}
<!-- left infos-->  
<div class="pb-left-column col-xs-12 col-sm-4 col-md-5">
<!-- product img-->        
<div id="image-block" class="clearfix">
{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 $have_image}
<span id="view_full_size">
{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" 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" 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">
<img 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> <!-- end image-block -->
{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="" 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`"}
{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, 'cart_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) > 3}
<a id="view_scroll_right" 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 -->
<div class="pb-center-column col-xs-12 col-sm-7">
{if $product->online_only}
<p class="online_only">{l s='Online only'}</p>
{/if}
<h1 itemprop="name">{$product->name|escape:'html':'UTF-8'}</h1>
<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>
{if $product->condition}
<p id="product_condition">
<label>{l s='Condition'} </label>
{if $product->condition == 'new'}
<link itemprop="itemCondition" href="http://schema.org/NewCondition"/>
<span class="editable">{l s='New'}</span>
{elseif $product->condition == 'used'}
<link itemprop="itemCondition" href="http://schema.org/UsedCondition"/>
<span class="editable">{l s='Used'}</span>
{elseif $product->condition == 'refurbished'}
<link itemprop="itemCondition" href="http://schema.org/RefurbishedCondition"/>
<span class="editable">{l s='Refurbished'}</span>
{/if}
</p>
{/if}
{if $product->description_short || $packItems|@count > 0}
<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}
 
<!-- pb-right-column-->
<div class="pb-right-column">
{if ($product->show_price && !isset($restricted_country_mode)) || isset($groups) || $product->reference || (isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS)}
<!-- add to cart form-->
 
<form id="buy_block"{if $PS_CATALOG_MODE && !isset($groups) && $product->quantity > 0} class="hidden"{/if} action="{$link->getPageLink('cart')|escape:'html':'UTF-8'}" method="post">
<!-- hidden datas -->
<p class="hidden">
<input type="hidden" name="token" value="{$static_token}" />
<input type="hidden" name="id_product" value="{$product->id|intval}" id="product_page_product_id" />
<input type="hidden" name="add" value="1" />
<input type="hidden" name="id_product_attribute" id="idCombination" value="" />
</p>
<div class="box-info-product">
<div class="content_prices clearfix">
{if $product->show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
<!-- prices -->
<div 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}" />
{hook h="displayProductPriceBlock" product=$product type="price"}
{/if}
</p>
<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>
<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>
<p id="old_price"{if (!$product->specificPrice || !$product->specificPrice.reduction) && $group_reduction == 0} class="hidden"{/if}>
{if $priceDisplay >= 0 && $priceDisplay <= 2}
{hook h="displayProductPriceBlock" product=$product type="old_price"}
<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 -->
{if $packItems|@count && $productPrice < $product->getNoPackPrice()}
<p class="pack_price">{l s='Instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></p>
{/if}
{if $product->ecotax != 0}
<p class="price-ecotax">{l s='Including'} <span id="ecotax_price_display">{if $priceDisplay == 2}{$ecotax_tax_exc|convertAndFormatPrice}{else}{$ecotax_tax_inc|convertAndFormatPrice}{/if}</span> {l s='for ecotax'}
{if $product->specificPrice && $product->specificPrice.reduction}
<br />{l s='(not impacted by the discount)'}
{/if}
</p>
{/if}
{if !empty($product->unity) && $product->unit_price_ratio > 0.000000}
{math equation="pprice / punit_price"  pprice=$productPrice  punit_price=$product->unit_price_ratio assign=unit_price}
<p class="unit-price"><span id="unit_price_display">{convertPrice price=$unit_price}</span> {l s='per'} {$product->unity|escape:'html':'UTF-8'}</p>
{hook h="displayProductPriceBlock" product=$product type="unit_price"}
{/if}
{/if} {*close if for show price*}
{hook h="displayProductPriceBlock" product=$product type="weight"}
<div class="clear"></div>
</div> <!-- end content_prices -->
<div class="product_attributes clearfix">
<!-- quantity wanted -->
{if !$PS_CATALOG_MODE}
<p id="quantity_wanted_p"{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
<label>{l s='Quantity'}</label>
<input type="text" name="qty" id="quantity_wanted" class="text" value="{if isset($quantityBackup)}{$quantityBackup|intval}{else}{if $product->minimal_quantity > 1}{$product->minimal_quantity}{else}1{/if}{/if}" />
<a href="#" data-field-qty="qty" class="btn btn-default button-minus product_quantity_down">
<span><i class="icon-minus"></i></span>
</a>
<a href="#" data-field-qty="qty" class="btn btn-default button-plus product_quantity_up">
<span><i class="icon-plus"></i></span>
</a>
<span class="clearfix"></span>
</p>
{/if}
<!-- minimal quantity wanted -->
<p id="minimal_quantity_wanted_p"{if $product->minimal_quantity <= 1 || !$product->available_for_order || $PS_CATALOG_MODE} style="display: none;"{/if}>
{l s='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 isset($groups)}
<!-- attributes -->
<div id="attributes">
<div class="clearfix"></div>
{foreach from=$groups key=id_attribute_group item=group}
{if $group.attributes|@count}
<fieldset class="attribute_fieldset">
<label class="attribute_label" {if $group.group_type != 'color' && $group.group_type != 'radio'}for="group_{$id_attribute_group|intval}"{/if}>{$group.name|escape:'html':'UTF-8'} </label>
{assign var="groupName" value="group_$id_attribute_group"}
<div class="attribute_list">
{if ($group.group_type == 'select')}
<select name="{$groupName}" id="group_{$id_attribute_group|intval}" class="form-control attribute_select no-print">
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<option value="{$id_attribute|intval}"{if (isset($smarty.get.$groupName) && $smarty.get.$groupName|intval == $id_attribute) || $group.default == $id_attribute} selected="selected"{/if} title="{$group_attribute|escape:'html':'UTF-8'}">{$group_attribute|escape:'html':'UTF-8'}</option>
{/foreach}
</select>
{elseif ($group.group_type == 'color')}
<ul id="color_to_pick_list" class="clearfix">
{assign var="default_colorpicker" value=""}
{foreach from=$group.attributes key=id_attribute item=group_attribute}
{assign var='img_color_exists' value=file_exists($col_img_dir|cat:$id_attribute|cat:'.jpg')}
<li{if $group.default == $id_attribute} class="selected"{/if}>
<a href="{$link->getProductLink($product)|escape:'html':'UTF-8'}" id="color_{$id_attribute|intval}" name="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" class="color_pick{if ($group.default == $id_attribute)} selected{/if}"{if !$img_color_exists && isset($colors.$id_attribute.value) && $colors.$id_attribute.value} style="background:{$colors.$id_attribute.value|escape:'html':'UTF-8'};"{/if} title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}">
{if $img_color_exists}
<img src="{$img_col_dir}{$id_attribute|intval}.jpg" alt="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" title="{$colors.$id_attribute.name|escape:'html':'UTF-8'}" width="20" height="20" />
{/if}
</a>
</li>
{if ($group.default == $id_attribute)}
{$default_colorpicker = $id_attribute}
{/if}
{/foreach}
</ul>
<input type="hidden" class="color_pick_hidden" name="{$groupName|escape:'html':'UTF-8'}" value="{$default_colorpicker|intval}" />
{elseif ($group.group_type == 'radio')}
<ul>
{foreach from=$group.attributes key=id_attribute item=group_attribute}
<li>
<input type="radio" class="attribute_radio" name="{$groupName|escape:'html':'UTF-8'}" value="{$id_attribute}" {if ($group.default == $id_attribute)} checked="checked"{/if} />
<span>{$group_attribute|escape:'html':'UTF-8'}</span>
</li>
{/foreach}
</ul>
{/if}
</div> <!-- end attribute_list -->
</fieldset>
{/if}
{/foreach}
</div> <!-- end attributes -->
{/if}
</div> <!-- end product_attributes -->
<div class="box-cart-bottom">
<div{if (!$allow_oosp && $product->quantity <= 0) || !$product->available_for_order || (isset($restricted_country_mode) && $restricted_country_mode) || $PS_CATALOG_MODE} class="unvisible"{/if}>
<p id="add_to_cart" class="buttons_bottom_block no-print">
<button type="submit" name="Submit" class="exclusive">
<span>{if $content_only && (isset($product->customization_required) && $product->customization_required)}{l s='Customize'}{else}{l s='Add to cart'}{/if}</span>
</button>
</p>
</div>
{if isset($HOOK_PRODUCT_ACTIONS) && $HOOK_PRODUCT_ACTIONS}{$HOOK_PRODUCT_ACTIONS}{/if}<strong></strong>
</div> <!-- end box-cart-bottom -->
</div> <!-- end box-info-product -->
</form>
 
{/if}
</div> <!-- end pb-right-column-->
 
{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}>
<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 && !$allow_oosp} 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>
{hook h="displayProductDeliveryTime" product=$product}
<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>
{if isset($HOOK_EXTRA_RIGHT) && $HOOK_EXTRA_RIGHT}{$HOOK_EXTRA_RIGHT}{/if}
{if !$content_only}
<!-- usefull links-->
<ul id="usefull_link_block" class="clearfix no-print">
{if $HOOK_EXTRA_LEFT}{$HOOK_EXTRA_LEFT}{/if}
<li class="print">
<a href="javascript:print();">
{l s='Print'}
</a>
</li>
{if $have_image && !$jqZoomEnabled}{/if}
</ul>
{/if}
</div>
<!-- end center infos-->
 
</div> <!-- end primary_block -->
{if !$content_only}
{if (isset($quantity_discounts) && count($quantity_discounts) > 0)}
<!-- quantity discount -->
<section class="page-product-box">
<h3 class="page-product-heading">{l s='Volume discounts'}</h3>
<div id="quantityDiscount">
<table class="std table-product-discounts">
<thead>
<tr>
<th>{l s='Quantity'}</th>
<th>{if $display_discount_price}{l s='Price'}{else}{l s='Discount'}{/if}</th>
<th>{l s='You Save'}</th>
</tr>
</thead>
<tbody>
{foreach from=$quantity_discounts item='quantity_discount' name='quantity_discounts'}
<tr id="quantityDiscount_{$quantity_discount.id_product_attribute}" class="quantityDiscount_{$quantity_discount.id_product_attribute}" data-discount-type="{$quantity_discount.reduction_type}" data-discount="{$quantity_discount.real_value|floatval}" data-discount-quantity="{$quantity_discount.quantity|intval}">
<td>
{$quantity_discount.quantity|intval}
</td>
<td>
{if $quantity_discount.price >= 0 || $quantity_discount.reduction_type == 'amount'}
{if $display_discount_price}
{convertPrice price=$productPrice-$quantity_discount.real_value|floatval}
{else}
{convertPrice price=$quantity_discount.real_value|floatval}
{/if}
{else}
{if $display_discount_price}
{convertPrice price = $productPrice-($productPrice*$quantity_discount.reduction)|floatval}
{else}
{$quantity_discount.real_value|floatval}%
{/if}
{/if}
</td>
<td>
<span>{l s='Up to'}</span>
{if $quantity_discount.price >= 0 || $quantity_discount.reduction_type == 'amount'}
{$discountPrice=$productPrice-$quantity_discount.real_value|floatval}
{else}
{$discountPrice=$productPrice-($productPrice*$quantity_discount.reduction)|floatval}
{/if}
{$discountPrice=$discountPrice*$quantity_discount.quantity}
{$qtyProductPrice = $productPrice*$quantity_discount.quantity}
{convertPrice price=$qtyProductPrice-$discountPrice}
</td>
</tr>
{/foreach}
</tbody>
</table>
</div>
</section>
{/if}
 
<!-- Megnor start : TAB-->
{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}
<section class="tm-tabcontent">
<ul id="productpage_tab" class="nav nav-tabs clearfix">
{if $product->description}
<li class="active"><a data-toggle="tab" href="#moreinfo" class="moreinfo">{l s='More info'}</a></li>
{/if}
{if isset($features) && $features}
<li><a class="datasheet" href="#datasheet" data-toggle="tab">{l s='Data sheet'}</a></li>
{/if}
{if isset($attachments) && $attachments}
<li><a class="tmdownlaod" href="#tmdownlaod" data-toggle="tab">{l s='Download'}</a></li>
{/if}
{if isset($product) && $product->customizable}
<li><a class="tmcustomization" href="#tmcustomization" data-toggle="tab">{l s='Product customization'}</a></li>
{/if}
</ul>
 
<div class="tab-content">
<!-- More Info -->
{if isset($product) && $product->description}
<ul id="moreinfo" class="tm_productinner tab-pane active">
{$product->description}
</ul>
{/if}<!-- End More Info -->
 
<!-- Data sheet -->
{if isset($features) && $features}
<ul id="datasheet" class="tm_productinner tab-pane">
<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>
</ul>
{/if} <!--end Data sheet -->
 
<!--Download -->
{if isset($features) && $features}
<ul id="tmdownlaod" class="tm_productinner tab-pane">
{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}
</ul>
{/if} <!--end Download -->
 
<!-- Customizable products -->
{if isset($features) && $features}
 
<ul id="tmcustomization" class="tm_productinner tab-pane">
<form method="post" action="{$customizationFormTarget}" enctype="multipart/form-data" id="customizationForm" class="clearfix">
<p class="infoCustomizable">
{l s='After saving your customized product, remember to add it to your cart.'}
{if $product->uploadable_files}
<br />
{l s='Allowed file formats are: GIF, JPG, PNG'}{/if}
</p>
{if $product->uploadable_files|intval}
<div class="customizableProductsFile">
<h5 class="product-heading-h5">{l s='Pictures'}</h5>
<ul id="uploadable_files" class="clearfix">
{counter start=0 assign='customizationField'}
{foreach from=$customizationFields item='field' name='customizationFields'}
{if $field.type == 0}
<li class="customizationUploadLine{if $field.required} required{/if}">{assign var='key' value='pictures_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field}
{if isset($pictures.$key)}
<div class="customizationUploadBrowse">
<img src="{$pic_dir}{$pictures.$key}_small" alt="" />
<a href="{$link->getProductDeletePictureLink($product, $field.id_customization_field)|escape:'html':'UTF-8'}" title="{l s='Delete'}" >
<img src="{$img_dir}icon/delete.gif" alt="{l s='Delete'}" class="customization_delete_icon" width="11" height="13" />
</a>
</div>
{/if}
<div class="customizationUploadBrowse form-group">
<label class="customizationUploadBrowseDescription">
{if !empty($field.name)}
{$field.name}
{else}
{l s='Please select an image file from your computer'}
{/if}
{if $field.required}<sup>*</sup>{/if}
</label>
<input type="file" name="file{$field.id_customization_field}" id="img{$customizationField}" class="form-control customization_block_input {if isset($pictures.$key)}filled{/if}" />
</div>
</li>
{counter}
{/if}
{/foreach}
</ul>
</div>
{/if}
{if $product->text_fields|intval}
<div class="customizableProductsText">
<h5 class="product-heading-h5">{l s='Text'}</h5>
<ul id="text_fields">
{counter start=0 assign='customizationField'}
{foreach from=$customizationFields item='field' name='customizationFields'}
{if $field.type == 1}
<li class="customizationUploadLine{if $field.required} required{/if}">
<label for ="textField{$customizationField}">
{assign var='key' value='textFields_'|cat:$product->id|cat:'_'|cat:$field.id_customization_field}
{if !empty($field.name)}
{$field.name}
{/if}
{if $field.required}<sup>*</sup>{/if}
</label>
<textarea name="textField{$field.id_customization_field}" class="form-control customization_block_input" id="textField{$customizationField}" rows="3" cols="20">{strip}
{if isset($textFields.$key)}
{$textFields.$key|stripslashes}
{/if}
{/strip}</textarea>
</li>
{counter}
{/if}
{/foreach}
</ul>
</div>
{/if}
<p id="customizedDatas">
<input type="hidden" name="quantityBackup" id="quantityBackup" value="" />
<input type="hidden" name="submitCustomizedDatas" value="1" />
<button class="button btn btn-default button button-small" name="saveCustomization">
<span>{l s='Save'}</span>
</button>
<span id="ajax-loader" class="unvisible">
<img src="{$img_ps_dir}loader.gif" alt="loader" />
</span>
</p>
</form>
<p class="clear required"><sup>*</sup> {l s='required fields'}</p>
</ul>
{/if} <!--end Customizable products -->
 
</div>
 
</section>
{/if}
<!-- Megnor End :TAB -->
 
<!--HOOK_PRODUCT_TAB -->
<section class="page-product-box">
{$HOOK_PRODUCT_TAB}
{if isset($HOOK_PRODUCT_TAB_CONTENT) && $HOOK_PRODUCT_TAB_CONTENT}{$HOOK_PRODUCT_TAB_CONTENT}{/if}
</section>
<!--end HOOK_PRODUCT_TAB -->
 
{if isset($accessories) && $accessories}
<!--Accessories -->
<section class="page-product-box accessories-product">
<h3 class="page-product-heading">{l s='Accessories'}</h3>
<div class="block products_block accessories-block clearfix">
<div class="block_content">
 
<!-- Megnor start -->
{assign var='sliderFor' value=5} <!-- Define Number of product for SLIDER -->
{assign var='productCount' value=count($accessories)}
{if $productCount >= $sliderFor}
<div class="customNavigation">
<a class="btn accessories_prev"><i class="icon-chevron-sign-left"></i></a>
<a class="btn accessories_next"><i class="icon-chevron-sign-right"></i></a>
</div>
{/if}
<!-- Megnor End -->
<ul id="{if $productCount >= $sliderFor}accessories-carousel{else}accessories-grid{/if}" class="{if $productCount >= $sliderFor}tm-carousel{else}product_list grid row{/if} clearfix">
{foreach from=$accessories item=accessory name=accessories_list}
{if ($accessory.allow_oosp || $accessory.quantity_all_versions > 0 || $accessory.quantity > 0) && $accessory.available_for_order && !isset($restricted_country_mode)}
{assign var='accessoryLink' value=$link->getProductLink($accessory.id_product, $accessory.link_rewrite, $accessory.category)}
<li class=" {if $productCount >= $sliderFor}item {else} ajax_block_product col-xs-12 col-sm-4 col-md-3 {/if} product-box {if $smarty.foreach.accessories_list.first} first_item {/if} {if $smarty.foreach.accessories_list.last} last_item {/if} ">
<div class="product-container">
<div class="product_desc">
<a href="{$accessoryLink|escape:'html':'UTF-8'}" title="{$accessory.legend|escape:'html':'UTF-8'}" class="product-image product_image">
<img class="lazyOwl" src="{$link->getImageLink($accessory.link_rewrite, $accessory.id_image, 'home_default')|escape:'html':'UTF-8'}" alt="{$accessory.legend|escape:'html':'UTF-8'}" width="{$homeSize.width}" height="{$homeSize.height}"/>
</a>
<div class="block_description">
<a href="{$accessoryLink|escape:'html':'UTF-8'}" title="{l s='More'}" class="product_description">
{$accessory.description_short|strip_tags|truncate:25:'...'}
</a>
</div>
</div>
<div class="s_title_block">
<h5 class="product-name">
<a href="{$accessoryLink|escape:'html':'UTF-8'}">
{$accessory.name|truncate:15:'...':true|escape:'html':'UTF-8'}
</a>
</h5>
{if $accessory.show_price && !isset($restricted_country_mode) && !$PS_CATALOG_MODE}
<span class="price">
{if $priceDisplay != 1}
{displayWtPrice p=$accessory.price}{else}{displayWtPrice p=$accessory.price_tax_exc}
{/if}
</span>
{/if}
</div>
<div class="clearfix" style="margin-top:5px">
{if !$PS_CATALOG_MODE && ($accessory.allow_oosp || $accessory.quantity > 0)}
<div class="no-print">
<a class="exclusive button ajax_add_to_cart_button" href="{$link->getPageLink('cart', true, NULL, "qty=1&id_product={$accessory.id_product|intval}&token={$static_token}&add")|escape:'html':'UTF-8'}" data-id-product="{$accessory.id_product|intval}" title="{l s='Add to cart'}">
<span>{l s='Add to cart'}</span>
</a>
</div>
{/if}
</div>
</div>
</li>
{/if}
{/foreach}
</ul>
</div>
</div>
</section>
<!--end Accessories -->
{/if}
{if isset($HOOK_PRODUCT_FOOTER) && $HOOK_PRODUCT_FOOTER}{$HOOK_PRODUCT_FOOTER}{/if}
 
{if isset($packItems) && $packItems|@count > 0}
<section id="blockpack">
<h3 class="page-product-heading">{l s='Pack content'}</h3>
{include file="$tpl_dir./product-list.tpl" products=$packItems}
</section>
{/if}
{/if}
</div> <!-- itemscope product wrapper -->
{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|escape:'quotes':'UTF-8'}
{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}
{addJsDef customerGroupWithoutTax=$customer_group_without_tax|boolval}
{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}
 
 
Where should I place the code?
 
And also, same as lovemyseo, when I click save at the backoffice it doesn't save what I wrote.. I've created the coulumn in the database....
Edited by shiran_m (see edit history)

Share this post


Link to post
Share on other sites
  • 2 weeks later...

Hi,

 

Thanks for the detailed info for this. I followed instructions and did everything exactly. I even get the desired results but the problem is :

 

"Whatever I write in the new generated extratab, can't be saved."

 

I have added code block to information.tpl, product.php, modified my theme product.tpl file and added new extratab field to ps_product_lang table. All's working well as I tried a manual entry in DB and it's working very nice.

 

But I can't save the entered text in the extratab from admin panel. It says updated successfully but nothing get saved.

 

Thanks....

Share this post


Link to post
Share on other sites
  • 1 year later...

Hi!
 
My solution (tested on 1.6.1.2):
 

<?php 
Class Product extends ProductCore
{
    public $extrafield;
 
    public function __construct($id_product = null, $full = false, $id_lang = null, $id_shop = null, 	$context = null)
    {
        self::$definition['fields']['extrafield'] = array('type' => self::TYPE_HTML, 'validate' => 'isCleanHtml');
        parent::__construct($id_product, $full, $id_lang, $id_shop, $context);
    }
} 

You should replace $definition['extrafield'] with $definition['fields']['extrafield']

Edited by Alex01d (see edit history)
  • Like 2

Share this post


Link to post
Share on other sites
  • 5 months later...
  • 9 months later...
  • nadie unlocked this topic

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...

Important Information

Cookies ensure the smooth running of our services. Using these, you accept the use of cookies. Learn More