SlideShare una empresa de Scribd logo
1 de 64
Descargar para leer sin conexión
Conférence Magento
27 novembre 2013 • mageconf.org
The Worst Practices for Magento

par Christophe Le Bot
http://magentips.com • @magentips
Christophe Le Bot
 consultant e-commerce et expert Magento chez Xi Ingénierie
 auteur d’un guide Magento

* Le livre, pas le bonhomme ! Quoique…
Voyage du côté obscur de la Force…

Exemples tirés de plates-formes Magento en production.
Toute ressemblance avec la réalité est voulue.
Que ceux qui se reconnaissent en soient remerciés !
Ne pas juger tu dois.
Progresser tu devras.
Les 13 règles de Dark Mage…

Oui,
vous serez
les pires !
« Magento, c’est la meilleure
solution e-commerce ! »

RÈGLE N° 1 :
PENSER QUE MAGENTO SAIT TOUT BIEN FAIRE
Une solution industrielle !







Quelle richesse fonctionnelle !
Et c’est franchement robuste.
Peu d’erreurs en prod, du bonheur.
Quand j’explose mon trafic, Magento est toujours là !
Que dire de la beauté de son framework…
En résumé, je suis tranquille : je peux tout faire avec ;-)
Même pour Magento, c’est dur…
 Solution intéressante elle est.
 Imparfaite elle restera.
 Ses compromis tu accepteras.
 Son socle tu apprécieras.
 Ses hautes couches tu subiras.
 Sortir des chemins tracés tu devras.
« C’est du web, faut pas m’embêter
avec un environnement de dev à la
Airbus ! »

RÈGLE N° 2 :
CHANGER D’OUTILS COMME DE T-SHIRTS GEEK
Bon allez, on bosse maintenant !
 Un petit WAMP pour commencer
 Zend Studio ? Oh non, PHP Storm. Bof… Eclipse ? Eh, pas mal
ce Notepad++ !
 Et demain, je testerai ce nouvel outil génial !
Ah, tiens ! C’est quoi ces erreurs de lecture de
fichiers ? Encodage défectueux ? Quesaquo ?
 T’organiser il te faudra.
 Un éditeur tu respecteras.
 Un debugger tu manipuleras.
 En UTF-8 sans BOM tu encoderas.
 Sous Linux tu développeras.
 Tes sources tu versionneras.
 En mode strict tu testeras.
« Trop complexe Magento ? Pfff…
Faut prendre des raccourcis ! »

RÈGLE N° 3 :
CODER DANS LE CORE
C’est tellement rapide de faire simple !
 Et hop ! Un client content d’être livré en 3 semaines !
 Pas de prise de tête avec l’architecture.
 Je peux changer tout les comportements, trop fort !
Euh… M. Le Client, vous êtes sûr de vouloir la nouvelle
version ? Ben, c’est-à-dire… ça va être compliqué et
coûteux à faire, là. Et puis, il y a toujours cette
extension qui refuse de marcher !
 Le core tu ne toucheras pas.
 Les montées en version tu faciliteras.
 Tes modules tu isoleras.
 Le code pool tu suivras.
« Magento a déjà réfléchi.
Moi j’agis ! »

RÈGLE N° 4 :
SURVOLER L’ARCHITECTURE
Je m’en sors bien, non ?
Magique, cette méthode getData() !
Ah… Je dois modifier une table. Allez hop, PHPMyAdmin !
Pas besoin de ce module ? Direction « Disable modules output » !
La classe, je vais me faire une bibliothèque de petits modules.
Chez moi, les portes, ça se ferme :
<?php
// mon code
?>
 Une variable à récupérer ? $_GET, $_POST et $_SERVER !





 Les getters et setters tu utiliseras.
 Des installers tu t’imposeras.
 L’output tu cerneras.
 Moins de modules tu coderas.
 Ouverte la balise PHP tu laisseras.
 Mage::app()->getRequest()->getPost()
« Events et observers ? Je ne suis
pas un intermittent du spectacle,
moi ! »

RÈGLE N° 5 :
SURCHARGER ET TOUJOURS SURCHARGER
L’objet, c’est mieux quand c’est procédural !
 J’ai un comportement à changer ? Je surcharge.
 Mon code est facile à comprendre : on suit le fil, c’est tout !
 Aïe… Deux modules qui utilisent la même classe. Pas grave, je
