了解Magento块和块types
我只是想了解一下这个意思
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">
我得到了很多谷歌的参考,并了解了很多事情,但我仍然无法理解type="page/html"
如何形成我的自定义模块的types。
请解释
type="A/B"
让我知道这个A和B从哪里来?
A
是模块的别名 。 在这种情况下, page
是Mage_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。
-
core/template
:这个模块呈现由template
属性定义的template
。 布局中定义的大部分块是core/template
的types或子types。 -
page/html
:这是core/template
的子types,并定义了根块。 所有其他块都是该块的子块。 -
page/html_head
:定义包含JavaScript,CSS等元素的页面的HTML头部分 -
page/html_header
:定义page/html_header
的标题部分,其中包含站点标识,顶部链接等 -
page/template_links
:该块用于创build链接列表。 页脚和标题区域中可见的链接使用此块types。 -
core/text_list
:content
,left
,right
等一些块的types是core/text_list
。 当这些块被渲染时,所有的子块都被自动渲染而不需要调用getChildHtml()
方法。 -
page/html_wrapper
:该块用于创build一个包装块,该块将其子块setHtmlTagName
由动作setHtmlTagName
设置的HTML标签中。 如果没有元素被设置,默认标签是<div>
。 -
page/html_breadcrumbs
:该块定义页面上的面包屑。 -
page/html_footer
:定义包含页脚链接,版权信息等页面的页脚区域 -
core/messages
:该模块呈现错误/成功/通知消息。 -
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:我希望我没有错。