prestashop 1.4

08-11-2011

Prestashop module, Récupérer la valeur d’une variable

Pour assigner une valeur à une variable sur le moteur smarty de prestashop on utilise le code suivant:

Fichier php du module

$smarty->assign('var1','la valeur');

On affiche le résultat dans le tpl

<h1>{$var1}</h1>

Si vous voulez récupérer dans votre fichier php du module une valeur déjà assignéé voici le code à utiliser

$smarty->get_template_vars('var1');

c’est pratique pour récupérer les variables comme page_name par exemple qui est déclarée dans la classe FrontController …

08-11-2011

Prestashop gsitemap, retirer les pages cms

Pour générer le sitemap sur prestashop on utilise le module gsitemap (qu’il faut bien sur activer si ce n’est pas encore fait…).

Ensuite vous générez la sitemap dans la configuration du module….

Il se peut que vous ne vouliez pas afficher certaines pages dans cette sitemap pour améliorer le référencement ou cacher des informations.

Dans ce cas il faut commenter certaines lignes du module gsitemap

modules=>gsitemap=>gsitemap.php

		/* CMS Generator */
		// if (Configuration::get('GSITEMAP_ALL_CMS') OR !Module::isInstalled('blockcms'))
			// $sql_cms = '
			// SELECT DISTINCT '.(Configuration::get('PS_REWRITING_SETTINGS') ? 'cl.id_cms, cl.link_rewrite, cl.id_lang' : 'cl.id_cms').
			// ' FROM '._DB_PREFIX_.'cms_lang cl
			// LEFT JOIN '._DB_PREFIX_.'lang l ON (cl.id_lang = l.id_lang)
			// WHERE l.`active` = 1
			// ORDER BY cl.id_cms, cl.id_lang ASC';
		// elseif (Module::isInstalled('blockcms'))
			// $sql_cms = '
			// SELECT DISTINCT '.(Configuration::get('PS_REWRITING_SETTINGS') ? 'cl.id_cms, cl.link_rewrite, cl.id_lang' : 'cl.id_cms').
			// ' FROM '._DB_PREFIX_.'cms_block_page b
			// LEFT JOIN '._DB_PREFIX_.'cms_lang cl ON (b.id_cms = cl.id_cms)
			// LEFT JOIN '._DB_PREFIX_.'lang l ON (cl.id_lang = l.id_lang)
			// WHERE l.`active` = 1
			// ORDER BY cl.id_cms, cl.id_lang ASC';

		// $cmss = Db::getInstance(_PS_USE_SQL_SLAVE_)->ExecuteS($sql_cms);
		// foreach($cmss AS $cms)
		// {
			// $tmpLink = Configuration::get('PS_REWRITING_SETTINGS') ? $link->getCMSLink((int)$cms['id_cms'], $cms['link_rewrite'], false, (int)$cms['id_lang']) : $link->getCMSLink((int)$cms['id_cms']);
			// $this->_addSitemapNode($xml, $tmpLink, '0.8', 'daily');
		// }

08-11-2011

Prestashop 1.4.5 liste des catégories pour module

Lors de la création d’un module, vous lui affectez une catégorie dans laquelle vous pouvez activer ce module.

ex pour affecter la catégorie front office:

$this->tab = 'front_office_features';

Voiçi donc la liste des catégories disponible

administration
advertising_marketing
analytics_stats
billing_invoicing
checkout
content_management
export
front_office_features
i18n_localization
merchandizing
migration_tools
payments_gateways
payment_security
pricing_promotion
quick_bulk_update
search_filter
seo
shipping_logistics
slideshows
smart_shopping
social_networks

08-11-2011

Prestashop 1.4.5… mettre les numéros de tel sur une ligne

Mettre les numéros de téléphone fixe et portable sur une seule ligne, page mes adresses des étapes du panier

Fichier order-address.tpl

1 on n’affiche pas le champ phone_mobile
2 quand c’est le champ phone, on affiche phone et phone_mobile

