It is with a great pleasure that the Magento Core Team published a public version of the development Magento 2 and information about it. This new version is still in development and will be available when stability, code quality, features and documentation will be finished. It is expected in one year (end 2012). Lots of lack blamed for version < Magento 2 are going to be history (we hope).

The target of this new version is to provide a better documentation (a complete wiki for store owner, developer, system administrator or designer target public is available and still in progress), an improvement of the performance / security / scalability (EAV still exists), PHPUnit Tests and Automatic Static Code Analysis Tests (including PHP Detector Copy/Paste, PHP Code Sniffer, PHP Mess Detector), easier and better support of multilanguage, etc.

But don't worry dear Magento 1.x developers, not everything has been changed. At the program,  refactoring of some classes, naming convention and templating and skin folders restructuration have been done at the moment. We will see some changes in this first article and how to handle it to upgrade your extensions. Remember, it's still in development, so the information are there just to keep you informed. I will try to prvovide you up to date information until the official release on this website.

If you are a third party developer, you should follow the recommandations and best practises based on Zend Framework Best Practises and Magento Best Practises (Licenses and category/package/author tags in the docblock of class' header) to migrate your extensions.

You will find all necessary links about the Magento 2 development version (documentation, svn, tools) at the bottom of this article. But first, I did for you, a resume of the significant changes done between Magento 1.x and 2.x based on the documenation available in the Magento 2 Wiki.

FILE STRUCTURE CHANGES FROM 1.X TO 2.X

New folders:

/dev internal tools and tests. Previously: /shell, /tests, /tools to /dev/shell, /dev/tests, /dev/tools
/pub All public content: /pub/images, /pub/jslib, /pub/skin, /pub/error - Fallback/Materialized files are stored in this folder

Removed folders:

/includes Compiler feature is removed
/downloader Folder removed but the Magento Connect feature is moved to /app/code/core/Mage/Connect/

Template / Layout folders

One of the main changes is that base theme files and folders (layout, template) are moved to each module folder in a folder named "view". It means you will get for your module the following structure app / code / <code_pool> / <Namespace> / <Module> / view / <area> / *

  • Namespace = your company name or else
  • Module = module name ;-)
  • code pool = core, local or community
  • area = frontend or backend
  • package
  • theme

