web-dev-qa-db-fra.com

Comprendre le bloc et le type de bloc Magento

Je veux juste comprendre le sens de

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

J'ai reçu de nombreuses références de Google et compris beaucoup de choses à ce sujet, mais je suis toujours incapable de comprendre la formation de type="page/html" comment former un type pour mon module personnalisé.

S'il vous plaît, expliquez

type="A/B"

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

105
Anup_Tripathi

Le A est un module alias. Dans ce cas, page est un raccourci pour Mage_Page_Block _ (il est défini dans app/code/core/Mage/Page/etc/config.xml si tu veux voir).

Le B est le nom de la classe par rapport à l'alias, les lettres initiales de chaque mot sont en majuscule. Dans ce cas, html devient Html et est ajouté à l'alias résolu, de sorte qu'il est Mage_Page_Block_Html _ . Cela se trouve probablement dans le fichier app/code/core/Mage/Page/Block/Html.php parce que les noms de classe sont traduits directement dans les emplacements de Magento.

Si vous utilisiez un alias de modèle au lieu d’un alias de bloc, alors page serait Mage_Page_Model au lieu. La même chose se produit pour les modèles de ressources et les assistants. Votre propre module devra définir ceux-ci dans config s'il doit avoir des blocs, des modèles et des aides.

126
clockworkgeek

Pour en savoir plus sur les types de blocs magento, voici quelques types de blocs intégrés qui sont largement utilisés dans la mise en page.

  1. core/template: Ce bloc affiche un modèle défini par son attribut template. La majorité des blocs définis dans la mise en page sont de type ou de sous-type de core/template.
  2. page/html: Ceci 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 pour inclure JavaScript, CSS, etc.
  4. page/html_header: Définit l'en-tête de la page contenant le logo du site, les liens en haut, etc.
  5. page/template_links: Ce bloc permet de créer une liste de liens. Les liens visibles dans le pied de page et la zone d'en-tête utilisent ce type de bloc.
  6. core/text_list: Certains blocs comme content, left, right 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 méthodegetChildHtml().
  7. page/html_wrapper: Ce bloc est utilisé pour créer un bloc wrapper qui restitue ses blocs enfants dans 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 le fil d'Ariane sur la page.
  9. page/html_footer: Définit le bas de page d'une page contenant des liens de bas de page, un message de copyright, etc.
  10. core/messages: Ce bloc affiche les messages d'erreur/de succès/de notification.
  11. page/switch: Ce bloc peut être utilisé pour le commutateur de langue ou de magasin.

Ceci est une liste des seuls types de blocs couramment utilisés. De nombreux autres types de blocs sont utilisés dans les implémentations avancées de thèmes.

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

page est un nom de front défini dans le fichier etc/config.xml html est un nom de classe en bloc

plus de détails:

dans cette ligne type(type="page/html") définir un nom de classe de bloc lié à votre template(template="example/view.phtml">) et nom est unique pour chaque bloc.

d'abord voir la structure du dossier

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

nous avons mis FrontendName = 'mymodule'

app> local> namespace> modulename> Block> 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 maintenant, venez sur votre page XML de mise en page:

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

et maintenant venez à votre modèle

template/example/view.phtml page

ici vous pouvez appeler directement la fonction mydata ()

comme

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

vous pouvez maintenant obtenir votre sortie dans le navigateur "Le bloc s'appelle"

je ne connais pas le type "B", mais "A" fait référence à la balise du nom de votre module dans le fichier config.xml, par exemple dans le fichier config.xml:

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

Non, tu n'as pas tort. Mais le "<!-- script -->" Peut être déroutant. Clarifions les choses: comme l’a dit la réponse ci-dessus, il s’agit d’un alias composé de deux parties, la première ("A") est l’alias que vous définissez dans les classes de votre module dans le module config.xml De votre module, le second. est un chemin relatif à la valeur du nœud. Ceux-ci ensemble ("A" + "B" en majuscule) seront traduits en un nom de classe, en utilisant la première partie (la valeur du nœud "A") exactement comme vous le définissez (surveillez les majuscules/minuscules si vous ne voulez pas d'heures souffrance) et la deuxième partie est capitalisée après chaque trait de soulignement. Commençons par l’exemple A/B avec un bloc et cette configuration:

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

Au moment de l'exécution, A/B Serait résolu par la configuration de Magento en Vendor_Module_Block_B, Ce qui serait alors inclus par le chargement automatique à partir du chemin suivant: public/app/local/Vendor/Module/Block/B.php. Pour mieux comprendre, je vous conseille de jeter un coup d'œil aux Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance() et Varien_Autoload::autoload().

5
ZeNC

Je ne connais pas le type "B", mais "A" fait référence à la balise de nom de votre module dans config.xml

Un exemple dans le fichier config.xml:

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

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

3
Rully