Montant global du panier sans taxe avec PHP 7 et Magento 1.9


Passant à PHP 7 et magento 1.9 pour l’hébergement et les versions de mes boutiques, j’ai remarqué un bug plutôt génant dans le panier.

Si vous utiliser l’éco-participation sur vos produits (FPT), la liste des produits et la fiche produit affichent bien le bon montant du produit (prix du produit TTC + taxe inclus), mais en ajoutant le produit au panier, le montant global du panier est faux. Il manque le montant de cette éco-participation.

On le voit bien avec le sous-total qui est inférieur au total TTC.

Plutôt génant non ?

Et vous savez le pire ? C’est que ce bug n’apparait qu’en PHP 7 ! Passez à PHP 5 et vous verrez que ce bug a disparu. C’est à n’y rien comprendre.

 

Voici donc la solution pour remédier à cela. Continuer à lire … « Montant global du panier sans taxe avec PHP 7 et Magento 1.9 »

Réindexation des prix : Column not found: 1054 Unknown column ‘cwd.date’ in ‘field list’


Lors d’une migration Magento version 1.8 à 1.9.3, un problème m’est apparu sur les indexes.

En effet la réindexation des prix bloquait.
Dans les logs (var/log/exception.log) une erreur apparait :

DEBUG (7): Exception message: SQLSTATE[42S22]: Column not found: 1054 Unknown column 'cwd.date' in 'field list'

Si comme moi vous utilisez le module Innoext Advanced Store Pricing, alors ne cherchez pas, voici le coupable !

Dans app/code/local/Innoexts/InnoCore/Helper/ ouvrir le fichier Version.php et trouver la fonction

protected function getEEMinVersion()
{
return '1.8.0.0';
}

Remplacer par :

protected function getEEMinVersion()
{
return '1.9.9.9';
}

Ici nous indiquons que la version minimal compatible de magento est la  1.9.x.x et non 1.8 comme indiqué précédemment.

Sauvergardez, réindexez, et magie ça passe au vert !

Ajouter des produits sur la home page avec Magento 1.9 et le thème RWD


Depuis l’introduction des permissions des blocks dans Magento 1.9, une petite subtilité pour ajouter des produits sur la home page est apparue.

Pour ajouter des produits sur la home page avec le thème de base ou le thème RWD, j’appelle le block « catalog/product_list » et les produits de la catégorie ID 3.

Voici la syntaxe à coller dans le contenu de la page CMS « Home » accessible depuis l’administration :

{{block type="catalog/product_list" category_id="3" template="catalog/product/list.phtml"}}

Cependant, cela ne suffit pas, car vous ne verrez rien apparaitre à l’écran. Si vous avez activé vos logs sur votre installation, vous verrez apparaitre le message d’erreur suivant

DEBUG (7): Security problem: catalog/product_list has not been whitelisted.

Des permissions ont été instaurés pour plus de sécurité et en gros, il faut autoriser l’appelle de notre block pour qu’il puisse apparaître sur la home page.

  • Il faut donc aller dans l’administration et naviguer dans Système > Permissions > Blocks.
  • Ajouter un block par le bouton « ajouter un nouveau bloc »
  • Dans « Block Name » renseigner le nom du block, dans notre cas « catalog/product_list », et l’activer par « Oui » dans la liste sur le champs « Is Allowed ».

Voilà vos produits apparaissent désormais sur la page d’accueil.

Patch SUPEE-6285 Accès refusé sur l’administration


Si vous passez le patch de sécurité SUPEE-6285 (et je vous le recommande fortement) il se trouve que vous pourriez avoir des problèmes d’accès sur l’administration de Magento.

Le cas se vérifie pour les utilisateurs qui sont rattachés un rôle spécifique qui n’a pas accès à tout (non administrateur donc), et qui voudraientt accéder à un onglet de configuration d’un module rajouté à Magento.

Par exemple, votre client est assigné à un rôle spécifique qui n’a pas accès à tous les onglets de l’administration de Magento, et il veut configurer son Slider en homepage : slider qui est une extension que vous avez été chercher sur le store Magento Connect.
Et bien c’est dans ce cas bien précis que l’utilisateur rencontrera ce beau message : acces-refuse-patch-supee-6285

La raison est que dans le patch, la valeur de

Mage_Adminhtml_Controller_Action::_isAllowed()