function appendAddressList(dest_comp, values, fields_name)
{ldelim}
	for (var item in fields_name)
	{ldelim}
		var name = fields_name[item];
		var value = getFieldValue(name, values);
		if (value != "" && name != 'phone_mobile')
		{ldelim}
			var new_li = document.createElement('li');
			new_li.className = 'address_'+ name;
			new_li.innerHTML = getFieldValue(name, values);
			dest_comp.append(new_li);
		{rdelim}
	{rdelim}
{rdelim}
function getFieldValue(field_name, values)
{ldelim}
	if(field_name == 'phone')
	{ldelim}
		field_name = "phone phone_mobile"
		if(values["phone"] == '')
		{ldelim}
			return values["phone_mobile"];
		{rdelim}
		else if(values["phone_mobile"] == '')
		{ldelim}
			return values["phone"];
		{rdelim}
		else
		{ldelim}
			return values["phone"] + " / " + values["phone_mobile"];
		{rdelim}
	{rdelim}
	var reg=new RegExp("[ ]+", "g");

	var items = field_name.split(reg);
	var vals = new Array();

	for (var field_item in items)
		vals.push(values[items[field_item]]);
	return vals.join(" ");
{rdelim}

19-10-2011

Prestashop 1.4.5.1 override 1

Astuce 1
Dans mon précédent article je vous ai montré comment créer un hook pour la page order-adress.tpl, dans le tutoriel je présente une redéfinition de méthode (override) de classe enfant.
Dans ce cas dans la méthode que nous redéfinissons, nous re-écrivons le contenu puis ajoutons nos fonctions derrière.

Si vous avez juste besoin d’ajouter un bout de code à la suite dans ce cas vous pouvez raccourcir la méthode en utilisant parent:: le fameux this.super() …

Exemple: nous ajoutons un hook à la méthode de la page adresses des étapes de commande

<?php
class ParentOrderController extends ParentOrderControllerCore
{
	protected function _assignAddress()
	{
		parent::_assignAddress();
		self::$smarty->assign(array('HOOK_ORDERADRESS' => Module::hookExec('orderAdress')));
	}
}
?>

19-10-2011

Prestashop 1.4.5.1 hook et surcharge exemple 1

Dans les dernières versions de prestashop, il est possible de surcharger (override) les classes principales (core / coeur).

Pourquoi surcharger?
- Pour éviter de travailler sur les fichiers maîtres et pour pouvoir faire ainsi des mises à jour (surtout de sécurité) de prestashop en prenant un minimum de risque.

Petit exemple d’utilisation des hook dans la version 1.4.5.1 de prestashop avec l’ajout d’un hook dans la page order-adress.tpl qui par defaut ne contient pas de hook (et j’en avais besoin)…

1- on insert une ligne dans la table ps_hook de votre base de donnée
nom du hook:orderAdresse

2: on va surcharger la méthode _assignAddress() de la classe controllers/ParentOrderController qui est exécutée à l’étape adresse du pannier.
le lien du fichier sera override/controllers/ParentOrderController.php
On y ajoute à la fin le code suivant

self::$smarty->assign(array('HOOK_ORDERADRESS' => Module::hookExec('orderAdress')));

résultat

<?php
class ParentOrderController extends ParentOrderControllerCore
{
	protected function _assignAddress()
	{
		parent::_assignAddress();
		self::$smarty->assign(array('HOOK_ORDERADRESS' => Module::hookExec('orderAdress')));
	}
}
?>

3: on ajoute l’enregistrement du hook dans la méthode install() de notre module

if (!parent::install()
//etc...
OR !$this->registerHook('orderAdress')
)

4:on ajoute la méthode / fonction qui sera appelée (hookorderAdress) dans notre module, il faut juste rajouter hook devant

public function hookorderAdress($params)
{
	echo "ALORSSSSS";;
}

5: On ajoute l’appel à la méthode / fonction dans le fichier order-adress.tpl de votre thème a

{$HOOK_ORDERADRESS}

18-10-2011

Prestashop template-modules variables

