Magento ajouter un nouveau block

janvier 26, 2011 22 Commentaires

Il est parfois judicieux de rajouter un bloc dans la structure de page magento. Les pages de structures (Les page 2columns-left; right….. ) présente dans magento ne permettent pas de faire tous les agencements que l’ont veut. Nous avons vu dans un précédent tutoriel comment ajouter un nouveau template d’agencement. Nous allons voir dans ce tutoriel comment ajouter un nouveau bloc au template de structure déjà existant.

Ajouter un nouveau bloc structurel dans magento

Rajouter la référence du bloc dans page

Dans le layout page.xml de votre thème magento sont déclarés les blocs qui vont structurer les pages. Il faut en rajouter un, dans l’exemple il se nommera « maref »

app/design/frontend/{votre interface}/{votre thème}/layout/page.xml
<block type="core/text_list" name="maref" as="maref"/>

Appeler le nouveau bloc dans les pages de structures

Dans le gabarit en question (ici 2colums-left.phtml), ajouter l’appel du bloc. Dans notre exemple len bloc apparaitra en haut des pages de catégorie. Donc on place le l’appel du nouveau bloc au dessus de la div col-main

...
	<div class="main">
			<div class="befermain"><?php echo $this->getChildHtml('maref') ?></div>
                <div class="col-main">
                    <?php echo $this->getChildHtml('global_messages') ?>
                    <?php echo $this->getChildHtml('content') ?>
                </div>
                <div class="col-left sidebar"><?php echo $this->getChildHtml('left') ?></div>
            </div>
...

Rajouter la référence dans le layout

Dans le layout ou on veut qu’il apparaisse (ou dans xml agencement du Back-office de magento). Dans notre exemple l’appel se fera dans catalog.xml.Ce qui ajoutera un bloc en haut des catégories.
Dans le noeud xml

 <catalog_category_default translate="label">....

Ajoutez

<reference name="maref">
<block type="catalog/category_view" name="liste" template="bloggento/monfichier.phtml" />
</reference>

Voici le résultat sur un site développez par bloggento. Dans une catégorie on peut voir le bloc au dessus des 2 colonnes de structure. Bloc qui contient une petite image plus un texte sur toute la longueur de la page.

Liens Complémentaires

Design
22 commentaires : “Magento ajouter un nouveau block”
  1. Lulu dit :

    Bonjour,

    Malgré toutes mes vérifications, le contenu du bloc ne s’affiche pas.
    En activant le chemin des gabarits, je constate que le phtml n’est pas appelé, meme en essayant de le mettre dans différents types de pages…
    Je n’arrive pas à comprendre, une idée svp ?

  2. cédric rousset dit :

    Bonjour,
    Quel code tu as ajouté ?

  3. Lulu dit :

    Par exemple pour faire remonter les nouveaux produits dans une page de catégorie :

    Dans mon template :

    getChildHtml(‘producttabs’) ?>

    Dans catalog.xml, dans le noeud catalog_category_default :

    Dans page.xml, dans :

  4. cédric rousset dit :

    Entoure ton code de

     
  5. Lulu dit :

    Je pensais l’avoir mise..

    Par exemple pour faire remonter les nouveaux produits dans une page de catégorie :
    Dans mon template :
    
         getChildHtml('producttabs') ?>
    
    Dans catalog.xml, dans le noeud catalog_category_default :
    
    Dans page.xml, dans  
    
  6. cédric rousset dit :

    Mail moi le code.

  7. cédric rousset dit :
    <div class="main-products">
    <?php $this->getChildHtml('producttabs') ?>
    </div >
     
    Dans catalog.xml, dans le noeud catalog_category_default :
            <reference name="producttabs">
              <block type="reports/product_viewed" before="right.permanent.callout" name="left.reports.product.viewed" template="reports/product_viewed.phtml"/>
            </reference>
     
    Dans page.xml :
    <block type="core/text_list" name="producttabs" as="producttabs" translate="label" > </block>

    C’est ça ?

  8. Lulu dit :

    Magento V 1.4.2.0

  9. Lulu dit :

    Au final j’aimerai arriver à afficher n’importe quel contenu dans un premier temps, mais le lien ne se fait pas.
    Le getchild n’appel rien .
    Ici j’ai choisi les produits les plus vus, mais c’est uniquement pour tester.
    (le before n’est pas le bon)

  10. cédric rousset dit :

    Déjà pour afficher n’importe quel type de fichier appel un template de base ‘core/template donc

      <block type="core/template"  name="test" template="dossiertest/test.phtml"/>

    Ajoute un dossier « dossiertest » dans ton thème qui contient un fichier test.phtml
    dans ce fichier tu mets texte.

  11. Lulu dit :

    Rien, cela ne change rien, rien ne s’affiche :(
    getchild ne renvoie jamais rien

  12. cédric rousset dit :

    ajoute le même code que moi

    <block type="core/text_list" name="maref" as="maref"/>

    tu peut garder tes noms mais supprime le translate et le
    Ou as tu mis ce code dans page.xml ? A quel niveau ?

  13. Lulu dit :

    Dans la balise defaut, dans le block root, juste avant le block footer

  14. Lulu dit :

    Pour info, je précise que dans mon cas, je souhaite ajouter le bloc entre le bloc content et le bloc footer.
    Plus précisément sous les 2 ou 3 colonnes de mes templates.

  15. Lulu dit :

    il manquait un simple « echo » de getChild() ….
    Merci pour votre aide.

  16. cédric rousset dit :

    salut lulu,
    En fin de semaine les echo sont difficiles a voir :)

  17. signs dit :

    Bon après avoir tester plusieurs fois, je n’y arrive toujours pas.

    J’ai suivi ton tutoriel en prenant exactement ton code, j’ai juste modifier le nom du fichier par test.phtm qui contient juste le mot test

    et rien n’y fait, rien ne s’affiche, et en activant le chemin des gabarits, je constate que le phtml n’est pas appelé.

    la seul différence c’est que je souhaite placer mon block juste après la div main(quand je la place au même endroit que toi , je n’ai pas de résultat non plus.

    je n’ai pas oublié de mettre mon echo.
    une idée?

  18. cédric rousset dit :

    Bonjour,
    Non pas d’idée ça devrait fonctionner, tu es sur que tu travaille bien dans le bon thème dans le bon template ? essaye de faire le tuto avec exactement les même code que moi, ( copier coller). Quand ton nouveau block sera appelé tu pourra essayer de le changer de place.

  19. Seif dit :

    Bonjour ,
    J’ai bien appliqué cette méthode , mais
    le bloc ne s’affiche pas sur la HomePage , seulement sur les catégories contenants moins de 3 produits . Or j’ai bien modifier tous les gabarits .
    Je débute avec Magento , alors S.V.P aidez moi .

  20. cédric rousset dit :

    Pour la page d’accueil il faut l’afficher dans le xml du back office.

  21. reber dit :

    Bonjour,
    j’ai essayé pour mettre le titre et description des catégorie produit dans un block à part. Sa marche lorsque je suis sur la page catégorie, mais dès que je vais vais sur une autre page toute la page est en erreur !

Poster un commentaire

(obligatoire)

(obligatoire)