a été passé de « True » à Mage::getSingleton('admin/session')->isAllowed('admin')

Ce qui a pour conséquence pour les extensions qui ne surchargent pas cette méthode, d’avoir besoin de toutes les permissions (admin) pour accéder à la page de configuration.
Il faut donc aller ajouter un bout de code dans un fichier du module.

Voici la solution à ce problème génant :

Aller dans app\code\community\NomEditeurdumodule\Nomdumodule\controllers\Adminhtml et ouvrir le fichier PHP NomdumoduleController.php

Dans la class du module il faut ajouter ce bout de code comme dans l’exemple ci-dessous :

/** ajout-correction patch supee-6285 **/
protected function _isAllowed()
{
return true;
}
/** fin-correction patch supee-6285 **/

correction-extension-patch-6285

Avec ça, ça doit remarcher ! Et il faut bien sur le faire pour chaque module importé du Magento Connect et qui aurait une page de configuration sur l’administration.

Testé et approuvé sur Magento 1.7.0.2 et Magento 1.8. Doit aussi marcher sur Magento 1.9 mais je n’ai pas testé.

Montant minimum de commande TTC


De base, le montant minimum de commande, lorsqu’on le renseigne dans l’admin ( système > configuration > ventes ), surveille le sous total HT du panier.

C’est à dire qu’il faudrait renseigner votre montant minimum fixé en HT en admin pour que cela marche correctement.

Seulement il y a un problème, si comme moi vous devez gérez plusieurs taux de tva, la saisie du montant HT n’a plus de sens. Il fallait donc trouver un moyen pour que le montant minimum de commande soit basé sur du TTC au lieu du HT mais qu’en plus il surveille le montant global.