Liste de variables globales que vous pouvez utiliser dans vos fichiers template / modules tpl

{$base_dir}
url du site
{$base_dir_ssl}
url https du site
{$content_dir}
Url complète jusqu’au dossier racine
{$img_ps_dir}
dossier img à la racine du site
{$img_dir}
dossier img du thème
{$css_dir}
dossier css du thème
{$js_dir}
dossier js (javascript) situé à la racine du site
{$tpl_dir}
dossiers du thème
{$modules_dir}
dossiers des modules
{$mail_dir}
dossier mail
{$lang_iso}
Code ISO du language courant
{$come_from}
Url absolue de la page précédente
{$shop_name}
Nom de la boutique
{$cart_qties}
Nombre produits dans le panier
{$cart}
Contenu du panier (array)
{$currencies}
Liste des devises disponibles (array)
{$id_currency_cookie}
Identifiant de la devise courante.
{$languages}
Liste des langages disponibles dans la boutique (array)
{$logged}
booléen, etat de connection utilisateur
{$page_name}
Nom de la page actuelle
{$customerName}
Nom et prénom du client connecté.
{$priceDisplay}
Paramètre actuel de l’affichage des prix (identifiant).

lien
emilienmalbranche

18-10-2011

Prestashop template-module: déclarer une variable

Normalement les variable du système de template (smarty) de prestashop se déclarent dans votre controleur de la façon suivante:

$smarty-&gt;assign('nom-variable', 'valeur variable lalala');

Et s’utilisent comme ça:

affiche la valeur: {$nom-variable}

Il se peut que vous ayez besoin de déclarer une variable directement dans la vue (fichier tpl)
Dans ce cas la syntaxe est la suivante:

{assign var=&quot;nom-variable&quot; value=&quot;valeur variable lalala&quot;}

que vous pouvez ensuite utiliser de la même manière:

affiche la valeur: {$nom-variable}

liens utiles: >> fonction assign sur template smarty

18-10-2011

Prestashop 1.4.5.1 registerHook liste

La liste des hook par defaut (66 en tout triés par ordre alphabétique);
Vous pouvez surcharger ces hook avec la méthode registerHook dans vos modules
ex:

$this->registerHook('extraCarrier') 

Pour ensuite travailler sur la fonction correspondante:

public function hookExtraCarrier($params){ ... } 
addproduct
Product creation
adminCustomers
Display in Back-Office
adminOrder
Display in Back-Office
AdminStatsModules
Stats – Modules
afterCreateHtaccess
After htaccess creation
afterSaveAdminMeta
After save configuration in AdminMeta
authentication
Successful customer authentication
backBeforePayment
Redirect in order process
backOfficeFooter
Administration panel footer
backOfficeHeader
Administration panel header
backOfficeHome
Administration panel homepage
backOfficeTop
Administration panel hover the tabs
beforeAuthentication
Before Authentication
beforeCarrier
Before carrier list
cancelProduct
Product cancelled
cart
Cart creation and update
categoryAddition
Category creation
categoryDeletion
Category removal
categoryUpdate
Category modification
createAccount
Successful customer create account
createAccountForm
Customer account creation form
createAccountTop
Block above the form for create an account
customerAccount
Customer account page display in front office
deleteproduct
Product deletion
deleteProductAttribute
Product Attribute Deletion
extraCarrier
Extra carrier
extraLeft
Extra actions on the product page
extraProductComparison
Extra Product Comparison
extraRight
Extra actions on the product page
footer
Footer
GraphEngine
Graph Engines
GridEngine
Grid Engines
header
Header of pages
home
Homepage content
invoice
Invoice
leftColumn
Left column blocks
newOrder
New orders
orderConfirmation
Order confirmation page
orderDetail
Order Detail
orderDetailDisplayed
Order detail displayed
orderReturn
Product returned
orderSlip
Called when a order slip is created
payment
Payment
paymentCCAdded
Payment CC added
paymentConfirm
Payment confirmation
paymentReturn
Payment return
paymentTop
Top of payment page
PDFInvoice
PDF Invoice
postUpdateOrderStatus
Post update of order status
processCarrier
Carrier Process
productActions
Product actions
productfooter
Product footer
productOutOfStock
Product out of stock
productTab
Tabs on product page
productTabContent
Content of tabs on product page
rightColumn
Right column blocks
search
Search
shoppingCart
Shopping cart footer
shoppingCartExtra
Shopping cart extra button
top
Top of pages
updateCarrier
Carrier Update
updateOrderStatus
Order
updateproduct
Product Update
updateProductAttribute
Product attribute update
updateQuantity
Quantity update
watermark
Watermark

