Comprendre le bloc et le type de bloc Magento


105

Je veux juste comprendre la signification 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 j'ai compris beaucoup de choses à ce sujet, mais je suis toujours incapable de comprendre type="page/html"comment former un type pour mon module personnalisé.

S'il vous plaît, expliquez

type="A/B"

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

Réponses:


126

Le Aest d'un module l'alias . Dans ce cas, pagec'est l'abréviation de Mage_Page_Block(il est défini dans app/code/core/Mage/Page/etc/config.xmlsi vous voulez voir).

Le Best le nom de la classe par rapport à l'alias, les lettres initiales de chaque mot sont en majuscules. Dans ce cas, htmldevient Htmlet est ajouté à l'alias résolu, il en est ainsi Mage_Page_Block_Html. Cela se trouve probablement dans le fichier app/code/core/Mage/Page/Block/Html.phpcar les noms de classe se traduisent directement par des emplacements dans Magento.

Si vous utilisiez un alias de modèle au lieu d'un alias de bloc, vous le pageseriez à la Mage_Page_Modelplace. La même chose se produit également pour les modèles de ressources et les assistants. Votre propre module devra les définir dans sa configuration s'il veut avoir des blocs, des modèles et des helpers.


@ clockworkgeek merci beaucoup. votre réponse m'est très utile.
Anup_Tripathi du

Vous m'avez sauvé une tonne. Merci.
Sumit Malik

Belle explication
Jalpesh Patel

Et s'il s'agit d'un bloc réécrit / remplacé, comment puis-je définir et utiliser le type de bloc?
Vicky Dev

@VickyDev vous n'avez rien à faire de différent car le nouveau bloc sera un descendant de l'ancien bloc et est donc compatible. Vous pouvez et devez prétendre que cela n'existe même pas.
clockworkgeek

158

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 rend un modèle défini par son  template attribut. La majorité des blocs définis dans la mise en page sont de type ou 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 la partie d'en-tête de la page qui contient le logo du site, les principaux liens, etc.
  5. page/template_links: Ce bloc est utilisé pour créer une liste de liens. Les liens visibles dans la zone de pied de page et d'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 getChildHtml() méthode.
  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 la zone de pied de page de la page qui contient des liens de pied de page, un message de copyright, etc.
  10. core/messages: Ce bloc rend les messages d'erreur / de réussite / d'avis.
  11. page/switch: Ce bloc peut être utilisé pour le sélecteur 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 de thème avancées.


Qu'en est-il: {{block type = "cms / block" block_id = "terms"}}
daslicht

5
@daslicht Déjà mentionné dans la réponse que: Ceci est 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 de thème avancées.
Kamesh Jungi

Merci. Était vraiment utile.
arqam

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

page est un FrontendName défini dans le etc/config.xmlfichier 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 bloc lié à votre template(template="example/view.phtml">)et le nom est l'unique pour chaque bloc.

voir d'abord la structure des dossiers

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

nous fixons 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 venez maintenant sur votre page xml de mise en page:

<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 / exemple / 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é"


Vous avez nommé le bloc hello.php mais le nom de la classe de bloc est 'namespace_modulename_Block_Data', ne devrait-il pas être Hello à la fin du nom?
Rai Ehtisham

5

Je ne connais pas le type "B", mais "A" se réfère à votre étiquette de nom de module dans l'exemple config.xml dans config.xml:

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

Non, tu n'as pas tort. Mais cela "<!-- script -->"peut être déroutant. Clarifions: comme les réponses ci-dessus l'ont indiqué, il s'agit d'un alias, qui se composait 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 votre module config.xml, la seconde est un chemin relatif au 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 la définissez (surveillez les majuscules / minuscules si vous ne voulez pas d'heures de la souffrance) et la deuxième partie est en majuscule après chaque trait de soulignement. Alors, commencez par l'exemple A / B avec un bloc et cette configuration:

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

En exécution A/Bserait résolu par la config Magento Vendor_Module_Block_Bqui serait alors inclus par le chargement automatique du chemin suivant: public/app/local/Vendor/Module/Block/B.php. Pour mieux comprendre, je vous conseille de jeter un oeil à la Mage_Core_Model_Config::getGroupedClassName(), Mage_Core_Model_Config::getModelInstance()et Varien_Autoload::autoload().


3

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 ne pas me tromper ..

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.