Faites la différence
en ajoutant des fonctionnalités à votre boutique

La version 1.4 finale de notre logiciel, disponible d’ici quelques semaines, s’annonce déjà comme un grand succès pour PrestaShop. Vous aussi, profitez de ce succès en mettant à jour vos modules et thèmes en vente sur PrestaShop Addons et développez vos ventes !
Grâce à une révision des catégories de modules dans le Back-Office, dorénavant fixes, les marchands pourront retrouver plus facilement les modules qu’ils recherchent au sein du Back-Office. Adaptez vos contributions à notre nouvelle version 1.4, ceci est capital pour attirer de nouveaux clients et augmenter votre chiffre d’affaires sur PrestaShop Addons.
Retrouvez ci-dessous toutes les informations dont vous aurez besoin pour adapter vos modules et thèmes à PrestaShop 1.4 facilement.
PrestaShop 1.4 implémente désormais une liste fixe de catégories de modules, afin de permettre aux marchands de mieux se retrouver dans les nombreux modules disponibles en back office.
Les catégories sont les suivantes :
PrestaShop 1.4 implémente une option facultative pour les modules : l’utilisation d’un fichier de description XML. Ce fichier n’est pas obligatoire, mais permet à PrestaShop de ne pas inclure et instancier le module pour récupérer des informations basiques telles que son nom ou son numéro de version. Il est donc fortement conseillé d’ajouter ce fichier à la racine des modules, en prenant exemple sur les modules PrestaShop natifs.
PrestaShop 1.4 a beaucoup évolué en termes de nouvelles fonctionnalités, mais aussi en optimisation des anciennes. De ce fait, un certain nombre de méthodes sont désormais dépréciées et ne doivent plus être utilisées. Ces fonctions sont les suivantes :
Address::getManufacturerIdByAddress()
Les modules les plus impactés sont ceux relatifs aux transporteurs (en particulier les zones et les tranches ont changé dans PrestaShop 1.4), et aux prix et taxes des produits (le système de taxe a entièrement été refait pour plus de polyvalence).
De nombreuses fonctionnalités ont été intégrées à PrestaShop 1.4. Le thème par défaut comprend désormais plus de pages, qui devront être prises en compte lors du développement des nouveaux thèmes et la mise à jour des plus anciens.
Au-delà des différents ajouts qui ont été apportés à chacune des pages de la boutique, 4 nouvelles fonctionnalités font leur apparition :
Smarty, le moteur de template utilisé par PrestaShop, a été mis à jour dans PrestaShop 1.4 et passe de la version 2 à la version 3. La plupart des fonctionnalités sont rétro-compatibles mais il est conseillé de vérifier toutes les pages pour en être sûr.
Par ailleurs, Smarty 3 est beaucoup plus strict que Smarty 2, et une grande partie du code spécifique à Smarty a dû être réécrit dans le thème par défaut. Il est donc conseillé de vérifier toutes les pages en activant l’affichage des erreurs PHP.
PrestaShop a développé un installeur de thème, qui permet aux marchands de changer de thème en quelques clics sans avoir à suivre une documentation pour la gestion des modules et de leur position, de la taille des images des produits, etc. Il est disponible sur PrestaShop Addons à l’adresse suivante : http://addons.prestashop.com/fr/1713-installeur-de-themes.html.
Cet installeur est intégré en natif dans PrestaShop 1.4 et doit devenir un réflexe pour tous les créateurs de thèmes. Cette installeur gère bien évidemment également la création de package pour pouvoir exporter les thèmes installés au bon format.
Ouvrir le fichier product.tpl présent à la racine de votre thème. Au début du fichier vous trouverez tout un tas de variables déclarées.
var id_product = '{$product->id|intval}';
var productHasAttributes = {if isset($groups)}true{else}false{/if};
var quantitiesDisplayAllowed = {if $display_qties == 1}true{else}false{/if};
Pour chacune des variables ci dessous,vérifiez si la variable est déjà définie dans votre thème, si c'est le cas remplacez la par la déclaration ci dessous. Dans le cas ou elle n'est pas présente ajoutez la à la suite de la premiere balise <script type="text/javascript"> située au début du fichier:
var reduction_percent = {if $product->specificPrice AND $product->specificPrice.reduction AND $product->specificPrice.reduction_type == 'percentage'}{$product->specificPrice.reduction*100}{else}0{/if};
var reduction_price = {if $product->specificPrice AND $product->specificPrice.reduction AND $product->specificPrice.reduction_type == 'amount'}{$product->specificPrice.reduction}{else}0{/if};
var productAvailableForOrder = {if (isset($restricted_country_mode) AND $restricted_country_mode) OR $PS_CATALOG_MODE}'0'{else}'{$product->available_for_order}'{/if};
var productReference = '{$product->reference|escape:'htmlall':'UTF-8'}';
var productShowPrice = '{if !$PS_CATALOG_MODE}{$product->show_price}{else}0{/if}';
var specific_price = {if $product->specificPrice AND $product->specificPrice.price}{$product->specificPrice.price}{else}0{/if};
var productPriceTaxExcluded = {$product->getPriceWithoutReduct(true)|default:'null'} - {$product->ecotax};
var ecotaxTax_rate = {$ecotaxTax_rate};
var productUnitPriceRatio = '{$product->unit_price_ratio}';
var idDefaultImage = {if isset($cover.id_image_only)}{$cover.id_image_only}{else}0{/if};
var specific_currency = {if $product->specificPrice AND $product->specificPrice.id_currency}true{else}false{/if};
Attention à bien verifier qu'une variable n'est pas déclarée 2 fois.
Plus loin dans la page, remplacer le bloc <!-- prices --> par le code ci dessous. Par exemple dans le theme par defaut de la version 1.3.7, le bloc "prices" va de:
<!-- prices -->{/if}{if isset($groups)}<!-- attributes -->
<!-- prices -->
{if $product->show_price AND !isset($restricted_country_mode) AND !$PS_CATALOG_MODE}
<p class="price">
{if !$priceDisplay || $priceDisplay == 2}
{assign var='productPrice' value=$product->getPrice(true, $smarty.const.NULL)}
{assign var='productPriceWithoutRedution' value=$product->getPriceWithoutReduct(false, $smarty.const.NULL)}
{elseif $priceDisplay == 1}
{assign var='productPrice' value=$product->getPrice(false, $smarty.const.NULL)}
{assign var='productPriceWithoutRedution' value=$product->getPriceWithoutReduct(true, $smarty.const.NULL)}
{/if}
{if $product->on_sale}
<img src="{$img_dir}onsale_{$lang_iso}.gif" alt="{l s='On sale'}" class="on_sale_img" />
<span class="on_sale">{l s='On sale!'}</span>
{elseif $product->specificPrice AND $product->specificPrice.reduction AND $productPriceWithoutRedution > $productPrice}
<span class="discount">{l s='Reduced price!'}</span>
{/if}
<br/>
<span class="our_price_display">
{if $priceDisplay >= 0 && $priceDisplay <= 2}
<span id="our_price_display">{convertPrice price=$productPrice}</span>
{if $tax_enabled && ((isset($display_tax_label) && $display_tax_label == 1) OR !isset($display_tax_label))}
{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}
{/if}
{/if}
</span>
{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}
<br/>
</p>
{if $product->specificPrice AND $product->specificPrice.reduction}
<p id="old_price">
<span class="bold">
{if $priceDisplay >= 0 && $priceDisplay <= 2}
{if $productPriceWithoutRedution > $productPrice}
<span id="old_price_display">{convertPrice price=$productPriceWithoutRedution}</span>
{if $tax_enabled && $display_tax_label == 1}
{if $priceDisplay == 1}{l s='tax excl.'}{else}{l s='tax incl.'}{/if}
{/if}
{/if}
{/if}
</span>
</p>
{/if}
{if $product->specificPrice AND $product->specificPrice.reduction_type == 'percentage'}
<p id="reduction_percent">{l s='(price reduced by'} <span id="reduction_percent_display">{$product->specificPrice.reduction*100}</span> %{l s=')'}</p>
{/if}
{if $packItems|@count}
<p class="pack_price">{l s='instead of'} <span style="text-decoration: line-through;">{convertPrice price=$product->getNoPackPrice()}</span></p>
<br class="clear" />
{/if}
{if $product->ecotax != 0}
<p class="price-ecotax">{l s='include'} <span id="ecotax_price_display">{if $priceDisplay == 2}{$ecotax_tax_exc|convertAndFormatPrice}{else}{$ecotax_tax_inc|convertAndFormatPrice}{/if}</span> {l s='for green tax'}
{if $product->specificPrice AND $product->specificPrice.reduction}
<br/>{l s='(not impacted by the discount)'}
{/if}
</p>
{/if}
{if !empty($product->unity) && $product->unit_price_ratio > 0.000000}
{math equation="pprice / punit_price" pprice=$productPrice punit_price=$product->unit_price_ratio assign=unit_price}
<p class="unit-price"><span id="unit_price_display">{convertPrice price=$unit_price}</span> {l s='per'} {$product->unity|escape:'htmlall':'UTF-8'}</p>
{/if}
{*close if for show price*}
{/if}