magento development

Magento Dataflow - Optimisation des imports de produits [Partie 3]

Le module Magento Dataflow fournit en standard un adapter produits (voir Magento Dataflow - les Adapters par défaut [Partie 2]). Cependant, la solution par défaut ne suffit parfois pas et vous pouvez être amené à créer votre propre adapter pour traiter les produits de votre site Magento.

Créer son adapter n'est pas compliqué, mais si vous omettez deux lignes de code vous pourriez être désagréablement surpris des performances. Ces deux lignes devraient être insérées avant d'appeler $product->save() :

$product->setIsMassupdate(true);
$product->setExcludeUrlRewrite(true);

La première ligne définit la variable 'is_massupdate' qui peut être vérifiée par la suite afin de gagner du temps dans les actions post-traitements.
Certains observers qui scrutent l'événement catalog_product_save_after vérifient cette valeur (c'est à dire l'observer du module CatalogRule, qui saute les actions de règles de catalogue sur les produits si  $product->getIsMassupdate() renvoie  true ).

La deuxième ligne définit la variable 'exclude_url_rewrite' qui est utilisée par la méthode afterSave de Mage_Catalog_Model_Product_Attribute_Backend_Urlkey afin de vérifier si le cache de l'url réécrite du catalogue doit être rafraichi.

Ces deux lignes peuvent vous permettre de gagner quelques secondes pour chacune des lignes traitées, gardez les dans un coin de votre tête et ne les oubliez pas !

Traduction par Benjamin Bellamy

Tutoriel - Développer un module pour Magento - Où commencer ? [Partie 1]

Avez-vous déjà lu la liste complète des fonctionnalités que Magento propose en standard ? Elle est énorme. Et cela devient encore plus impressionnant lorsque vous regardez sur Magento Connect et toutes les extensions qui s'y trouvent.
Cependant, si vous êtes en train de lire ce billet, vous êtes probablement à la recherche de quelque chose qui n'est pas encore disponible.
Ou alors vous êtes un développeur qui aime juste mettre les mains dans le cambouis.
Dans un cas comme dans l'autre, que cela soit pour des raisons de business ou par esprit hacker, developper un module Magento est fun.

Mettons en place quelque chose de vraiment vraiment simple. Le module.
Vous vous demandez ce que ce sacré module va faire. Et bien dans ce premier épisode il ne va absolument rien faire, rien d'autre que d'être déclaré dans votre site Magento !

Où commencer?

Jetez un œil aux répertoires de votre installation de Magento. Dans app > code > local,
créez un répertoire, qui sera un peu le conteneur de vos modules, dans Magento on l'appelle en général pool de code (code pool). Si vous ne savez pas comment le nommer, le nom de la société pour laquelle vous travaillez est en général une bonne option. Ça l'est dans mon cas. ;-)

Ainsi, créons le :

$ cd app/code/local/
$ mkdir Baobaz