code un test du contexte en amont.
Mais pourquoi cette méthode refuse de faire son job !? Et
ce var_dump qui ne s’affiche même pas…
 Surcharger tu éviteras.
 A observer et attraper tu t’obligeras.
 Les outils Magento tu utiliseras.
 Agile tu deviendras.
 Aux autres modules tu penseras.
« Le design, c’est mon truc. Le
bazar de fichiers dans les thèmes,
beaucoup moins… »

RÈGLE N° 6 :
OUBLIER LE FONCTIONNEMENT DES THÈMES
N’importe quoi, ce dossier app/design…
 Base/default, default/default, enterprise/default : j’en fais
quoi moi ? J’ai juste un style CSS à changer !
 Et ces fichiers XML « layout » ? Quel bazar !
 Bon allez, je simplifie. Au moins, dans templates, il y a du
HTML et du PHP ! Et je copie tous les CCS pour tout avoir.
Oh, non ! C’est pourri Magento. Je le mets
à jour et mon thème est en vrac !
 « base/default » tu ne toucheras pas.
 « default/default » tu oublieras.
 Des copies tu t’interdiras.
 Les interfaces tu apprendras.
 Le caractère « _ » tu éviteras.
 Le layout local.xml tu maîtriseras.
« Des helpers, pour quoi faire ?
Pas besoin d’aide, moi ! »

RÈGLE N° 7 :
CODER DANS LES TEMPLATES
Parfait pour mes nouvelles fonctionnalités !
 Des templates partout… Bon, il suffit de lire le code et je fais
mes modifs.
 Chouette ! Magento exécute mes nouvelles méthodes.
 Oh, ben… pas chargé ce template ? Et tiens, prends un
« include » !
Ah ouais, c’est vraiment lourd Magento, ça
rame à mort ! C’est juste pas utilisable, là…
Exemples de code
<?php foreach ($this->helper('catalog/category')->getStoreCategories() as $category): ?>

<?php if ($category->getHorsArborescence() && (!$category->getHorsArborescenceHidden() || $this>helper('demo')->isfromreferer($category) || $this->helper('demo')->isvisited($category))) : ?>
<?php $class = substr($category->getUrl(),strpos(substr($this->getUrl('/'), 7),'/')+8);

$class = substr($class, 0, strpos($class,'.html'));
$cat = Mage::getModel('catalog/category')->load($category->getId());
?>
Exemples de code
<?php foreach ($commentaires as $commentaire):?>

<?php $customer= Mage::getModel('customer/customer')->load($commentaire->getCustomerId());
$pseudo=$commentaire->getNickname();
if ($customer->getPrimaryShippingAddress() && $customer->getPrimaryShippingAddress()>getCity()){
$pseudo=$pseudo.' - '.$customer->getPrimaryShippingAddress()->getCity();
} ?>
<dt><?php echo $this->htmlEscape($commentaire->getTitle()) ?> <span><?php echo $this>htmlEscape($pseudo) ?></span></dt>
<dd><?php echo nl2br($this->htmlEscape($commentaire->getDetail())) ?></dd>
</dl>
Exemples de code
<?php

$_collectionBest = Mage::getResourceModel('reports/product_collection')->[…];
<ul>
<?php foreach($_collectionBest as $_bestSeller){ ?>

<?php $_product = Mage::getModel('catalog/product')->load($_bestSeller->getId()); ?>
<li><a href="<?php echo $_product->getProductUrl();?>"><?php echo $_product->getName();
?></a></li>
<?php } ?>
</ul>
Exemples de code
<?php $_taxHelper = $this->helper('tax'); ?>

<?php $category = Mage::getModel('catalog/category')->load(36); ?>
<?php $collection = $category->getProductCollection(); ?>
<?php $collection->getSelect()->order('rand()'); ?>

