Développement des blocks / helpers

Les blocks

Création de la classe

Une fois déclaré dans le config.xml, nous allons créer notre premier block Listing :

app/code/local/Formation/Test/Block/Listing.php

Le nom de classe est donc Formation_Test_Block_Listing.

Tous les blocks doivent hériter de la classe Mage_Core_Block_Template (ou d'un autre block).

<?php class Formation_Test_Block_Listing extends Mage_Core_Block_Template {} 

Création de notre première méthode

Créons une première fonction basique :

public function getHelloWorld() { 
    return 'Hello World!';
}

Comment faire pour afficher un template dans le header qui appellerait cette méthode ?

Autocomplétion dans les templates

La plupart des IDEs comprendront la syntaxe suivante, à indiquer dans le template :

<?php /* @var $this Formation_Test_Block_Listing */ ?>

Nous indiquons ici que $this est de type Formation_Test_Block_Listing.

TP : Upsell dynamique

Avant de commencer, nous allons ajouter notre propre layout. Nous allons le déclarer dans le config.xml de notre module.

Comment fait Magento pour inclure le fichier de layout catalog.xml ? => Faire la même chose.

--

Pour ce TP, il est nécessaire de créer un jeu de test "conséquent". Nous allons créer au moins deux catégories, et au moins 5 produits. 4 produits sont dans la même catégorie et le dernier est dans la deuxième catégorie.

  • Afficher 2 produits sur la fiche produit qui sont dans la même catégorie que le produit en cours
  • Attention, le produit en cours ne doit pas être dans le listing
  • Afficher aléatoirement ces 2 produits

Vous avez besoin de :

  • Savoir récupérer une liste de produits
  • Savoir filtrer cette liste sur une catégorie
  • Savoir limiter la liste à 2 items
  • Savoir rendre aléatoire cette liste
  • Savoir récupérer la catégorie du produit courant
  • Savoir récupérer le produit courant

Pour vous aider

// Récupérer le produit en cours
<?php $product = Mage::registry('current_product') ?>
Tester avec un produit épuisé ou n'appartenant pas au store en cours : il ne doit pas s'afficher.