Là, dans ce conteneur, nous devrions créer le module. Dans le cadre de ce blog appelons-le "Reader" (dans les épisodes suivants le choix de ce nom devrait se clarifier, si tel n'est pas le cas... eh bien... ça sonne toujours bien ! ;-) )

$ cd Baobaz
$ mkdir Reader

Jusque là, tout va bien. L'étape suivante est un peu plus complexe mais toujours relativement simple. Changeons de répertoire...

$ cd ../../../etc/modules/

Euh... où sommes-nous ?

$ pwd /Your/favorite/place/for/web/projects/magento/app/etc/modules/

Maintenant, vous devez avertir Magento de l'existence de votre module. Pour ce faire vous allez devoir créer un fichier XML. Lancez votre éditeur favori et créez un fichier nommé Baobaz_Reader.xml (comme vous avez sûrement deviné, le nom est formé sur le schéma <nom_du_conteneur>_<nom_du_module>.xml

$ vi Baobaz_Reader.xml

Maintenant collez ceci dans le fichier :

<?xml version="1.0"?>
<config>
    <modules>
        <Baobaz_Reader>
            <active>true</active>
            <codePool>local</codePool>
        </Baobaz_Reader>
    </modules>
</config>

Sauvez le fichier. Et voilà ! That's one small step for a man, one giant leap for man...gento. :-)

Afin d'être sûr que Magento ait bien pris en compte votre module, rendez-vous sur le panneau d'administration. Allez sur System > Configuration, sélectionnez Advanced.

Vous devriez voir Baobaz_Reader en haut (ou quelque part par là) de la liste "Disable modules output".

OK, OK, OK... Je reconnais que notre module ne réalise rien pour le moment mais soyez patient, dans les épisodes suivants nous ajouterons des fonctionnalités plus utiles.

À suivre...

Traduction par Benjamin Bellamy

La traduction dans Magento

Dans Magento, la traduction entre différentes langues est assez simple. Pour un développeur expérimenté ayant déjà travaillé sur des frameworks PHP, cela se passe de commentaires. Par contre, pour un débutant qui souhaite lancer son premier site Magento, quelques explications peuvent être utiles.

Tous les textes de la page nécessitant une traduction sont dans un fichier CSV du répertoire /app/locale/[language]. La partie [language] du chemin étant à construire à partir du code langue, exemple: 'fr_FR' ou 'en_US'.

En regardant le contenu des fichiers, vous constaterez que la structure de chaque fichier est identique, une ligne contient deux textes: une pour la langue par défaut, et une pour la langue cible. Ces fichiers - aussi appelé "dictionaries" - doivent être déclarés dans le fichier de configuration des modules (config.xml). Vous devez mettre ce code directement dans le noeud du fichier de configuration de votre frontend ou admin.

<translate>
        <modules>
                <companyname_modulename>
                        <files>
                        <default>CompanyName_ModuleName.csv</default>
                        </files>
                </companyname_modulename>
        </modules>
</translate>

C'est tout. Maintenant, lorsque vous voulez utiliser une phrase qui doit être traduite, utilisez :

echo $this->__('text to translate');

Magento cherchera 'text to translate' dans votre fichier dictionnaire et retournera le texte correspondant dans la langue appropriée.

Traduction par Guillaume Morice

Partager des données entre les controllers et les blocks dans Magento

Comme vous le savez peut-être, la solution e-commerce Magento a un système de template très puissant. Nous pouvons dire la même chose concernant la partie logique du sytème. Grosso modo Magento est composé d'environ 50 modules. Il y un module pour l'enregistrement d'une commande, un pour les clients, un pour les pages CMS etc. Un module est composé de plusieurs parties. La partie design, la partie controllers, blocks, models et helpers. Les controllers contiennent toutes les actions déclenchées lors de l'utilisation d'un module d'un site Magento. Quand nous avons l'url http://www.my-eshop.tld/index.php/a/b/c

cela signifie que le module a doit lancer l'action c contenue dans le controller b.

Les blocks servent à préparer les données pour les templates. Chaque template utilisée doit avoir un block. Les blocs peuvent être simples mais ils peuvent être également plus complexes. Dans certains cas, il peut être utile de déplacer des données du controller vers le block afin de ne pas devoir recalculer ces données.

Pour cela, nous pouvons utiliser une des fonctionnalités de Magento : les registres.

Dans le controller on enregistre notre données dans la variable nommée $data. Nous pouvons utiliser un registre comme cela :

Mage::register('MyData',$dat);

Dans le fichier du block, nous pouvons accéder aux données de cette variable en utilisant :

$data = Mage::registry('MyData');

C'est une petite astuce qui peut s'avérer être très utile.

Traduction par Laurent Clouet

Utiliser le CMS natif pour créer des contenus multilingues dans Magento

La solution e-Commerce Magento intègre nativement des fonctionnalités de CMS.

Deux types d'objet sont ainsi mis à votre disposition afin de créer les contenus de votre site Magento :

  • Les pages, qui vous permettent d'afficher des informations générales telles que vos conditions générales de vente, informations de contact, implantations de magasin, et caetera.
  • Les blocks statiques ("statiques" n'étant pas tout à fait le terme approprié comme nous le verrons plus bas, comprenez qu'il s'agit tout simplement de blocks dont le contenu est modifiable directement depuis le back-office, sans modification de code source php), qui vous permettent de saisir des informations devant être généralement affichées sur plusieurs pages, telles que pieds de pages, en-têtes, mais aussi des informations ponctuelles (fermeture prévisionnelle du site, promotions...).

Notez que ces objets, pages ou blocks statiques, peuvent contenir des éléments dynamiquement calculés et qu'il est même relativement aisé de mettre à disposition du webmaster en charge du contenu un panoplie de fonctions développées sur mesure (date et heure du jour, nombre d'internautes connectés, dernier article vendu...).

De surcroît, ces pages et blocks peuvent également contenir d'autres blocks, statiques (donc dont le contenu est modifiable ici) ou non (blocs d'articles, blocs de meilleures ventes Magento...).

Enfin, ces pages et blocs s'insèrent parfaitement dans la logique du design Magento et, à ce titre, pour un même identifiant (identifier) de page ou de bloc statique, vous pourrez (sans y être obligé) en créer une version par vue de magasin (Store View Name). Il devient alors très simple de créer un contenu spécifique pour chacune des langues de votre site internet Magento et le système affichera la version correspondant à la langue de l'internaute sans que vous n'ayiez eu à programmer la moindre ligne de code.

Bien entendu le système n'est pas exempt de défaut et on regrettera en particulier :

  • l'absence d'outil d'édition en texte riche,
  • l'impossibilité de gérer du contenu de manière hiérarchique,
  • le manque de gestion de formulaire en ligne.

Nous verrons donc très prochainement comment palier ces manques.