了解Magento块和块types

我只是想了解一下这个意思

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

我得到了很多谷歌的参考,并了解了很多事情,但我仍然无法理解type="page/html"如何形成我的自定义模块的types。

请解释

 type="A/B" 

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

A是模块的别名 。 在这种情况下, pageMage_Page_Block简称(如果您想查看,它在app/code/core/Mage/Page/etc/config.xml )。

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

如果使用模型别名而不是块别名,那么page将是Mage_Page_Model 。 资源模型和帮助者也会发生同样的情况。 你自己的模块需要在它的configuration中定义它们,如果它有块,模型和助手。

为了更多地了解magento块的types,下面是一些在布局中广泛使用的内置块types。

  1. core/template :这个模块呈现由template属性定义的template 。 布局中定义的大部分块是core/template的types或子types。
  2. page/html :这是core/template的子types,并定义了根块。 所有其他块都是该块的子块。
  3. page/html_head :定义包含JavaScript,CSS等元素的页面的HTML头部分
  4. page/html_header :定义page/html_header的标题部分,其中包含站点标识,顶部链接等
  5. page/template_links :该块用于创build链接列表。 页脚和标题区域中可见的链接使用此块types。
  6. core/text_listcontentleftright等一些块的types是core/text_list 。 当这些块被渲染时,所有的子块都被自动渲染而不需要调用getChildHtml()方法。
  7. page/html_wrapper :该块用于创build一个包装块,该块将其子块setHtmlTagName由动作setHtmlTagName设置的HTML标签中。 如果没有元素被设置,默认标签是<div>
  8. page/html_breadcrumbs :该块定义页面上的面包屑。
  9. page/html_footer :定义包含页脚链接,版权信息等页面的页脚区域
  10. core/messages :该模块呈现错误/成功/通知消息。
  11. page/switch :此块可用于语言或商店切换器。

这是只有常用块types的列表。 在高级主题实现中使用了许多其他的块types。

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

页面是在etc/config.xml文件中定义的FrontendName html是块类名称

更多细节:

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

首先看文件夹结构

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

我们设置FrontendName = 'mymodule'

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

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

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

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

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

现在来到你的模板

template / example / view.phtml页面

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

喜欢

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

现在你可以在浏览器中得到你的输出“​​Block is called”

我不知道“B”types,但“A”在config.xml中的config.xml示例中引用您的模块名称标记:

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

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

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

在运行时, A/B会通过Magentoconfigurationparsing到Vendor_Module_Block_B ,然后通过自动加载从以下path包含: public/app/local/Vendor/Module/Block/B.php 。 为了更好的理解,我build议你看看Mage_Core_Model_Config::getGroupedClassName()Mage_Core_Model_Config::getModelInstance()Varien_Autoload::autoload()

我不知道“B”types,但“A”在config.xml中引用您的模块名称标签

config.xml文件中的示例:

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

NB:我希望我没有错。