了解Magento块和块类型

Anu*_*thi 105 block magento

我只想了解其含义

 <block type="page/html" name="root" output="toHtml" template="example/view.phtml">
Run Code Online (Sandbox Code Playgroud)

我从Google获得了许多参考资料,并了解了许多相关内容,但我仍然无法理解type="page/html"如何为我的自定义模块构建类型.

请解释

type="A/B"
Run Code Online (Sandbox Code Playgroud)

让我知道这个A和B来自哪里?

Kam*_*ngi 157

为了更多地了解magento块类型,下面是一些广泛用于布局的内置块类型.

  1. core/template:此块呈现由其template 属性定义的模板  .布局中定义的大多数块都是类型或子类型  core/template.
  2. page/html:这是core/template 根块,  并定义根块.所有其他块都是此块的子块.
  3. page/html_head:定义页面的HTML头部分,其中包含用于包含JavaScript,CSS等的元素.
  4. page/html_header:定义页面的标题部分,其中包含站点徽标,顶部链接等.
  5. page/template_links:此块用于创建链接列表.页脚和标题区域中可见的链接使用此块类型.
  6. core/text_list:像某些块  contentleftright 等都是类型的  core/text_list.渲染这些块时,将自动呈现其所有子块,而无需调用该getChildHtml() 方法.
  7. page/html_wrapper:此块用于创建包装块,该包装块在操作设置的HTML标记内呈现其子块  setHtmlTagName.<div> 如果未设置任何元素,则默认标记为  .
  8. page/html_breadcrumbs:此块定义页面上的面包屑.
  9. page/html_footer:定义页脚的页脚区域,其中包含页脚链接,版权消息等.
  10. core/messages:此块呈现错误/成功/通知消息.
  11. page/switch:此块可用于语言或商店切换器.

这是仅常用块类型的列表.在高级主题实现中使用了许多其他块类型.

  • @daslicht在回答中已经提到过:这是一个只有常用块类型的列表.在高级主题实现中使用了许多其他块类型. (5认同)

clo*_*eek 127

A是模块的别名.在这种情况下page是短的Mage_Page_Block(app/code/core/Mage/Page/etc/config.xml如果你想看,它定义).

B相对于别名的类名,每个单词的首字母都大写.在这种情况下,html成为Html并附加到已解析的别名,所以它是Mage_Page_Block_Html.这可能在文件中找到,app/code/core/Mage/Page/Block/Html.php因为类名直接转换为Magento中的位置.

如果你使用的是模型别名而不是块别名,那么page就可以了Mage_Page_Model.对于资源模型和帮助程序也会发生同样的事情.如果要拥有块,模型和帮助器,您自己的模块将需要在其配置中定义这些.


小智 8

<block type="page/html" name="root" output="toHtml" template="example/view.phtml">
Run Code Online (Sandbox Code Playgroud)

page是etc/config.xml文件中定义的FrontendName,html是块类名

更多细节:

在这一行中,type(type="page/html")定义与您template(template="example/view.phtml">)和名称相关的块类名称是每个块的唯一.

首先看文件夹结构

应用>本地>命名>模块名>等>的config.xml

我们设置 FrontendName = 'mymodule'

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

在hello.php中你创建了一个函数

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

现在来到你的布局xml页面:

<block type="mymodule/data" name="xyz" template="example/view.phtml"> 这里mydata是前端名称

现在来到你的模板

template/example/view.phtml页面

在这里你可以直接调用mydata()函数

喜欢

<div>
<?php echo $this->mydata(); ?>
</div>
Run Code Online (Sandbox Code Playgroud)

现在你可以在浏览器中获得你的输出"​​Block is called"


小智 5

我不知道"B"类型,但"A"是指config.xml中config.xml示例中的模块名称标签:

<A><!-- script --></A>
Run Code Online (Sandbox Code Playgroud)

不,你没错.但"<!-- script -->"可能令人困惑.让我们澄清一下:正如上面的答案所述,这是一个别名,它由两部分组成,第一部分("A")本身是你在模块中为模块的类定义的别名config.xml,第二部分是相对于模块的类的路径.节点的值.这些("A"+大写"B")将被转换为类名,使用第一部分("A"节点的值)完全按照您的定义(如果您不想要小时,请注意大写/小写) (第二部分)在每个下划线之后都被大写.所以,从带有块和此配置的A/B示例开始:

<config>
  ...
  <global>
    <blocks>
      <A>Vendor_Module_Block</A>
    </blocks>
  </global>
  ...
</config>
Run Code Online (Sandbox Code Playgroud)

在运行时A/B会通过解决Magento的配置来Vendor_Module_Block_B那么这将通过以下路径自动加载包括:public/app/local/Vendor/Module/Block/B.php.为了更好地理解,我建议你看看Mage_Core_Model_Config::getGroupedClassName(),Mage_Core_Model_Config::getModelInstance()Varien_Autoload::autoload().