Magento

Logo MagentoRetrouvez des tutoriels et des astuces dans l’utilisation de Magento.
En tant que développeur certifié Magento 1 je partage avec vous plus de 60 articles traitant à la fois de Magento 1 et de Magento 2, sur des thématiques relativement larges :

  • Création d’attributs
  • Personnalisation pdf
  • Optimisations des performances
  • Quick notes

Magento : exécuter un modèle via le shell ( php CLI )

Voici un script qui vous permettra d’exécuter n’importe quel modèle de Magento via le shell ( PHP CLI )
Celui-ci est à placer dans un fichier « model.php » le dossier « shell » de magento.

Si vous souhaitez par exemple visualiser les données d’un produit vous pouvez saisir la commande suivante

php -f model.php -- -model catalog/product -action load -value 254

Ou également pour envoyer les emails en attente

php -f model.php -- -model core/email_queue -action send

Dans mon cas je l’utilise pour l’éxécution de modèles personnalisés

<?php
 
require_once 'abstract.php';
 
class Hhennes_Shell_Model extends Mage_Shell_Abstract {
       
    public function __construct() {
        parent::__construct();      
    }
    
    /**
     * Execution du script
     */
    public function run() {
        
        try {
                      
            if  ( $this->getArg('model')){
                
                //Gestion de la méthode à tester, par défaut load
                if ( $this->getArg('method'))
                    $method = $this->getArg('method');
                else
                    $method = 'load';
                   
                //Exécution du test
                $model = Mage::getModel($this->getArg('model'))->$method($this->getArg('value'));
                
                //Affichage des données
                Zend_debug::dump($model);
            }
                 
        } catch (Exception $exc) {
            echo $exc->getMessage();
        }
            
    }
    
    
        public function usageHelp()
    {
        return <<<USAGE
Usage:  php -f model.php

Magento : exécuter un modèle via le shell ( php CLI ) Lire la suite »

Magento : email queue non envoyée

J’ai rencontré récemment un problème avec l’envoi des emails de confirmation de commande sur magento version 1.9.0.1.
Contrairement à de plus anciennes versions de magento (et c’est mieux ainsi 🙂 ), les emails ne sont plus envoyés directement après le passage d’une commande.

Ils sont stockés dans la table core_email_queue .

Puis il sont envoyés 100 par 100 via la tâche cron core_email_queue_send_all toutes les minutes.

Sur le serveur hébergeant le site Magento ( dans un environnement chrooté) , cette tâche cron ne fonctionnait pas et le fichier exception.log était remplis de messages de ce type :

exception 'Zend_Mail_Transport_Exception' with message 'Unable to send mail. ' in /www/lib/Zend/Mail/Transport/Sendmail.php:137
Stack trace:
#0 /www/lib/Zend/Mail/Transport/Abstract.php(348): Zend_Mail_Transport_Sendmail->_sendMail()
#1 /www/lib/Zend/Mail.php(1194): Zend_Mail_Transport_Abstract->send(Object(Zend_Mail))
#2 /www/app/code/core/Mage/Core/Model/Email/Queue.php(241): Zend_Mail->send()
#3 [internal function]: Mage_Core_Model_Email_Queue->send(Object(Mage_Cron_Model_Schedule))
#4 /www/app/code/core/Mage/Cron/Model/Observer.php(325): call_user_func_array(Array, Array)
#5 /www/app/code/core/Mage/Cron/Model/Observer.php(72): Mage_Cron_Model_Observer->_processJob(Object(Mage_Cron_Model_Schedule), Object(Mage_Core_Model_Config_Element))
#6 /www/app/code/core/Mage/Core/Model/App.php(1338): Mage_Cron_Model_Observer->dispatch(Object(Varien_Event_Observer))
#7 /www/app/code/core/Mage/Core/Model/App.php(1317): Mage_Core_Model_App->_callObserverMethod(Object(Mage_Cron_Model_Observer), 'dispatch', Object(Varien_Event_Observer))
#8 /www/app/Mage.php(448): Mage_Core_Model_App->dispatchEvent('default', Array)
#9 /www/cron.php(77):

Magento : email queue non envoyée Lire la suite »

Magento : conditionner l’insertion d’une ressource dans un layout xml

Un petit rappel pratique si comme moi vous souhaitez ajouter un fichier css ou js d’un de vos modules sur une page magento via les layout xml, mais que celui-ci doit être conditionné à un paramètre de votre module ( actif ou non )

Voici comment procéder.
Par exemple pour ajouter un fichier css et un fichier js dans la page onepage_index, uniquement si le parametre mymodule/display/onepage/ est actif
Dans le fichier de layout de votre module dans « app/design/frontend/default/theme/layout/yourmodulelayout.xml »
Il faut rajouter la condition ifconfig= »mymodule/display/onepage/ »

<checkout_onepage_index>
<reference name="head">
<action method="addCss" ifconfig="mymodule/display/onepage/">
<stylesheet>namespace/module/css/ui-lightness/jquery-ui-1.8.14.custom.css</stylesheet>
</action>
<action method="addItem" ifconfig="mymodule/display/onepage/">
<type>skin_js</type>
<name>namespace/module/js/jquery-ui-1.8.14.custom.min.js</name>
</action>
</reference>
</checkout_onepage_index>

Magento : conditionner l’insertion d’une ressource dans un layout xml Lire la suite »

Mise en place d’une plateforme d’intégration continue ( Partie 1 )

Afin de suivre le bon déroulement de vos projets, il est important de pouvoir tester de manière régulière que votre applications fonctionne bien.
Ceci peut être réalisé via la mise en place de tests unitaires et fonctionnels, d’analyse de code etc…

Pour suivre cela de manière optimale, la mise en place d’une plateforme d’intégration continue est la suite logique de l’évolution de votre projet dès lors qu’il atteint une taille importante, ou qu’il comporte de nombreuses fonctionnalités spécifiques.

Il existe plusieurs plateforme pour réaliser cela, mais je vais me baser sur la plus connue : Jenkins (ex Hudson )

L’objectif à la fin de ce guide est d’avoir une plateforme de tests fonctionnels opérationnelle.
Celle ci-sera basée sur phpunit et selenium et firefox en mode headless
La procédure étant assez longue, ce sujet va être séparé en 2 articles :

– Installation des éléments nécessaires aux tests fonctionnels
– Installation et configuration de jenkins pour l’exécution des tests fonctionnels

Installation des éléments nécessaires aux tests fonctionnels.

Mise en place d’une plateforme d’intégration continue ( Partie 1 ) Lire la suite »

Magento 1.4.1.1 : Corriger grid des emails transactionnels

Par défaut dans la version 1.4.1.1 de Magento, la grid d’affichage des emails transactionnels ne fonctionne pas.
Les paramètres ne sont pas mémorisés ce qui est relativement gênant lorsqu’on doit chercher des emails à modifier.

Voici donc comment corriger cela rapidement.

En consultant le fichier de la grid app/code/core/Mage/AdminHtlml/Block/System/Email/Template/Grid.php,

j’ai constaté qu’il manquait la fonction  __construct() de la classe dans laquelle l’identifiant de la grid est déterminé, ainsi que la sauvegarde des paramètres de sessions.

Pour faire cela proprement il faut donc copier ce fichier à l’emplacement suivant  : app/code/local/Mage/AdminHtlml/Block/System/Email/Template/Grid.php.

Et rajouter en première fonction du fichier le code suivant :

//Rajout de la fonction construct pour conserver les paramètres des emails lors d'une recherche
public function __construct() {
parent::__construct();
$this->setId('EmailGrid');
$this->setSaveParametersInSession(true);
}

La grid des emails sera bien fonctionnelle après ce changement.…

Magento 1.4.1.1 : Corriger grid des emails transactionnels Lire la suite »

Bonnes pratiques : Mise en place d’un environnement de développement normalisé avec NetBeans

Avec leur multiples contributeurs, la maintenabilité des solutions open-source est relativement complexe.
C’est pourquoi celles-ci instaurent des normes de développement qui garantissent la qualité et l’apparence du code.
Ces normes peuvent avoir pour nom « PSR-1 », « PSR-2 » etc..

Je vais vous détailler comment mettre en place un environnement de développement qui vous permettra de suivre au mieux ces normes.
Selon les développeurs, l’éditeur peut varier, pour ma part j’utilise NetBeans au quotidien et j’en suis vraiment très satisfait.

Je vais donc vous détailler comment procéder pour tout configurer avec cet éditeur 🙂 sous Windows
( Certains points sont communs à l’ensemble des éditeurs // Cette méthode ne prétends pas être la meilleure mais détaille l’ensemble des étapes nécessaires à la mise en place)

Installation de Wampserver

Télécharger le fichier d’installation en 32 ou 64 bits en fonction de votre ordinateur depuis le site : http://www.wampserver.com/
Procéder à l’installation standard de Wampserver dans sa dernière version.
( Nous partirons du postulat que Wamp sera installé dans le dossier c:/wamp/ )

Une fois l’installation de wampserver effectuée, il faut se connecter à la console Windows ( Touches Windows + R / puis cmd )
Puis il faudra se rendre dans le dossier c:/wamp/bin/php/php.x.x.x

Bonnes pratiques : Mise en place d’un environnement de développement normalisé avec NetBeans Lire la suite »

Magento : Importer / Exporter les produits complémentaire ( upsell , crossell , related ) via les profils avancés

Suivant la même méthodologie que l’import export des commentaires clients, nous allons voir à présent comment importer/ exporter les produits complémentaires.

Nous partons du postulat que nous créons un nouveau module « Module_Dataflow »
( les étapes de création du module ne seront pas détaillées )

Cette méthode fonctionne pour les éléments suivants :

  • Produits apparentés
  • Ventes incitatives
  • Ventes croisées

 

Voici le xml pour l’export des produits complémentaires

<action type="mymodule_dataflow/convert_parser_LinkedProducts" method="unparse">
<!-- Filtrage par produit <var name="product_id" >157</var> -->
<!-- Filtrage par type export ( upsell|crossel|related) defaut : upsell ) <var name="type">upsell</var> -->
</action>
<action type="dataflow/convert_mapper_column" method="map">
</action>
<action type="dataflow/convert_parser_csv" method="unparse">
<var name="delimiter"><![CDATA[;]]></var>
<var name="enclose"><![CDATA["]]></var>
<var name="fieldnames">true</var>
</action>
<action type="dataflow/convert_adapter_io" method="save">
<var name="type">file</var>
<var name="path">var/export</var>
<var name="filename"><![CDATA[exports-produits-complementaires.csv]]>

Magento : Importer / Exporter les produits complémentaire ( upsell , crossell , related ) via les profils avancés Lire la suite »

Magento : Traductions multilingues dans un même fichier

Voici un code qui vous permettra de traduire un template dans l’ensemble des langues du site dans une seule fonction.
C’est pratique notamment pour l’envoi de contenus emails traduits.

Dans le snippet ci-dessous la langue du template sera basé sur le store_id de la commande

foreach ( $orders as $order ) {
 
//Pour bien gérer la traduction on change le store en fonction de la commande
Mage::app()->setCurrentStore($order->getStoreId());  //Changement de store
$locale  = Mage::getModel('core/locale')->getLocaleCode(); // Récupération de la locale du store
Mage::app()->getTranslator()->setLocale($locale); // Définition de la locale pour la traduction
Mage::app()->getTranslator()->init('frontend', true);   //Réinitialisation du cache  de traduction
 
//Création du block qui sera traduit dans la  langue du store et stockage de son contenu dans une variable
$layout = Mage::getSingleton('core/layout');
$contenu =  $layout->createBlock('core/block')
->setTemplate('order.phtml'

Magento : Traductions multilingues dans un même fichier Lire la suite »

Magento : Importer / Exporter les commentaires et les notes des produits via les profils avancés

Voici comment importer / exporter facilement les avis clients et leur notes associées sur la plateforme magento.
Nous partons du postulat que nous créons un nouveau module « Module_Dataflow »
( les étapes de création du module ne seront pas détaillées )

Pour réaliser nos actions nous allons utiliser les profils avancés d’import disponibles en standard sur la plateforme Magento.
Note : Cette version ne gère pas pour l’instant la mise à jour des commentaires existants

Voici le xml d’action pour l’export des commentaires

<action type="mymodule_dataflow/convert_parser_CustomerReviews" method="unparse">
<!--<var name="product_id"><![CDATA[21]]></var>-->
</action>
 
<action type="dataflow/convert_mapper_column" method="map">
</action>
 
<action type="dataflow/convert_parser_csv" method="unparse">
<var name="delimiter"><![CDATA[;]]></var>
<var name="enclose"><![CDATA["]]></var>
<var name="fieldnames">true</var>
</action>
 
<action type="dataflow/convert_adapter_io" method="save">
<var name="type">file</var>
<var name="path">var/export</var>
<var name="filename"><![CDATA[myCsvExportFile.csv]]>

Magento : Importer / Exporter les commentaires et les notes des produits via les profils avancés Lire la suite »

Magento 1.4.1.1 : Correction de la recherche des promotions par identifiant

Voici un correctif pour un bug de la version 1.4.1.1 de Magento ( Oui je sais c’est une vieille version mais il existe des sites qui l’utilisent encore … )
Lorsque vous souhaitez rechercher une règle de promotion par identifiant, vous obtenez une belle erreur fatale.
Donc le message d’erreur est le suivant :

SQLSTATE[23000]: Integrity constraint violation: 1052 Column 'rule_id' in where clause is ambiguous

Pour corriger cette erreur nous allons copier le fichier app/code/core/Mage/Adminhtml/Promo/Quote/Grid.php dans le dossier app/code/local/Mage/Adminhtml/Promo/Quote/Grid.php

Puis dans la fonction _prepareColumns éditer les paramètres du champ rule id

 $this->addColumn('rule_id', array(
            'header'    => Mage::helper('salesrule')->__('ID'),
            'align'     =>'right',
            'width'     => '50px',
            'index'     => 'rule_id',
            'filter_index' => 'main_table.rule_id', // Ajout d'un filtre index pour corriger la recherche
        ));

Magento 1.4.1.1 : Correction de la recherche des promotions par identifiant Lire la suite »