14-10-2011

Prestashop: smarty boucle foreach 1

Le système de template de prestashop (smarty) demande une certaine syntaxe pour boucler sur un tableau:

Exemple:

//php
$tab = array(1, 2, 3);
$smarty->assign('tab', $tab);

//tpl
{foreach from=$tab item=resultat}
{$resultat}
{/foreach}

//affiche 123

Nous verrons à la suite les variantes de tableaux, sous-tableaux (avec indice numérique et texte)

12-10-2011

Prestashop : désactiver les bons de réduction

Comment retirer / cacher l’affichage « Mes bons de réduction » sur la page Mon compte. ?

Dans votre page d’administration de votre boutique:

Administration => Onglet Paiement => Bons de réduction => Activer les bons, case à cocher non

11-10-2011

Prestashop : désactiver emballage recyclé

Pour désactiver l’affichage « J’accepte de recevoir ma commande dans un emballage recyclé« , avec le choix de la case à cocher …

Il faut aller dans l’administration de votre site:

Préférences => Proposer des emballages cadeaux => cocher Non

11-10-2011

Prestashop: nombre d’articles en page catégorie

Pour augmenter le nombre d’articles / produits affichés dans une page catégorie, qui par défaut est de 10:

dans l’administration de votre boutique:

Préférences => produits => Produits par page

07-10-2011

Prestashop: comment modifier un thème ?

Pour modifier un thème, si vous voulez voir apparaître les modifications, il vous faut Forcer la compilation Smarty.

Smarty est le moteur de template utilisé par prestashop, du MVC, cette solution optimise le site en séparant les couches vue/controlleur et en mettant en cache les pages.

Pour voir vos modifications apparaître  il suffit de selectionner Oui dans la page des préférences / performances / Smarty
En même temps désactivez la mise en cache …

Préférences = > Performances => Smarty => Forcer la compilation => Oui
Préférences = > Performances => Smarty => Cache => Non

07-10-2011

Prestashop: import des caractéristiques produit

Lors de l’ importation de produits sur prestashop (outil=>import), vous avez la possibilité d’insérer les caractéristiques  et leurs valeurs.

Il vous faut avoir au préalable rempli au moins les champs de caractéristiques (Catalogue => Caractéristiques => Ajouter une nouvelle caractéristique )
Vous n’êtes pas obligé de remplir les listes de valeur dans les paramètres, cette que vous aurez saisi dans votre fichier csv s’insérera automatiquement.

Ensuite dans l’étape Vos données de l’import ( Outils > Import => etc….)

Dans chaque colonne de caractéristique, choisissez ‘Caractéristiques‘ dans la liste de choix, un champ va s’ajouter automatiquement dessous
saisissez le nom de votre caractéristique et cliquez bien sur ok

 

Cet outil est vraiment pratique et vous permet d’importer des sites magento, os-commerce, virtuemart etc… avec un minimum voir aucune perte de données si c’est bien fait.

06-10-2011

Prestashop importer des catégories et sous catégories

Prestashop fournit dans son back office un outil pour importer des données (produits, catégories, déclinaisons, clients, adresses, fabrcants, fournisseurs)

L’import repose sur un fichier formatté en csv (un séparateur de champ est utilisé), excel ou openoffice permet l’enregistrement des tableaux sous ce format…