Nous allons donc devoir surcharger le Core, pour éviter d’y toucher directement :

  • dupliquer le fichier « Address.php » situé dans App > Code > Core > Mage > Sales > Model > Quote
  • le coller dans App > Code > Local > Mage > Sales > Model > Quote (arborescence à créer manuellement)
  • Ouvrir le fichier et modifier à la ligne 1025
     if ($this->getBaseSubtotalWithDiscount() < $amount) { 

    par

     if ($this->getBaseGrandTotal() < $amount) { 

getBaseGrandTotal étant ici le total ttc du panier.

Testé et approuvé sur magento 1.7

Impossible de mettre le panier à jour


Un problème surprenant qui vient de m’arriver sur une install multisite : l’impossibilité de mettre à jour la quantité d’un article depuis le panier.

Cela marchait sur le store principal, mais pas sur la vue de chaque magasin supplémentaire.

Aucun message d’erreur flagrant hormis « impossible de mettre à jour le panier » ce qui n’est pas très parlant, par contre dans le fichier « exception.log », un message d’erreur s’affichait bien : cache_dir must be a directory.

En fait l’erreur vient du fait que les sous-magasins, cherchaient  tous à mettre des variables de session en cache sur le serveur et qu’aucun ne trouvaient le répertoire principal. J’ai donc testé la création d’un répertoire de cache ( le plus souvent appelé « tmp » ) dans chaque répertoire de mes magasins situé à la racine, avec les droits en 777 pour Linux ou contrôle total pour IIS, et cela a marché.

Dans le cadre d’une installation multisite, il faut donc ajouter un répertoire de cache pour chaque magasin supplémentaire dans son répertoire dédié à la racine.

Testé et approuvé sur Magento 1.7

Impossible d’ajouter le produit au panier


Un bug qui vient de m’arrivé sur une configuration Magento 1.7 en multi-store.

Sur la fiche article d’un produit d’un store secondaire ( qui ne vient pas de mon store principal en somme ), impossible d’ajouter un produit au panier. Après avoir appuyé sur le bouton d’ajout au panier, le panier s’affiche avec un message disant : « Impossible d’ajouter le produit au panier ».

J’essaye avec produit de mon store principal et là ca marche… alorsque je n’ai pas changé le template.

Le problème vient en fait du bouton d’ajout au panier, sur le produit du store secondaire, qui utilise la méthode onclick= »productAddToCartForm.submit(this) » , celle-ci ne transmet pas la bonne url au panier.

Voici donc la solution à ce problème : Continuer à lire … « Impossible d’ajouter le produit au panier »

Ajouter un produit au panier lorsque celui ci est épuisé


Il vous ai peut être arrivé d’avoir une demande d’un client ou bien même pour vous, d’avoir le besoin de rendre un produit commandable / achetable même si il est épuisé  et que son stock est à 0.

Dans magento, il existe bien une option générale (Système configuration > catalogue > inventaire > options de stock produits > Commande en rupture de stock > Autoriser les quantités négatives et notifier le client) permettant la commande d’un produit lorsque celui ci est en rupture de stock.
Seulement il y a une condition essentielle pour que celà marche, la disponibilité du produit doit être réglé sur « En stock ». Sinon vous n’aurez pas le bouton d’ajout au panier.

Chose qui n’est pas du tout logique, si l’on active cette option générale, c’est que l’on veut forcément qu’un produit épuisé reste disponible à la vente, et ce d’une manière automatique. Et cela pousse à gérer manuellement ses produits un à un, pour passer la disponibilité du produit à en stock lorsque son stock vient de passer à 0.

Pour remédier à cela, voici donc un tuto sur comment rendre un produit commandable lorsque celui-ci a son statut épuisé et une quantité de stock à 0, et ce de façon globale et automatique sans gérer ses produits au cas par cas. Continuer à lire … « Ajouter un produit au panier lorsque celui ci est épuisé »

Ajouter une font family dans le wysiwyg de Magento


Ajouter une police d’écriture supplémentaire dans le wysiwyg de Magento :

  • ouvrir le fichier :  racine_installation_magento/js/tiny_mce/themes/advanced/editor_template.js
  • chercher dans le fichier  theme_advanced_fonts
  • une fois trouver vous devez avoir ceci
    theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif; et ainsi de suite
  • insérer le nom de votre police à la suite d’une autre. Exemple ici avec la police Brock Script :
    theme_advanced_fonts:"Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Brock Script=BrockScript;
  • Si vous enregistrez le fichier, et actualisez votre page cms avec le wysiwyg, dans la liste Font Family vous devriez déjà voir la police Brock Script ajouté. Maintenant il nous faut ajouter le style de la police et les liens vers les fichiers  eot, woff, ttf, et svg.
  • Ouvrir le fichier racine_installation_magento/js/mage/adminhtml/wysiwyg/tiny_mce/themes/advanced/skins/default/content.css
  • Y coller votre code d’importation de font family :
    @font-face {
     font-family: 'BrockScript';
     src: url('../../../../../../../../../skin/frontend/default/montheme/font/BrockScript.eot');
     src: url('../../../../../../../../../skin/frontend/default/montheme/font/BrockScript.eot?#iefix') format('embedded-opentype'),
     url('../../../../../../../../../skin/frontend/default/montheme/font/BrockScript.woff') format('woff'),
     url('../../../../../../../../../skin/frontend/default/montheme/font/BrockScript.svg#myriad_probold') format('svg'),
     url('../../../../../../../../../skin/frontend/default/montheme/font/BrockScript.ttf') format('truetype');
     font-weight: normal;
     font-style: normal;
    }
    
  • Actualiser votre éditeur wysiwyg et voilà !

Testé et validé sur les versions magento 1.5 à 1.7

Unable to find item to save depuis le backend


J’ai téléchargé une banale extension magento qui avait pour but de créer une galerie photos.

L’interface dans le backend est minime : un champ titre, un champ d’upload d’image, un autre activé/désactivé, et une zone texte de contenu.

Après avoir uploadé ma photo et complété mes infos, j’appuie sur sauvegarder et là… un beau message d’erreur sur le backend : Unable to find item to save.

Je regarde dans la console Firebug, dans réseau > HTML, je vois des POST avec un statut 302 et 301 avec l’url « http://monsite.fr/gallery/xxxxxxxxxxxxxxxx &raquo;. Ce qui veut donc dire qu’il y a un problème avec l’url rewriting au niveau de l’admin pour cette extension.

Etant sous serveur windows IIS je tente une règle dans mon fichier web.config (equivalent à .htaccess sur apache) et ça passe. Voici ma solution :

<rule name="no redirect pour admin" stopProcessing="true">
<match url="index.php/(advanced|admin|gallery|local)(.*)" ignoreCase="false" />
<conditions>
<add input="{URL}" pattern="(.*)" ignoreCase="false" negate="false" />
</conditions>
</rule>

code à coller dans votre fichier web.config.

Et voilà ! l’upload marche !  🙂