2010-12-07 44 views
1

J'ai posé cette question hier Static block on home page in Magento, qui a répondu à ma question sur l'accrochage d'un cms/bloc à un bloc existant (contenu, dans cet exemple). Mais maintenant je voudrais savoir comment créer mon propre bloc.Créer un nouveau bloc dans Magento

J'ai dans mon modèle .phtml:

<?php echo $this->getChildHtml('home_flash') ?> 

Et dans mon fichier cms.xml

<reference name="home_flash"> 
    <block type="cms/block" name="home-page-flash" before="content"> 
    <action method="setBlockId"><block_id>home-page-flash</block_id></action> 
    </block> 
</reference> 

Mais ce ne fonctionne pas.

J'ai aussi essayé de créer mon propre type de bloc, (en copiant la déclaration de mie de pain) dans le fichier page.xml:

<block type="page/html_home_block" name="home_block" as="home_block" template="page/template/home_block.phtml"/> 

Ce fichier existe mais n'est pas rendu.

Cependant, lorsque je référence le bloc comme ceci:

<block type="page/html_breadcrumbs" name="home_block" as="home_block" template="page/template/home_block.phtml"/> 

Il rend mon modèle de bloc de la maison, mais le CMS d'origine/bloc n'est pas attaché.

Espérons que tous les cas différents montrent ce qui se passe et mettent en évidence l'écart de mes connaissances assez bien pour que quelqu'un puisse répondre, dois-je "enregistrer" mon nouveau type "home_block" quelque part?

+0

Ce que vous essayez d'accomplir n'est pas totalement clair, ce qui complique la compréhension des questions. Pourriez-vous expliquer quel est le résultat final que vous tentez d'atteindre, en plus d'être plus précis? (c'est-à-dire "mon modèle .phtml": quel modèle phtml?) –

+0

@Alan Storm, Merci pour le commentaire, je sais que la question était longue et j'ai essayé de la résumer en une seule question à la fin! @clockworkgeek a répondu à ma question et il me semble que j'avais manqué le point sur le bit MVC de Magento! –

Répondre

5

Il existe de nombreux blocs disponibles que vous pouvez utiliser sans créer le vôtre. Dans ce cas, je pense que core/text_list serait approprié car il ne nécessite pas de modèle et peut contenir autant de blocs enfants que nécessaire.

<?xml version="1.0"?> 
<layout version="0.1.0"><!-- All layout files start with this --> 
    <cms_index_index><!-- Index directive is the same as "home" page --> 
     <reference name="root"><!-- For more blocks that can be referenced see "default" directive --> 
      <block type="core/text_list" name="home_flash"> 
       <block type="cms/block" name="home-page-flash"> 
        <action method="setBlockId"><block_id>home-page-flash</block_id></action> 
       </block> 
      </block> 
     </reference> 
    </cms_index_index> 

    <!-- More directives might go here --> 

</layout> 

D'autres types de blocs utiles sont intéressantes core/text et core/template qui correspondent à Mage_Core_Block_Text et Mage_Core_Block_Template respectivement. Ils s'habituent le plus.
Votre type de bloc fait maison de page/html_home_block n'a pas de classe PHP avec un nom correspondant, et si vous créiez vraiment le vôtre, vous ne pourriez pas utiliser le préfixe page puisque Magento le fait déjà.

Pour créer un bloc, vous n'avez besoin que d'une balise <block> dans le fichier de modèle.
Pour créer un type de bloc, vous devez écrire une classe PHP, lui donner un espace de nom et le déclarer comme faisant partie d'un module.
Pour ajouter à un bloc existant, vous devez utiliser une balise <reference>.

Il existe de nombreux articles de qualité au Magento Knowledge Base, y compris certains sur Theming & Design.

+0

Merci pour la réponse complète et complète, j'ai eu du mal à trouver de la documentation sur la base de connaissances qui n'était pas super simple ou bien sur ma tête. Je vais regarder dans les blocs existants maintenant, et pourrait même piquer autour de l'autre côté du bit MVC. –