Aller au contenu

Articles récents

20
May

Prestashop : Récupérer des produits aléatoirement

Je n’ai trouvé aucune solution sur le web à un problème pourtant très simple : Récupérer une liste d’un certain nombre de produits dans l’ensemble de la boutique PrestaShop de manière aléatoire.

Pour y arriver, la manipulation est très simple, nous allons simplement dupliquer la fonction getProducts() de la classe Category afin de supprimer quelques lignes. Donnez lui le nom que vous souhaitez, ici je l’ai appelée « getRandomShopProducts»

En effet, cette fonction permet uniquement de récupérer des produits dans une catégorie définie, nous allons donc supprimer la close WHERE de la requète SQL générée par cette fonction pour ne pas filtrer les produits par un identifiant de catégorie.

Voici le bout de code que nous supprimons (ligne 636) :

AND cp.`id_category` = '.(int)$this->id

Voici donc la fonction toute prête que vous avons créé :

public function getRandomShopProducts($id_lang, $p, $n, $order_by = null, $order_way = null, $get_total = false, $active = true, $random = true, $random_number_products = 10, $check_access = true, Context $context = null)
	{
		if (!$context)
			$context = Context::getContext();
		if ($check_access && !$this->checkAccess($context->customer->id))
			return false;
 
		$front = true;
		if (!in_array($context->controller->controller_type, array('front', 'modulefront')))
			$front = false;
 
		if ($p < 1) $p = 1;
 
		if (empty($order_by))
			$order_by = 'position';
		else
			/* Fix for all modules which are now using lowercase values for 'orderBy' parameter */
			$order_by = strtolower($order_by);
 
		if (empty($order_way))
			$order_way = 'ASC';
		if ($order_by == 'id_product' || $order_by == 'date_add' || $order_by == 'date_upd')
			$order_by_prefix = 'p';
		elseif ($order_by == 'name')
			$order_by_prefix = 'pl';
		elseif ($order_by == 'manufacturer')
		{
			$order_by_prefix = 'm';
			$order_by = 'name';
		}
		elseif ($order_by == 'position')
			$order_by_prefix = 'cp';
 
		if ($order_by == 'price')
			$order_by = 'orderprice';
 
		if (!Validate::isBool($active) || !Validate::isOrderBy($order_by) || !Validate::isOrderWay($order_way))
			die (Tools::displayError());
 
		$id_supplier = (int)Tools::getValue('id_supplier');
 
		/* Return only the number of products */
		if ($get_total)
		{
			$sql = 'SELECT COUNT(cp.`id_product`) AS total
					FROM `'._DB_PREFIX_.'product` p
					'.Shop::addSqlAssociation('product', 'p').'
					LEFT JOIN `'._DB_PREFIX_.'category_product` cp ON p.`id_product` = cp.`id_product`
					'.
					($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '').
					($active ? ' AND product_shop.`active` = 1' : '').
					($id_supplier ? 'AND p.id_supplier = '.(int)$id_supplier : '');
			return (int)Db::getInstance(_PS_USE_SQL_SLAVE_)->getValue($sql);
		}
 
		$sql = 'SELECT p.*, product_shop.*, stock.out_of_stock, IFNULL(stock.quantity, 0) as quantity, MAX(product_attribute_shop.id_product_attribute) id_product_attribute, product_attribute_shop.minimal_quantity AS product_attribute_minimal_quantity, pl.`description`, pl.`description_short`, pl.`available_now`,
					pl.`available_later`, pl.`link_rewrite`, pl.`meta_description`, pl.`meta_keywords`, pl.`meta_title`, pl.`name`, MAX(image_shop.`id_image`) id_image,
					il.`legend`, m.`name` AS manufacturer_name, cl.`name` AS category_default,
					DATEDIFF(product_shop.`date_add`, DATE_SUB(NOW(),
					INTERVAL '.(Validate::isUnsignedInt(Configuration::get('PS_NB_DAYS_NEW_PRODUCT')) ? Configuration::get('PS_NB_DAYS_NEW_PRODUCT') : 20).'
						DAY)) > 0 AS new, product_shop.price AS orderprice
				FROM `'._DB_PREFIX_.'category_product` cp
				LEFT JOIN `'._DB_PREFIX_.'product` p
					ON p.`id_product` = cp.`id_product`
				'.Shop::addSqlAssociation('product', 'p').'
				LEFT JOIN `'._DB_PREFIX_.'product_attribute` pa
				ON (p.`id_product` = pa.`id_product`)
				'.Shop::addSqlAssociation('product_attribute', 'pa', false, 'product_attribute_shop.`default_on` = 1').'
				'.Product::sqlStock('p', 'product_attribute_shop', false, $context->shop).'
				LEFT JOIN `'._DB_PREFIX_.'category_lang` cl
					ON (product_shop.`id_category_default` = cl.`id_category`
					AND cl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('cl').')
				LEFT JOIN `'._DB_PREFIX_.'product_lang` pl
					ON (p.`id_product` = pl.`id_product`
					AND pl.`id_lang` = '.(int)$id_lang.Shop::addSqlRestrictionOnLang('pl').')
				LEFT JOIN `'._DB_PREFIX_.'image` i
					ON (i.`id_product` = p.`id_product`)'.
				Shop::addSqlAssociation('image', 'i', false, 'image_shop.cover=1').'
				LEFT JOIN `'._DB_PREFIX_.'image_lang` il
					ON (image_shop.`id_image` = il.`id_image`
					AND il.`id_lang` = '.(int)$id_lang.')
				LEFT JOIN `'._DB_PREFIX_.'manufacturer` m
					ON m.`id_manufacturer` = p.`id_manufacturer`
				WHERE product_shop.`id_shop` = '.(int)$context->shop->id
					.($active ? ' AND product_shop.`active` = 1' : '')
					.($front ? ' AND product_shop.`visibility` IN ("both", "catalog")' : '')
					.($id_supplier ? ' AND p.id_supplier = '.(int)$id_supplier : '')
					.' GROUP BY product_shop.id_product';
 
		if ($random === true)
		{
			$sql .= ' ORDER BY RAND()';
			$sql .= ' LIMIT 0, '.(int)$random_number_products;
		}
		else
			$sql .= ' ORDER BY '.(isset($order_by_prefix) ? $order_by_prefix.'.' : '').'`'.pSQL($order_by).'` '.pSQL($order_way).'
			LIMIT '.(((int)$p - 1) * (int)$n).','.(int)$n;
 
		$result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
		if ($order_by == 'orderprice')
			Tools::orderbyPrice($result, $order_way);
 
		if (!$result)
			return array();
 
		/* Modify SQL result */
		return Product::getProductsProperties($id_lang, $result);
	}

Vous remarquez que nous avons passé la valeur du paramètre «random» à «true».
Votre fonction est prête à être utilisée, vous pouvez par exemple récupérer 10 produits de votre boutique aléatoirement de cette manière :

Category::getRandomShopProducts((int)Context::getContext()->language->id, 1, 10);

Libre à vous d’utiliser les autres paramètres de la fonction pour trier vos produits, sélectionner la page ainsi que le nombre de produits.

Manipulation exécutée sous Prestashop 1.5.x mais tout à fait réalisable sur les versions précédentes.

Tips : Utilisez de préférence l’override pour rajouter vos fonctions personnalisées !

6
Oct

Comment bien choisir son hébergement PrestaShop

Votre boutique est prête à être déployée, le thème est en place, les produits ont leur stock au maximum et les modules de paiement sont prêts à tourner, cependant viens l’heure du choix de l’hébergeur, et plus particulièrement du choix du type d’hébergement.

Sur le net, on trouve de tout, des hébergements gratuits, payants, avec de multiples offres dont on ne comprend pas toujours les spécifications.
Je vais tâcher de vous guider afin que vous puissiez vous orienter vers un hébergement convenable à la dimension de votre boutique PrestaShop.

A qui confier ma boutique ?

Il existe des dizaines et des dizaines d’hébergeurs, et vous ne manquerez pas d’en trouver facilement grâce à notre célèbre moteur de recherche. Cependant, il convient en général de se tourner vers un hébergement de confiance. J’entends par confiance, le fait que l’hébergeur ai déjà une longue expérience, qu’il soit “reconnu” pour ses offres qualitatives, et surtout que les retours de ses clients soient en majorité positifs.

“Fuyez les hébergements gratuits et privilégiez un serveur situé en Europe voir en France…”

Pour cela je vais vous diriger vers le classement des meilleurs hébergeurs selon les e-commerçants sous PrestaShop.
On ne peut que constater que OVH, le plus gros hébergeur de France ( d’Europe ? ) est loin devant ses concurrents, n’hésitez donc pas à vous tourner vers ce dernier. Le site sur lequel vous vous trouvez actuellement est d’ailleurs hébergé lui-même chez OVH. Cependant, il s’agit tout de même de choisir la bonne offre…

Mutualisé ? Dédié ? VPS ? quésaquo ?hebergement prestashop

Un serveur est une machine un peu comme l’ordinateur que vous pouvez avoir chez vous.
Un serveur mutualisé est une machine qui héberge plusieurs personnes, plusieurs sites, les clients se partagent donc toute la puissance du serveur sur lequel ils sont hébergés.
Un serveur dédié est comme son nom l’indique dédié à un hébergement, ou plutôt à un seul et unique client. Vous pourrez alors avoir accès à beaucoup plus de configuration au niveau serveur, installer des modules complémentaires ect..
Un serveur VPS est une sorte de mix entre mutualisé et dédié, la machine est partagée mais à la façon d’un dédié, sur lequel vous pourrez également accéder à bien plus de configuration d’un mutualisé.
Je vous conseille fortement de vous tourner vers un serveur dédié, ou au minimum un VPS, les mutualisés étant trop peu fiables.

On me propose plusieurs configurations possibles, je fais quoi ?

Prestashop requière un minimum de 2Go de RAM pour faire tourner convenablement, il conviendra de choisir un minimum de 4Go voir plus si votre boutique comporte plusieurs dizaines de milliers de produits.

solution sauvegarde prestashopNe surtout pas négliger les backups !

Renseignez vous sur les solutions de sauvegarde proposées, il est indispensable d’effectuer au minimum une sauvegarde journalière de la base de données.

Organisez votre hébergement

Une fois votre hébergement mis en place, déployez deux voir trois versions de votre boutique avec autant de bases de données différentes.
Mais pourquoi mettre trois fois mon site en ligne ?
- Une version de développement qui vous permettra de développer, intégrer et déployer de nouveaux éléments sur votre site au cours du temps.
- Une version de pré-production qui sera identique à la version de production, elle permet de tester les modifications apportées.
- Une version de production qui sera celle visitée par vos clients.

Si vous vous posez toujours des questions concernant le choix d’un hébergement, n’hésitez pas à poster un commentaire ci-dessous. Il y aura toujours une réponse ;)

 