Seul la colonne Nom est obligatoire, mais il est intéressant de  pouvoir insérer d’autres informations dans la cas d’une migration depuis un autre service (os commerce, magento …)

Voici un exemple de fichier excel utilisé pour le test d’import

Il y a deux catégories (2 et 3) qui dépendent de la catégorie principale (accueil), il faut donc toujours commencer par 2 pour l’identifiant.
Il vous suffit en suite de mettre la catégorie parente dans un champ (Categorie parent), à noter que l’orthographe de la première ligne ne sert que d’aide mémoire.
Attention, les caractères spéciaux (accents ne sont pas acceptés pour les champs meta, url simplifié …)

Enregistrez votre tableau sous le format csv
Fichier => enregistrer sous  et choisissez l’extension .csv (exemple ici avec openOffice)

Puis allez dans le back office de prestashop onglet Outils => puis menu Import

Parcourir pour prendre votre fichier

(Attention si vous re-faites un import, il se peut que prestashop conserve l’ancienne version, il suffit dans ce cas de renommer le fichier modifié …)

puis Chargement des fichiers pour importer

Configurez le séparateur (j’ai choisis le ; ) selon votre format d’export csv, puis Etape suivante

Vérifiez que vos colonne correspondent bien à la sélection du champ à importer, ici j’ai fais exprès de les mettre dans l’ordre…
Ignorez la première ligne en mettant 1 dans le champ Sauter
Puis Importer les données

Ne vous inquiétez pas des avertissements de liens re-écris, prestashop a seulement remplacé les espaces par des tirets et retiré les accents pour le lien simplifié…

 

Pour des besoins spécifiques (migration etc…) vous pouvez me contacter.

 

 

 

05-10-2011

So Colissimo Simplicité Liberté ou Flexibilité ?

SIMPLICITE
La solution simplicité repose sur une interface développée par la poste, à intégrer via un module.
Ce module est proposé lors de l’installation de prestashop (1.4.4.1), il est aussi disponible en téléchargement sur la page addons
Vous êtes dépendant du développement des page la poste

LIBERTE
La solution liberté permet une intégration personnalisée des solutions so colissimo en utilisant des services ftp et des transferts de fichiers EDI, cette solution tend à être remplacée par le choix flexibilité en cours de finalisation

FLEXIBILITE
La solution flexibilité tout comme la solution liberté permet une intégration personnalisée des solutions so colissimo.
Disponible depuis août 2011.
Elle utilise des échanges par web service, bien plus rapide et plus simple à intégrer, certains modules sont déjà développés par des indépendants, un module officiel sera prochainement disponible.
Bien évidemment l’avantage de cette solution est de pouvoir personnaliser l’interface selon son site, il est donc nécessaire de faire appel à un développeur pour vous faire l’intégration de cette solution, le module ne servira donc que de base de travail.

 

Je vous recommande donc la solution flexibilité…

liens:
So colissimo flexibilité: connexion aux web services en https

05-10-2011

Prestashop 1.4.* So colissimo

La possibilité d’utiliser les services de livraison So Colissimo est offerte lors de l’installation de prestashop (1.4.4.1)
Ce choix est à sélectionner si vous avez un contrat option simplicité avec la poste

vous trouverez également le module sur le site prestashop section modules
http://addons.prestashop.com/fr/transport-logistique/1745-so-colissimo.html

05-10-2011

Installation Prestashop mode basique ou mode complet ?

Choix du Mode basique ou Mode complet ?

Le mode complet si c’est la première fois que vous installez prestashop
Le mode basique si vous voulez activer vous même les modules supplémentaires

Liste des modules du mode basique (je vous fais pas la traduction …) de la version 1.4.4.1:

payment => Payment
newOrder => New orders
paymentConfirm => Payment confirmation
paymentReturn => Payment return
updateQuantity => Quantity update
rightColumn => Right column blocks
leftColumn => Left column blocks
home => Homepage content
header => Header of pages
cart => Cart creation and update
authentication => Successful customer authentication
addproduct => Product creation
updateproduct => Product Update
top => Top of pages
extraRight => Extra actions on the product page
deleteproduct => Product deletion
productfooter => Product footer
invoice => Invoice
updateOrderStatus => Order
adminOrder => Display in Back-Office
footer => Footer
PDFInvoice => PDF Invoice
adminCustomers => Display in Back-Office
orderConfirmation => Order confirmation page
createAccount => Successful customer create account
customerAccount => Customer account page display in front office
orderSlip => Called when a order slip is created
productTab => Tabs on product page
productTabContent => Content of tabs on product page
shoppingCart => Shopping cart footer
createAccountForm => Customer account creation form
AdminStatsModules => Stats - Modules
GraphEngine => Graph Engines
orderReturn => Product returned
productActions => Product actions
backOfficeHome => Administration panel homepage
GridEngine => Grid Engines
watermark => Watermark
cancelProduct => Product cancelled
extraLeft => Extra actions on the product page
productOutOfStock => Product out of stock
updateProductAttribute => Product attribute update
extraCarrier => Extra carrier
shoppingCartExtra => Shopping cart extra button
search => Search
backBeforePayment => Redirect in order process
updateCarrier => Carrier Update
postUpdateOrderStatus => Post update of order status
createAccountTop => Block above the form for create an account
backOfficeHeader => Administration panel header
backOfficeTop => Administration panel hover the tabs
backOfficeFooter => Administration panel footer
deleteProductAttribute => Product Attribute Deletion
processCarrier => Carrier Process
orderDetail => Order Detail
beforeCarrier => Before carrier list
orderDetailDisplayed => Order detail displayed
paymentCCAdded => Payment CC added
extraProductComparison => Extra Product Comparison
categoryAddition => Category creation
categoryUpdate => Category modification
categoryDeletion => Category removal
beforeAuthentication => Before Authentication
paymentTop => Top of payment page
afterCreateHtaccess => After htaccess creation
afterSaveAdminMeta => After save configuration in AdminMeta

Liste des modules supplémentaires dans le mode complet de la version 1.4.4.1:

homefeatured
gsitemap
cheque
moneybookers
editorial
bankwire
blockadvertising
blockbestsellers
blockcart
blockcategories
blockcurrencies
blockcms
blocklanguages
blockmanufacturer
blockmyaccount
blocknewproducts
blockpaymentlogo
blockpermanentlinks
blocksearch
blockspecials
blocktags
blockuserinfo
blockviewed
statsdata
statsvisits
statssales
statsregistrations
statspersonalinfos
statslive
statsequipment
statscatalog
graphvisifire
graphxmlswfcharts
graphgooglechart
graphartichow
gridhtml
statsbestcustomers
statsorigin
pagesnotfound
sekeywords
statsproduct
statsbestproducts
statsbestcategories
statsbestvouchers
statsbestsuppliers
statscarrier
statsnewsletter
statssearch
statscheckup
statsstock
blockstore
statsforecast

05-10-2011

Installer prestashop 1.4.4.1 rapidement sur dédié

Astuce
Installer un prestashop 1.4.4.1 (dernière version à ce jour) rapidement sur un dédié.

Les liens de téléchargement
- sur prestashop: http://www.prestashop.com/download/prestashop_1.4.4.1.zip
- sur google code: http://prestashop.googlecode.com/files/prestashop_1.4.4.1.zip

Solutions de transfert
- soit par ftp (filezilla …)
- soit avec mon petit script ci dessous qui fera la même chose mais directement du serveur dédié
fichier install.php à mettre et exécuté sur votre emplacement, puis à supprimer

<?php
exec('wget http://www.prestashop.com/download/prestashop_1.4.4.1.zip');
exec('unzip prestashop_1.4.4.1.zip');
exec('rm prestashop_1.4.4.1.zip');
$realpath = realpath('install.php');
$realpath = str_replace('install.php','',$realpath);
exec('mv  prestashop/* '.$realpath.'');
exec('rmdir prestashop');
?>

Pour la suite je ne vais pas faire de détail, il suffit de suivre les instructions …