Here are some examples of the migrated folders:

  • for emails template, FROM app / locale / en_US / emails / * .html TO app / code / <code pool> / <Namespace> / <Module> / view / *.html
  • for skin files of a specific module in adminhtml area (js, css, skin images), FROM skin / adminhtml / default / default / * TO app / code / <code pool> / <Namespace> / <Module> / skin / adminhtml / *
  • for skin files of a specific module in frontend area (js, css, skin images), FROM skin / frontend / default / default / * TO app / code / <code pool> / <Namespace> / <Module> / skin / frontend / *
  • for layout and template files (*.phtml), FROM app / design / frontend / default / default / layout (or template) / * TO app / code / <code pool> / <Namespace> / <Module> / view / layout.xml as a convention (or path/to/file/*.phtml)

And non-base theme files (confer Magento wiki: theme files that overlap base files in modules) are structured as follow:

  • An overwritten template file, FROM app / design / frontend / <package> / <theme> / template / <module_alias> / path / to / template.phtml TO app / design / frontend / <package> / <theme> / <Namespace_Module> / path / to / template.phtml

A Module directory structure will lookt at this:

__/app/code/<Pool>/<Namespace>
|__/<Module>
|__/Block
| |-- Sample.php
|__/view
| |__/adminhtml
| |__/frontend
| | |-- layout.xml
| | |-- sample.phtml
| |__/install
| |-- contact_email.html
|__/skin
|__/adminhtml
|__/frontend
|__/images
| |-- image.jpg
|-- favicon.ico
Source Magento Wiki Module View

Fallback/Materialization mechanism

The fallback mechanism still exists and if you want to overwrite a template or layout file, you still need to use the folder structure app / design / <area> / <package> / <theme> / <Namespace_Module> / layout.xml (or path / to / template.phtml). Layout and template folders doesn't anymore exist but you will notice that you need to use the combination Namespace and Module as a folder name for the layout and template files.
All public content are stored in the folder /pub, it contains static files like images, javascript or css and are copied from the module skin folder. They will be automatically redundantly saved once or after an update, following its folder structure in the module view folder, to the /pub folder to keep only this folder visible to public and make skin modular too.

You will get the following structure for the static files:

  • / pub / skin / <area> / <package> / <theme> /  *
  • / pub / skin / <area> / <package> / <theme> / <Namespace_Module> / *
For the fallback mechanism, you can still use a design package folder structure:
__/design
|__/frontend
|__/<packageName>
|__/<themeName>
|__/layout
|__/skin
| |__/<skinName>
|   |__/css
|   |__/images
|   | |--image.jpg
|   |__/locale
|     |__/<localeCode>
|       |--translate.csv
|
|__/<Namespace_Module>
|--layout.xml
|--sample_template.phtml
For a more information about module view, you can check the Magento Wiki Module View

Skin File Duplication Option

This option, if enabled, creates automatically a copy of static files which is not locale dependant to all other locale store View. For example, you have a file logo.png for the locale en_US, the file be copied automatically to the fr_FR locale folder of the / pub / skin / <area> / <package> / <theme> / default / locale folder.
To enabled it, you have to edit the file app / code / <code_pool> / <Namespace> / <Module> / etc / config.xml and provide this xml code:

<default>
        <design>
            <theme>
                <allow_skin_files_duplication>1</allow_skin_files_duplication>
            </theme>
	</design>
</default>

Conclusion

Here were some few examples of the new features and way how will go our preferred open source commerce. And it will stay like that, Open Source, even if Magento has been bought by eBay. I don't know yet what will be exactly the next steps but I make a new article about the framework and his new behaviour and coding practises. If your impatient, well, you can still visit the links below to show you more information and detailed explanation of what we see here.

Magento 2 links (some are working in progress):

New modules version for Magento 1.6
Tous les modules que j'ai créé, ont été réécris afin de les améliorer et/ou de les rendre compatible avec Magento 1.6 si nécessaire. Pour rappel, voici la liste des modules et une courte description:
  • Add Information to Sales Email : ce module vous permet d'ajouter dans les emails de ventes (facture, commande, remboursement) d'ajouter des informations complémentaires concernant le ou les produits qui ont été achetés par un client.
  • Zopim Chat: ce module vous permet d'afficher et de personnaliser par Store View le service de Chat de Zopim.com. Il n'est pas officiellement supporté par Zopim.
  • Joomla Integration: vous pouvez intégrer les modules de Joomla dans Magento. Vous aurez besoin également de Jfusion. La documentation se trouve sur ce site.
  • JS/CSS Compression & Minify (UIOptimization): compresser et minifier vos fichiers css et javascript afin d'améliorer les performances d'affichage de Magento. Plusieurs méthodes sont disponibles pour s'adapter à votre système.
  • Username support: vous autoriserez avec ce module la création et la connection d'un utilisateur avec son email ou son nom d'utilisateur

Le module Zopim Chat (non officiel) pour Magento a été mis à jour et reste gratuit. Cette mise à jour permet d'améliorer les performances de chargement de l'interface de Zopim suite à une modification faite par la Core Team de Zopim.

N'hésitez pas à le télécharger sur le site de Magento Connect.

zopim

Profiling

As promised, I provide you below the statistic of compression and ratio by using the different libraries with the help of my UI Optimization module that you can find into Magento Connect

Compressed/Minified file statistic and comparison by using default Magento template, sample data, configuration for Rissp User Interface Optimization module is for all by default. Only the method to compress/minify is changed. 
Merging file has no influence on compression but has influence on number of HTTP requests which is also an important point.

**** JS compression (analyzed with YSlow):

- no compression, no miniying, no merging:  329.8 Kb

- JSMin (unmerged, no gzip): total 230.4Kb (31% of compression)
- JSMin (merged, no gzip): total 230.4Kb
- JSMin (merged, gzip): total 56.8Kb (compression 83%)

- YUI compressor (unmerged, no gzip): total 193.6 Kb (compression 41%)
- YUI compressor (merged, no gzip): total 193.6 Kb
- YUI compressor (merged, gzip): total 52.6 Kb (compression 84%)

- Packed (unmerged, no gzip): total 133.5 Kb (compression 59%)
- Packed (merged, no gzip): total 133.5 Kb
- Packed (merged, gzip): total 44.5 Kb (compression 86.5%)

**** CSS compression (analyzed with YSlow):

- no compression, no miniying, no merging, no gzip: 95.9 kb

- CSS Tidy (unmerged, no gzip): total 79.8 Kb (compression 17%)
- CSS Tidy (merged, no gzip): total 79.8 Kb
- CSS Tidy (merged, gzip): total 14.7 Kb (compression 85%)

- YUI compressor (unmerged, no gzip): total 82.7 Kb (compression 14%)
- YUI compressor (merged, no gzip): total 82.7 Kb
- YUI compressor (merged, gzip): total 14.5 Kb (compression 85%)

- Google Minify (unmerged, no gzip): total 79.9 Kb (compression 17%)
- Google Minify (merged, no gzip): total 79.9 Kb
- Google Minify (merged, gzip): total 14.9 Kb (compression 84.5%)

CONCLUSION:
- for JS: 1) YUICompressor 2) JSMin 3) Packed (for compatibility problem with Magento)
- for CSS: 1) CSSTidy 2) Google Minify (almost good as CSSTidy) 3) YUICompressor

In next release of this module, I will offer HTML minifying

Une mise à jour du module pour Magento qui permet d'intégrer des modules de Joomla dans Magento avec l'aide Jfusion a été publié sur la page spécifique à ce module dans Magento Connect.

Ce module concçu pour la version Community de Magento permet donc d'afficher différents types de module de Joomla dans Magento. L'intérêt ici est de profiter des possibilités offertes par un CMS comme Joomla dans Magento et d'étendre ainsi ses possibilités grâce à la communauté fortement active de Joomla.

Vous pouvez ainsi:

  • utiliser les menus, les sondages, afficher du contenu statique, un calendrier d'évènements, dernières nouvelles, etc.
  • Mettre dans le cache de Magento afin d'optimiser la rapidité d'affichage de Magento
  • de synchroniser automatiquement la langue entre Magento et Joomla si vous avez Joomfish installé dans Joomla
  • de désactiver temporairement ou non le compte d'un de vos clients
  • d'avoir accès au backend de Joomla directement à partir du backend de Magento (pas de Single Sign On implémenté pour le moment)
  • de réécrire les urls provenant de Joomla et étant affiché dans Magento et de respecter le protocole de sécurité utilisé ou non (https ou http)

Requis:

  • Le composant Jfusion version > 1.5.x doit être installé et paramétré dans Joomla
  • Joomla version > 1.5.x
  • Magento > 1.3 et 1.4.x
  • Activé le cache de Magento pour améliorer les performances si vous le souhaitez (optionnel)
  • Joomfish dans Joomla si vous avez un magasin multilingue

Non Compatible:

  • Avec les modules Joomla utilisant le framework JQuery car non compatible avec le framework javascript prototype de Magento

Visitez le site de jfusion.org pour télécharger le paquet Jfusion et les modules qui permettent d'intégrer des blocks de Magento dans Joomla. L'intégration d'autres applications est possible également avec Jfusion comme phpBB, Moodle, SMF, ...
Visitez le site de diglin.com pour voir plus de documentation sur l'intégration de Joomla et Magento, accéder à une site de démonstration d'intégration avec ces deux applications.

thumb_demo_joomla_module_integration_menus thumb_jfusion_joomla_module

Je vous annonce la publication d'un module pour Magento qui vous permet d'intégrer le service de Chat de la société Zopim dans votre installation Magento. C'est une version non officielle, elle n'est pas maintenu par Zopim mais par moi même.

Ce module a pour avantage:

  • de créer une configuration par magasin
  • de paramétrer certaines options du Chat: fenêtre, bulle, bouton (couleur, position, textes, mode de synchronisation de la langue ...) par magasin ou pour tous les magasins.
  • d'accéder au tableau de bord de votre compte Zopim directement à partir de votre backend Magento et de dialoguer avec vos visiteurs.

Une version officielle existe également mais elle ne prends pas en compte les avantages de la gestion multi magasin de Magento c'est à dire la prise en compte d'une configuration et d'un affichage du chat en fonction du magasin affiché à l'utilisateur.

Vous pouvez visiter la page sur le site de Magento Connect pour l'obtenir directement. Cliquer sur les images ci-dessous pour agrandir et avoir un aperçu de ce module:

thumb_Zopim_Chat_Diglin01 Zopim Chat configuration Zopim Chat Backend Integration in Magento

zopim

Lire la suite...

@Note: la solution ci dessous n'est pas 100% compatible avec les modules tiers tel que GoogleBase. J'y travaille encore, vous pouvez cependant analyser la note de bas de page pour aider à trouver une solution propre. Cependant si vous êtes très pressé, voici une autre solution

Pour ceux qui rencontrent des difficultés avec leur backend de Magento et qui ont personalisé l'accès (exple: http://www.magento.com/backend/) grâce au fichier /app/etc/local.xml. Ils rencontreront probablement l'affichage d'une page 404 error - Page Not Found après avoir donné ses informations de login et mot de passe. Cette situation est présente seulement si vous avez activé dans la configuration de Magento, l'option qui force l'ajout du Store Code dans l'URL ( System > Configuration > Web > Url Options > Add Store Code to Urls - YES).

La solution est d'indiquer à Magento que l'on peut utiliser notre URL de backend personnalisé directement et sans prendre en compte le fait que c'est un Store Code. Il suffit pour cela de modifier le fichier local.xml de la manière suivante: {nom_backend_personalisé} = backend dans l'exemple http://www.magento.com/backend/

Ci-dessous un exemple de fichier local.xml:

<config>
    <global>
	...
         <request>
            <direct_front_name>
                <{nom_backend_personalisé} />
            </direct_front_name>
        </request>
     </global>
     <admin>
        <routers>
            <adminhtml>
                <args>
                    <frontName><![CDATA[{nom_backend_personalisé}]]></frontName>
                </args>
            </adminhtml>
        </routers>
     </admin>
</config>

Notez les Tags <request><direct_front_name>< {nom_backend_personalisé} /> </direct_front_name></request>.
< {nom_backend_personalisé} /> est un tag et non le contenu d'un élément XML.
Remplacez seulement {nom_backend_personnalisé} par backend (par exemple) ou autre.

Ainsi vous pouvez accéder à votre backend personnalisé sans cette erreur 404 pour les modules adminhtml

@developers:
If you want to deep more about this subject, take a look in the file /app/code/core/Mage/Core/Controller/request/Http.php line 148. The problem comes from here.

if ($this->_canBeStoreCodeInUrl()) {
                $pathParts = explode('/', ltrim($pathInfo, '/'), 2);
                $storeCode = $pathParts[0];
 
                if (!$this->isDirectAccessFrontendName($storeCode)) {
                    $stores = Mage::app()->getStores(true, true);
                    if ($storeCode!=='' && isset($stores[$storeCode])) {
                        Mage::app()->setCurrentStore($storeCode);
                        $pathInfo = '/'.(isset($pathParts[1]) ? $pathParts[1] : '');
                    }
                    elseif ($storeCode !== '') {
                        $this->setActionName('noRoute');
                    }
                }
            }

 

Le dimanche 21 mars 2010 au Palais des Congrès de Bordeaux se déroulera le JoomlaDay, conférence Joomla avec des présentations et des ateliers sur différentes extensions et techniques pour utiliser Joomla et améliorer ou augmenter ses possibilités.

Diglin sera présent en tant que conférencier entre 14h45 et 16h15 et présentera les possibilités offertes par JFusion et ses plugins pour intégrer Joomla et Magento ainsi qu'une étude de cas avec la plateforme de cours sur Internet rissip.com.

Plus d'informations sur le site JoomlaDay.fr

Suite à des problèmes avec des modules installés via Magento Connect/Pear et un déplacement de mon dossier de développement vers celui de production, je me suis rendu compte que des fichiers cachés de Pear possédaient l'ancien chemin d'installation de Magento. Donc si vous souhaitez pouvoir gérer vos modules après un déplacement de votre dossier de base de Magento vers un autre emplacement vous devez utiliser le script ci-dessous en utilisant la procédure expliqué ci-dessous. Ce script regénèrera les fichiers de registre des canaux de pear et modifiera le contenu avec le nouveau chemin de votre dossier d'installation. On en parle également dans ce forum de Magento.

Les fichiers pear sont sérialisés, alors il est nécessaire de les désérialiser de remplacer le contenu avec le nouveau chemin, de sérialiser à nouveau et sauvegarder les fichiers. Le script fournit fait tout ça pour vous.

Les fichiers de cache (filename.reg) sont dans ce dossier par example: /pearlib/php/.registry/.channel.connect.magentocommerce.com_community
Le script PHP-CLI analyse le dossier désiré qui réparera le chemin de chaque module pour modifier le chemin d'installation de chaque module installé via pear.

Vous devez fournir trois arguments: 
1) le chemin complet du dossier ‘shop/downloaders/pearlib’
2) Le texte à trouver (normallement le chemin de votre ancienne installation) 
3) Le texte à remplacer (normallement le chemin de votre nouvelle installation)

Exemple:

php -f un/serialize-pear-reg-files.php ‘/the_path_to_magento_installation/downloader/pearlib/php/.registry’ ‘/old_path/shop’ ‘/new_path/shop’

Les résultats sont sauvegardés dans des sous-dossiers nommés ‘new_serialized’. Les fichiers et dossiers .registry sont cachés dans les systèmes linux. Le script fournit a été testé sur les versions  1.3.2.2 et 1.3.2.3. Vous pouvez également utiliser ce script à partir de votre navigateur mais vous devez commenter certaines parties du code et décommenter d'autres (voir le script) ainsi que fournir directement les informations ci-dessus dans le script.

Fichiers : unserialize-pear-reg-files.php.zip (2.9 Ko)

Il y a un bug dans Paypal Standard pour Magento, après qu'un client a effectué le processus d'achat et validé son paiement sur Paypal. Le client ne reçoit pas l'email incluant sa facture. Il ne reçoit seulement qu'une confirmation de paiement et un message, après le processus de paiement, lui indiquant que sa commande va être traitée.

Pour résoudre ce problème, deux possibilités:
  • Soit ajouter dans la classe (en faisant une surcharge de cette classe dans un module à vous) Mage_Paypal_Model_Standard (app/code/core/Mage/Paypal/Model/) à la ligne 418 après $invoice->register()->pay();, la ligne suivante: $invoice->sendEmail();
  • Soit créer un évènement (event) à l'aide d'une classe Observer.php qui se déclenchera après l'évènement sales_order_invoice_pay, qui dans Paypal standard démarre à la ligne 418, après le traitement $invoice->register()->pay(). Pour cela, vous dever créer un module (il y a plein de tutoriaux sur Google pour savoir comment on fait) avec les fichiers suivants (remplacer Name par le nom de votre Module):
    • /app/code/local/Name/Sales/etc/config.xml
    • /app/code/local/Name/Sales/Model/Observer.php
    • /app/etc/modules/Name_All.xml

Lire la suite...