105 votes

Comprendre le bloc Magento et le type de bloc

Je veux juste comprendre la signification de

 <block type="page/html" name="root" output="toHtml" template="example/view.phtml">

J'ai obtenu de nombreuses références à partir de Google et j'ai compris beaucoup de choses à ce sujet, mais je ne parviens toujours pas à comprendre la formation de type="page/html" comment former un type pour mon module personnalisé.

Veuillez expliquer

type="A/B"

Faites-moi savoir d'où viennent ces A et B ?

157voto

Kamesh Jungi Points 1197

Pour mieux comprendre les types de blocs de Magento, voici quelques types de blocs intégrés qui sont largement utilisés dans la mise en page.

  1. **core/template** : Ce bloc rend un modèle défini par son  template  attribut. La majorité des blocs définis dans le schéma sont de type ou de sous-type  core/template .
  2. **page/html** : C'est un sous-type de  core/template  et définit le bloc racine. Tous les autres blocs sont des blocs enfants de ce bloc.
  3. **page/html_head** : Définit la section d'en-tête HTML de la page qui contient des éléments permettant d'inclure JavaScript, CSS, etc.
  4. **page/html_header** : Définit la partie en-tête de la page qui contient le logo du site, les liens supérieurs, etc.
  5. **page/template_links** : Ce bloc est utilisé pour créer une liste de liens. Les liens visibles dans la zone du pied de page et de l'en-tête utilisent ce type de bloc.
  6. **core/text_list** : Certains blocs comme  contentleftright  etc. sont de type  core/text_list . Lorsque ces blocs sont rendus, tous leurs blocs enfants sont rendus automatiquement sans qu'il soit nécessaire d'appeler la fonction getChildHtml()  méthode.
  7. **page/html_wrapper** : Ce bloc est utilisé pour créer un bloc enveloppant qui rend ses blocs enfants à l'intérieur d'une balise HTML définie par l'action.  setHtmlTagName . La balise par défaut est  <div>  si aucun élément n'est défini.
  8. **page/html_breadcrumbs** : Ce bloc définit les fils d'Ariane sur la page.
  9. **page/html_footer** : Définit la zone de pied de page qui contient les liens de pied de page, le message de copyright, etc.
  10. **core/messages** : Ce bloc rend les messages d'erreur/succès/avis.
  11. **page/switch** : Ce bloc peut être utilisé pour le commutateur de langue ou de magasin.

Il s'agit d'une liste des seuls types de blocs couramment utilisés. Il existe de nombreux autres types de blocs qui sont utilisés dans les implémentations avancées de thèmes.

127voto

clockworkgeek Points 25923

En A est un module alias . Dans ce cas page est le diminutif de Mage_Page_Block (il est défini dans app/code/core/Mage/Page/etc/config.xml si vous voulez voir).

En B est le nom de la classe relative à l'alias, les lettres initiales de chaque mot sont en majuscules. Dans ce cas html devient Html et est ajouté à l'alias résolu, donc il est Mage_Page_Block_Html . On le trouve probablement dans le fichier app/code/core/Mage/Page/Block/Html.php car les noms de classe se traduisent directement en emplacements dans Magento.

Avez-vous utilisé un alias de modèle au lieu d'un alias de bloc ? page serait Mage_Page_Model à la place. Il en va de même pour les modèles de ressources et les aides. Votre propre module devra les définir dans sa section config si elle doit avoir des blocs, des modèles et des aides.

8voto

<block type="page/html" name="root" output="toHtml" template="example/view.phtml">

est un FrontendName défini dans etc/config.xml fichier html est un nom de classe de bloc

plus de détails :

dans cette ligne type(type="page/html") définissez le nom de la classe de blocs en fonction de votre template(template="example/view.phtml">) et le nom est unique pour chaque bloc.

voir d'abord la structure du dossier

app>local>namespace>modulename>etc>config.xml

nous établissons FrontendName = 'mymodule'

app>local>namespace>modulename> Bloc >hello.php

dans hello.php vous avez créé une fonction

   class namespace_modulename_Block_Data extends Mage_Core_Block_Template
   {
    public function mydata()
        {
            $data = "Block is called";
            return $data;
         }     
}   

et venez maintenant à votre page layout xml :

<block type="mymodule/data" name="xyz" template="example/view.phtml"> ici mydata est le nom du frontend

et maintenant venez à votre modèle

page template/example/view.phtml

ici vous pouvez appeler directement la fonction mydata()

comme

<div>
<?php echo $this->mydata(); ?>
</div>

maintenant vous pouvez obtenir votre sortie dans le navigateur "Le bloc est appelé"

5voto

ZeNC Points 66

Je ne connais pas le type "B", mais "A" fait référence au nom du module dans le fichier config.xml. exemple dans config.xml :

<A><!-- script --></A>

Non, vous n'avez pas tort. Mais le "<!-- script -->" peut prêter à confusion. Clarifions : comme les réponses ci-dessus l'ont indiqué, il s'agit d'un alias, qui se compose de deux parties, la première partie ("A") elle-même est l'alias que vous définissez pour les classes de votre module dans le fichier config.xml le second est un chemin relatif à la valeur du nœud. L'ensemble ("A" + "B" en majuscule) sera traduit en un nom de classe, en utilisant la première partie (la valeur du noeud "A") exactement comme vous la définissez (attention aux majuscules/minuscules si vous ne voulez pas passer des heures à souffrir) et la seconde partie est mise en majuscule après chaque soulignement. Donc, commencez par l'exemple A/B avec un bloc et cette configuration :

<config>
  ...
  <global>
    <blocks>
      <A>Vendor_Module_Block</A>
    </blocks>
  </global>
  ...
</config>

En cours d'exécution A/B serait résolu par la configuration de Magento en Vendor_Module_Block_B qui serait ensuite inclus par l'autoload à partir du chemin suivant : public/app/local/Vendor/Module/Block/B.php . Pour mieux comprendre, je vous conseille de jeter un coup d'œil au Mage_Core_Model_Config::getGroupedClassName() , Mage_Core_Model_Config::getModelInstance() y Varien_Autoload::autoload() .

3voto

Rully Points 31

Je ne connais pas le type "B", mais "A" fait référence au nom du module dans le fichier config.xml.

Un exemple dans le fichier config.xml :

<A><!-- script --></A>

nb : j'espère que je ne me trompe pas

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X