<?php $collection->setPageSize(1); ?>
<?php if(count($collection) == 1){ ?>
<?php foreach($collection as $articles){ ?>

<?php $_product = Mage::getModel('catalog/product')->load($articles->getEntityId()); ?>
[…]
 La séquence tu respecteras.
 Le MV(LHBT)C tu maîtriseras.
 Le cache tu gèreras.
 Les performances tu optimiseras.
MV(LHBT)C

Layout

Handles

Blocks
Cache

Templates
« Je code moi ! Pour la trad, je fais
au plus rapide. »

RÈGLE N°8 :
TRADUIRE N’IMPORTE QUOI, N’IMPORTE OÙ
L’approche « dark translating »





$this->__('Email to a Friend') ? Oh non, c’est en anglais !
Allez hop, $this->__(‘Envoyer à un ami') et ça marche.
Quoi ? Il faut le site en français et en anglais ? Euh… Attendez.
Ah si, c’est bon, je sais comment faire :
app/locale/fr_FR/Mage_Catalog.csv
C’est pénible, ces textes qui sautent quand je mets à jour
Magento. Comme si j’avais que ça comme problème !
 La clé dans le template tu trouveras.
 app/locale tu ne toucheras pas.
 Un fichier translate.csv tu écriras.
 La table core_translate tu alimenteras.
 Des surcharges tu te méfieras.
 Des alias de modules tu ajouteras.
 Tes clés à jour tu mettras.
Cascade de traduction
Table core_translate
sinon

app/design/frontend/[thème]/locale/[pays]/translate.csv

sinon

app/locale/[pays]/[module].csv

sinon

$this->__(‘Mage_Conf::Mon texte') dans son template
« Je monte la plate-forme. Le
catalogue, c’est le boulot du
client ! »

RÈGLE N° 9 :
NE PAS STRUCTURER LE CATALOGUE
Le catalogue, c’est du contenu.
 Un seul jeu d’attributs, ça suffit.
 [zen] Je mets toute l’info dans un seul attribut.
[parano] Je crée des centaines d’attributs par produit.
 [dilettante] Je n’aplatis rien.
[maniaque] J’aplatis tout.
 La recherche, je m’en cogne !
Aïe… Le site est lent, les clients ne trouvent rien, le web
designer ne peut rien personnaliser… Mais, allo quoi !?
 L’offre produits tu assimileras.
 Le compromis tu chercheras.
 Les bons attributs tu aplatiras.
 La recherche tu optimiseras.
« Des milliers d’extensions sur
Magento Connect ! Yes, je vais me
faire un site de ouf. »

RÈGLE N° 10 :
INSTALLER DES EXTENSIONS À GOGO
Sympa, j’ai des collègues qui codent comme moi !
 Plus de 6000 extensions !
 Je peux trouver toutes les fonctionnalités que je veux.
 Je vais voir ce que donne ce module sur mes ventes et après
je prendrai son concurrent pour comparer.
Une page d’erreur sur Magento ? Pas bon ça… Des
orphelins dans ma base ? Et cette colonne qui manque. Et
mon module qui ne marche plus. C’est un complot !
 Auditer les extensions tu dois.
 1 sur 6 tu garderas.
 Le support client tu vérifieras.
 Les modules cryptés tu banniras.
 Les surcharges tu testeras.
 Du support CE / EE tu t’assureras.
« Magento est solide, il fera face
aux menaces. Alors… »

RÈGLE N° 11 :
OUBLIER LA SÉCURITÉ
Pas envie d’être parano !
 Je laisse les instances de dev, de test et de préprod
accessibles publiquement… et même indexables !
 Pour le backend, c’est « /admin ».
 Pas besoin de tester en SSL, on verra ça en prod avec le vrai
certificat.
 Je génère des documents dans un dossier ouvert à tous.
Oups… On dirait qu’on sait fait sauvagement hacker !
Parmi les pires…
 Fichier de vérification de configuration magento-check.php
en production
 test.php à la racine avec les données des clients
 Dossier backup/mysqldump.tar.gz à la racine
 Factures de toutes les commandes sur 3 ans accessibles
 app/etc/local.xml non protégé
 Fichiers .htaccess absents sur le serveur
 Sécuriser ton application tu dois.
 Au-delà du code tu te rendras.
 Les conséquences tu mesureras.
 Les bons réflexes tu apprendras.
 Le côté obscur tu testeras.
« J’ai fini mon dev. Un petit coup
de FTP et c’est en prod ! »

RÈGLE N° 12 :
METTRE EN PROD COMME EN 1996
Je reste souple pour mettre en ligne vite !
 Je mets mes fichiers en prod au fil de l’eau.
 Je pars des fichiers de prod pour faire mon nouveau dev. Eh
oui, comme ça, j’ai le dernier jus !
Ouah… Il manque des .htaccess. Et… Oh non, le paiement
CB est resté en mode test, Google Analytics ne reçoit plus
rien, il me manque des images, je n’ai pas mes blocs CMS.
J’en ai marre de Magento !
 De vrais déploiements tu feras.
 Les contenus tu sécuriseras.
 Des installers tu privilégieras.
 Des purges tu mèneras.
 Des automates en place tu mettras.
« Un serveur web avec Magento,
ça tourne tout seul. »

RÈGLE N° 13 :
NE PAS SURVEILLER LA PROD
Option « Paradise » : la vie sans log
 Ne pas activer les logs !
 Pas de souci d’espace disque qui enfle avec les logs
 Pas de traces pour chercher le responsable

Mais de quoi les clients se plaignent ?
Option « Hell » : ça sature !
 Les logs sont activés, on a bien fait, non ?
 Mais bon, on n’a autre chose à faire qu’à regarder ce que ça
pond !
Tiens ? Le serveur est mort… Disque plein ?
Mais, mais, pourquoi donc ?
 Log rotator est ton ami.
 La pile tu dois dépiler.
 Au-delà de Magento tu dois te rendre.
 Les anomalies tu identifieras.
 Les erreurs tu corrigeras.
Il est pas beau, mon log ?
error.log

Le reste de ma plate-forme…
On en rigole, mais voilà le quotidien…
Un dossier media rempli de doublons.
On en rigole, mais voilà le quotidien…

Un dossier var très bavard !
Allez, encore un pour la route !
Des images à gogo

Ah ? Ben il est là, Magento. Bien caché, le coquin !
« Je ne manque pas de ressource.
Je peux faire toujours plus fort. »

CE À QUOI VOUS AVEZ ÉCHAPPÉ
En vrac…
 Tâches cron Magento non lancées par le serveur
 Cache mal géré (données mal définies, planification non réalisée,
indexation permanente, FPC non maîtrisé)
 Doublons d’images (dossier media/import non purgé)
 « toto », « titi », « test » et autres termes poétiques du développeur
 32 requêtes de fichiers CSS pour une seule page
 Image produit de 58 Mo.
 …
 Des erreurs tous nous faisons.
 Persévérer tu dois.
 Chaque jour tu apprendras.
 Du temps il te faudra.
 Expert tu deviendras.
Que la Force soit avec toi !

Más contenido relacionado

Similar a The worst practices for Magento

JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013Romain Linsolas
 
Magento 2 is to migrate or not to migrate, the right question ?
Magento 2 is to migrate or not to migrate, the right question ?Magento 2 is to migrate or not to migrate, the right question ?
Magento 2 is to migrate or not to migrate, the right question ?The e-Commerce Academy
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache MavenArnaud Héritier
 
Le développement côté utilisateur
Le développement côté utilisateurLe développement côté utilisateur
Le développement côté utilisateurDavid Buros
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1Gilles Guirand
 
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part1
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part1Architecture et Bonnes pratiques Android #DevoxxFr2016 Part1
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part1Mathias Seguy
 
Devenir best friend forever avec vos développeurs measure camp nantes 2016
Devenir best friend forever avec vos développeurs   measure camp nantes 2016Devenir best friend forever avec vos développeurs   measure camp nantes 2016
Devenir best friend forever avec vos développeurs measure camp nantes 2016Prénom Nom de famille
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Jean Gabès
 
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementAccroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementChristophe Avonture
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Julien Jakubowski
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?Rémi Lesieur
 
Amélioration progressive, de la théorie à la pratique
Amélioration progressive, de la théorie à la pratiqueAmélioration progressive, de la théorie à la pratique
Amélioration progressive, de la théorie à la pratiqueGoulven Champenois
 
Focus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
Focus schema.org et sémantique SEOCamp Nice Sophia-AntipolisFocus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
Focus schema.org et sémantique SEOCamp Nice Sophia-AntipolisErlé Alberton
 
Agile tour 2015 alliés contre les défauts
Agile tour 2015   alliés contre les défautsAgile tour 2015   alliés contre les défauts
Agile tour 2015 alliés contre les défautsJulien Jakubowski
 
Agile tour Lille 2015 allies ensemble contre les defauts
Agile tour Lille 2015 allies ensemble contre les defautsAgile tour Lille 2015 allies ensemble contre les defauts
Agile tour Lille 2015 allies ensemble contre les defautsAntoine Blk
 

Similar a The worst practices for Magento (20)

Doc app cracker
Doc app crackerDoc app cracker
Doc app cracker
 
Julien dollon
Julien dollonJulien dollon
Julien dollon
 
JavaScript Devoxx France 2013
JavaScript Devoxx France 2013JavaScript Devoxx France 2013
JavaScript Devoxx France 2013
 
Magento 2 is to migrate or not to migrate, the right question ?
Magento 2 is to migrate or not to migrate, the right question ?Magento 2 is to migrate or not to migrate, the right question ?
Magento 2 is to migrate or not to migrate, the right question ?
 
Td pascal tdD
Td pascal tdDTd pascal tdD
Td pascal tdD
 
20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven20081113 - Nantes Jug - Apache Maven
20081113 - Nantes Jug - Apache Maven
 
Le développement côté utilisateur
Le développement côté utilisateurLe développement côté utilisateur
Le développement côté utilisateur
 
20111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v120111006 bonnes pratiques-gi_g_v1
20111006 bonnes pratiques-gi_g_v1
 
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part1
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part1Architecture et Bonnes pratiques Android #DevoxxFr2016 Part1
Architecture et Bonnes pratiques Android #DevoxxFr2016 Part1
 
Devenir best friend forever avec vos développeurs measure camp nantes 2016
Devenir best friend forever avec vos développeurs   measure camp nantes 2016Devenir best friend forever avec vos développeurs   measure camp nantes 2016
Devenir best friend forever avec vos développeurs measure camp nantes 2016
 
Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)Conférence Shinken à SophiaConf2012 (Jean Gabès)
Conférence Shinken à SophiaConf2012 (Jean Gabès)
 
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquementAccroître la sécurité de son site internet et de Joomla! plus spécifiquement
Accroître la sécurité de son site internet et de Joomla! plus spécifiquement
 
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
Du JavaScript propre ? Challenge accepted ! @Devoxx France 2013
 
C'est quoi, du bon code ?
C'est quoi, du bon code ?C'est quoi, du bon code ?
C'est quoi, du bon code ?
 
Amélioration progressive, de la théorie à la pratique
Amélioration progressive, de la théorie à la pratiqueAmélioration progressive, de la théorie à la pratique
Amélioration progressive, de la théorie à la pratique
 
Focus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
Focus schema.org et sémantique SEOCamp Nice Sophia-AntipolisFocus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
Focus schema.org et sémantique SEOCamp Nice Sophia-Antipolis
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Agile tour 2015 alliés contre les défauts
Agile tour 2015   alliés contre les défautsAgile tour 2015   alliés contre les défauts
Agile tour 2015 alliés contre les défauts
 
Agile tour Lille 2015 allies ensemble contre les defauts
Agile tour Lille 2015 allies ensemble contre les defautsAgile tour Lille 2015 allies ensemble contre les defauts
Agile tour Lille 2015 allies ensemble contre les defauts
 

The worst practices for Magento

  • 1. Conférence Magento 27 novembre 2013 • mageconf.org
  • 2. The Worst Practices for Magento par Christophe Le Bot http://magentips.com • @magentips
  • 3. Christophe Le Bot  consultant e-commerce et expert Magento chez Xi Ingénierie  auteur d’un guide Magento * Le livre, pas le bonhomme ! Quoique…
  • 4. Voyage du côté obscur de la Force… Exemples tirés de plates-formes Magento en production. Toute ressemblance avec la réalité est voulue. Que ceux qui se reconnaissent en soient remerciés !
  • 5. Ne pas juger tu dois. Progresser tu devras.
  • 6. Les 13 règles de Dark Mage… Oui, vous serez les pires !
  • 7. « Magento, c’est la meilleure solution e-commerce ! » RÈGLE N° 1 : PENSER QUE MAGENTO SAIT TOUT BIEN FAIRE
  • 8. Une solution industrielle !       Quelle richesse fonctionnelle ! Et c’est franchement robuste. Peu d’erreurs en prod, du bonheur. Quand j’explose mon trafic, Magento est toujours là ! Que dire de la beauté de son framework… En résumé, je suis tranquille : je peux tout faire avec ;-)
  • 9. Même pour Magento, c’est dur…
  • 10.  Solution intéressante elle est.  Imparfaite elle restera.  Ses compromis tu accepteras.  Son socle tu apprécieras.  Ses hautes couches tu subiras.  Sortir des chemins tracés tu devras.
  • 11. « C’est du web, faut pas m’embêter avec un environnement de dev à la Airbus ! » RÈGLE N° 2 : CHANGER D’OUTILS COMME DE T-SHIRTS GEEK
  • 12. Bon allez, on bosse maintenant !  Un petit WAMP pour commencer  Zend Studio ? Oh non, PHP Storm. Bof… Eclipse ? Eh, pas mal ce Notepad++ !  Et demain, je testerai ce nouvel outil génial ! Ah, tiens ! C’est quoi ces erreurs de lecture de fichiers ? Encodage défectueux ? Quesaquo ?
  • 13.  T’organiser il te faudra.  Un éditeur tu respecteras.  Un debugger tu manipuleras.  En UTF-8 sans BOM tu encoderas.  Sous Linux tu développeras.  Tes sources tu versionneras.  En mode strict tu testeras.
  • 14. « Trop complexe Magento ? Pfff… Faut prendre des raccourcis ! » RÈGLE N° 3 : CODER DANS LE CORE
  • 15. C’est tellement rapide de faire simple !  Et hop ! Un client content d’être livré en 3 semaines !  Pas de prise de tête avec l’architecture.  Je peux changer tout les comportements, trop fort ! Euh… M. Le Client, vous êtes sûr de vouloir la nouvelle version ? Ben, c’est-à-dire… ça va être compliqué et coûteux à faire, là. Et puis, il y a toujours cette extension qui refuse de marcher !
  • 16.  Le core tu ne toucheras pas.  Les montées en version tu faciliteras.  Tes modules tu isoleras.  Le code pool tu suivras.
  • 17. « Magento a déjà réfléchi. Moi j’agis ! » RÈGLE N° 4 : SURVOLER L’ARCHITECTURE
  • 18. Je m’en sors bien, non ? Magique, cette méthode getData() ! Ah… Je dois modifier une table. Allez hop, PHPMyAdmin ! Pas besoin de ce module ? Direction « Disable modules output » ! La classe, je vais me faire une bibliothèque de petits modules. Chez moi, les portes, ça se ferme : <?php // mon code ?>  Une variable à récupérer ? $_GET, $_POST et $_SERVER !     
  • 19.  Les getters et setters tu utiliseras.  Des installers tu t’imposeras.  L’output tu cerneras.  Moins de modules tu coderas.  Ouverte la balise PHP tu laisseras.  Mage::app()->getRequest()->getPost()
  • 20. « Events et observers ? Je ne suis pas un intermittent du spectacle, moi ! » RÈGLE N° 5 : SURCHARGER ET TOUJOURS SURCHARGER
  • 21. L’objet, c’est mieux quand c’est procédural !  J’ai un comportement à changer ? Je surcharge.  Mon code est facile à comprendre : on suit le fil, c’est tout !  Aïe… Deux modules qui utilisent la même classe. Pas grave, je code un test du contexte en amont. Mais pourquoi cette méthode refuse de faire son job !? Et ce var_dump qui ne s’affiche même pas…
  • 22.  Surcharger tu éviteras.  A observer et attraper tu t’obligeras.  Les outils Magento tu utiliseras.  Agile tu deviendras.  Aux autres modules tu penseras.
  • 23. « Le design, c’est mon truc. Le bazar de fichiers dans les thèmes, beaucoup moins… » RÈGLE N° 6 : OUBLIER LE FONCTIONNEMENT DES THÈMES
  • 24. N’importe quoi, ce dossier app/design…  Base/default, default/default, enterprise/default : j’en fais quoi moi ? J’ai juste un style CSS à changer !  Et ces fichiers XML « layout » ? Quel bazar !  Bon allez, je simplifie. Au moins, dans templates, il y a du HTML et du PHP ! Et je copie tous les CCS pour tout avoir. Oh, non ! C’est pourri Magento. Je le mets à jour et mon thème est en vrac !
  • 25.  « base/default » tu ne toucheras pas.  « default/default » tu oublieras.  Des copies tu t’interdiras.  Les interfaces tu apprendras.  Le caractère « _ » tu éviteras.  Le layout local.xml tu maîtriseras.
  • 26.
  • 27. « Des helpers, pour quoi faire ? Pas besoin d’aide, moi ! » RÈGLE N° 7 : CODER DANS LES TEMPLATES
  • 28. Parfait pour mes nouvelles fonctionnalités !  Des templates partout… Bon, il suffit de lire le code et je fais mes modifs.  Chouette ! Magento exécute mes nouvelles méthodes.  Oh, ben… pas chargé ce template ? Et tiens, prends un « include » ! Ah ouais, c’est vraiment lourd Magento, ça rame à mort ! C’est juste pas utilisable, là…
  • 29. Exemples de code <?php foreach ($this->helper('catalog/category')->getStoreCategories() as $category): ?> <?php if ($category->getHorsArborescence() && (!$category->getHorsArborescenceHidden() || $this>helper('demo')->isfromreferer($category) || $this->helper('demo')->isvisited($category))) : ?> <?php $class = substr($category->getUrl(),strpos(substr($this->getUrl('/'), 7),'/')+8); $class = substr($class, 0, strpos($class,'.html')); $cat = Mage::getModel('catalog/category')->load($category->getId()); ?>
  • 30. Exemples de code <?php foreach ($commentaires as $commentaire):?> <?php $customer= Mage::getModel('customer/customer')->load($commentaire->getCustomerId()); $pseudo=$commentaire->getNickname(); if ($customer->getPrimaryShippingAddress() && $customer->getPrimaryShippingAddress()>getCity()){ $pseudo=$pseudo.' - '.$customer->getPrimaryShippingAddress()->getCity(); } ?> <dt><?php echo $this->htmlEscape($commentaire->getTitle()) ?> <span><?php echo $this>htmlEscape($pseudo) ?></span></dt> <dd><?php echo nl2br($this->htmlEscape($commentaire->getDetail())) ?></dd> </dl>
  • 31. Exemples de code <?php $_collectionBest = Mage::getResourceModel('reports/product_collection')->[…]; <ul> <?php foreach($_collectionBest as $_bestSeller){ ?> <?php $_product = Mage::getModel('catalog/product')->load($_bestSeller->getId()); ?> <li><a href="<?php echo $_product->getProductUrl();?>"><?php echo $_product->getName(); ?></a></li> <?php } ?> </ul>
  • 32. Exemples de code <?php $_taxHelper = $this->helper('tax'); ?> <?php $category = Mage::getModel('catalog/category')->load(36); ?> <?php $collection = $category->getProductCollection(); ?> <?php $collection->getSelect()->order('rand()'); ?> <?php $collection->setPageSize(1); ?> <?php if(count($collection) == 1){ ?> <?php foreach($collection as $articles){ ?> <?php $_product = Mage::getModel('catalog/product')->load($articles->getEntityId()); ?> […]
  • 33.  La séquence tu respecteras.  Le MV(LHBT)C tu maîtriseras.  Le cache tu gèreras.  Les performances tu optimiseras.
  • 34.
  • 36. « Je code moi ! Pour la trad, je fais au plus rapide. » RÈGLE N°8 : TRADUIRE N’IMPORTE QUOI, N’IMPORTE OÙ
  • 37. L’approche « dark translating »     $this->__('Email to a Friend') ? Oh non, c’est en anglais ! Allez hop, $this->__(‘Envoyer à un ami') et ça marche. Quoi ? Il faut le site en français et en anglais ? Euh… Attendez. Ah si, c’est bon, je sais comment faire : app/locale/fr_FR/Mage_Catalog.csv C’est pénible, ces textes qui sautent quand je mets à jour Magento. Comme si j’avais que ça comme problème !
  • 38.  La clé dans le template tu trouveras.  app/locale tu ne toucheras pas.  Un fichier translate.csv tu écriras.  La table core_translate tu alimenteras.  Des surcharges tu te méfieras.  Des alias de modules tu ajouteras.  Tes clés à jour tu mettras.
  • 39. Cascade de traduction Table core_translate sinon app/design/frontend/[thème]/locale/[pays]/translate.csv sinon app/locale/[pays]/[module].csv sinon $this->__(‘Mage_Conf::Mon texte') dans son template
  • 40. « Je monte la plate-forme. Le catalogue, c’est le boulot du client ! » RÈGLE N° 9 : NE PAS STRUCTURER LE CATALOGUE
  • 41. Le catalogue, c’est du contenu.  Un seul jeu d’attributs, ça suffit.  [zen] Je mets toute l’info dans un seul attribut. [parano] Je crée des centaines d’attributs par produit.  [dilettante] Je n’aplatis rien. [maniaque] J’aplatis tout.  La recherche, je m’en cogne ! Aïe… Le site est lent, les clients ne trouvent rien, le web designer ne peut rien personnaliser… Mais, allo quoi !?
  • 42.  L’offre produits tu assimileras.  Le compromis tu chercheras.  Les bons attributs tu aplatiras.  La recherche tu optimiseras.
  • 43. « Des milliers d’extensions sur Magento Connect ! Yes, je vais me faire un site de ouf. » RÈGLE N° 10 : INSTALLER DES EXTENSIONS À GOGO
  • 44. Sympa, j’ai des collègues qui codent comme moi !  Plus de 6000 extensions !  Je peux trouver toutes les fonctionnalités que je veux.  Je vais voir ce que donne ce module sur mes ventes et après je prendrai son concurrent pour comparer. Une page d’erreur sur Magento ? Pas bon ça… Des orphelins dans ma base ? Et cette colonne qui manque. Et mon module qui ne marche plus. C’est un complot !
  • 45.  Auditer les extensions tu dois.  1 sur 6 tu garderas.  Le support client tu vérifieras.  Les modules cryptés tu banniras.  Les surcharges tu testeras.  Du support CE / EE tu t’assureras.
  • 46. « Magento est solide, il fera face aux menaces. Alors… » RÈGLE N° 11 : OUBLIER LA SÉCURITÉ
  • 47. Pas envie d’être parano !  Je laisse les instances de dev, de test et de préprod accessibles publiquement… et même indexables !  Pour le backend, c’est « /admin ».  Pas besoin de tester en SSL, on verra ça en prod avec le vrai certificat.  Je génère des documents dans un dossier ouvert à tous. Oups… On dirait qu’on sait fait sauvagement hacker !
  • 48. Parmi les pires…  Fichier de vérification de configuration magento-check.php en production  test.php à la racine avec les données des clients  Dossier backup/mysqldump.tar.gz à la racine  Factures de toutes les commandes sur 3 ans accessibles  app/etc/local.xml non protégé  Fichiers .htaccess absents sur le serveur
  • 49.  Sécuriser ton application tu dois.  Au-delà du code tu te rendras.  Les conséquences tu mesureras.  Les bons réflexes tu apprendras.  Le côté obscur tu testeras.
  • 50. « J’ai fini mon dev. Un petit coup de FTP et c’est en prod ! » RÈGLE N° 12 : METTRE EN PROD COMME EN 1996
  • 51. Je reste souple pour mettre en ligne vite !  Je mets mes fichiers en prod au fil de l’eau.  Je pars des fichiers de prod pour faire mon nouveau dev. Eh oui, comme ça, j’ai le dernier jus ! Ouah… Il manque des .htaccess. Et… Oh non, le paiement CB est resté en mode test, Google Analytics ne reçoit plus rien, il me manque des images, je n’ai pas mes blocs CMS. J’en ai marre de Magento !
  • 52.  De vrais déploiements tu feras.  Les contenus tu sécuriseras.  Des installers tu privilégieras.  Des purges tu mèneras.  Des automates en place tu mettras.
  • 53. « Un serveur web avec Magento, ça tourne tout seul. » RÈGLE N° 13 : NE PAS SURVEILLER LA PROD
  • 54. Option « Paradise » : la vie sans log  Ne pas activer les logs !  Pas de souci d’espace disque qui enfle avec les logs  Pas de traces pour chercher le responsable Mais de quoi les clients se plaignent ?
  • 55. Option « Hell » : ça sature !  Les logs sont activés, on a bien fait, non ?  Mais bon, on n’a autre chose à faire qu’à regarder ce que ça pond ! Tiens ? Le serveur est mort… Disque plein ? Mais, mais, pourquoi donc ?
  • 56.  Log rotator est ton ami.  La pile tu dois dépiler.  Au-delà de Magento tu dois te rendre.  Les anomalies tu identifieras.  Les erreurs tu corrigeras.
  • 57. Il est pas beau, mon log ? error.log Le reste de ma plate-forme…
  • 58. On en rigole, mais voilà le quotidien… Un dossier media rempli de doublons.
  • 59. On en rigole, mais voilà le quotidien… Un dossier var très bavard !
  • 60. Allez, encore un pour la route ! Des images à gogo Ah ? Ben il est là, Magento. Bien caché, le coquin !
  • 61. « Je ne manque pas de ressource. Je peux faire toujours plus fort. » CE À QUOI VOUS AVEZ ÉCHAPPÉ
  • 62. En vrac…  Tâches cron Magento non lancées par le serveur  Cache mal géré (données mal définies, planification non réalisée, indexation permanente, FPC non maîtrisé)  Doublons d’images (dossier media/import non purgé)  « toto », « titi », « test » et autres termes poétiques du développeur  32 requêtes de fichiers CSS pour une seule page  Image produit de 58 Mo.  …
  • 63.  Des erreurs tous nous faisons.  Persévérer tu dois.  Chaque jour tu apprendras.  Du temps il te faudra.  Expert tu deviendras.
  • 64. Que la Force soit avec toi !