3
Oct

Comment installer un kit de paiement par carte bancaire sous PrestaShop

Nombreux se sont confrontés à la tâche plutôt effrayante d’installer un module de paiement sécurisé par carte bancaire sur sa boutique en ligne et moi le premier, c’est pourquoi je vais vous donner les solutions pour y parvenir le plus simplement possible.
C’est vrai que le paiement est une procédure sensible sur un e-commerce, il doit être fiable, simple et sécurisé et ses quelques adjectifs peuvent faire peur lorsque l’on connait peu le développement et que l’on se retrouve à l’étape finale de la création de sa boutique : la mise en place du paiement par carte bancaire.
Ce moyen de paiement est indispensable sur toute boutique e-commerce, même si Paypal propose un paiement direct par carte bancaire sans être obligé pour le client de posséder un compte Paypal, le paiement par carte bancaire directement sur le plateforme de votre banque restera le moyen le plus rapide pour payer un achat sur votre boutique et cet argument suffit à le rendre indispensable.

Plus la procédure est longue et fastidieuse, plus le client a de chances de se décourager.

paiement cb prestashopAdministrativement, vous devez, auprès de votre banque, faire une demande de création de compte pour e-commerçant, cette procédure est en général simple et se terminera par un joli mail de votre banque vous fournissant le fameux certificat nécessaire à l’identification lors de chaque paiement vers la plate-forme de votre banque et également un kit d’installation PHP/Linux ( PHP car nous sommes sur Prestashop et Linux car généralement utilisé comme OS Serveur par votre hébergeur ).
C’est justement lorsque l’on reçoit ce paquet de code que l’on pourrait se sentir perdu, face à un mur infranchissable.

N’ayez crainte ! sauf peut-être si…

En effet, n’ayez plus peur, je vais vous donner les solutions, sauf peut-être si vous souscrivez auprès d’une banque peu connu et qui n’est donc pas prise en charge par le module que je vais vous proposer.
Vous êtes donc à la bonne adresse si votre banque figure parmi la liste ci-dessous :

  • Banque populaire ( CyberPlus )
  • Crédit Agricole ( E-transactions )
  • CCF/HSBC ( ElysNet )
  • BNP Bnp Paribas ( Mercanet )
  • La banque postale
  • LCL Le crédit lyonnais ( Sherlocks )
  • Société générale ( Sogenactif )
  • Crédit du nord ( WebAffaires )
  • Citélis
  • Société Marseillaise de Crédit

Pour mettre en place le paiement sur votre boutique PrestaShop, vous allez avoir besoin



Merci à Damien VERON pour la réalisation de ce module.

Mise en place du module.

paiement sécurisé prestashopTéléchargez donc le module et installez le directement sur votre boutique.
Notez qu’une documentation est disponible à l’intérieur du fichier zip.
Installez le module et entrez au sein de la configuration.
À partir de ce moment, vous pouvez déjà accéder au mode de paiement CB et à la plateforme de test en effectuant un processus de paiement tel un client. Pour effectuez des tests, choisissez votre banque dans la liste des serveurs bancaires et renseignez-vous auprès de cette dernière pour connaître les différents numéros de carte de test.
Je vous invite dès à présent à effectuer divers tests et à vérifier si la commande se passe normalement.
Si tout se déroule bien, vous n’avez plus qu’à uploader votre certificat dans le module et passer en mode production !
La configuration avancée vous permet également de choisir :

  • Le statut de la commande suite au paiement
  • Les cartes bancaires autorisées
  • Les chemins vers les fichiers de configuration si vous souhaitez les modifier
  • L’emplacement des images
  • La conservation des logs
  • L’identifiant de transaction à partir duquel on commencera à incrémenter ces dernières
  • Le paiement en 2 ou 3 fois
  • Montant minimum du panier
  • Et bien d’autres…

 

Si vous avez des questions, n’hésitez pas à poster un commentaire !

Ce module est gratuit et a été développé par la communauté, rien de vous empêche de vous tourner vers des solutions payantes.