我只想知道
<block type="page/html" name="root" output="toHtml" template="example/view.phtml">
我从Google那里得到了很多参考资料,了解了很多关于它的东西,但我仍然无法理解type="page/html"的形成,如何为我的自定义模块形成一个类型。请解释
type="page/html"
type="A/B"
告诉我A和B是从哪里来的
iklwldmw1#
为了更好地了解magento块类型,以下是一些广泛用于布局的内置块类型。
**core/template**
template
core/template
**page/html**
**page/html_head**
**page/html_header**
**page/template_links**
**core/text_list**
content
left
right
core/text_list
getChildHtml()
**page/html_wrapper**
setHtmlTagName
<div>
**page/html_breadcrumbs**
**page/html_footer**
**core/messages**
**page/switch**
jm81lzqq2#
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。同样的事情也发生在资源模型和帮助器上。你自己的模块需要在它的config中定义这些,如果它有块,模型和助手的话。
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
Mage_Page_Model
0h4hbjxa3#
page是在etc/config.xml文件中定义的FrontendName,html是块类名更多详情:在这一行type(type="page/html")定义块类名称相关的template(template="example/view.phtml">)和名称是唯一的每个块.第一次看到文件夹结构app>local>namespace> modules>etc> config.xml我们设置FrontendName = 'mymodule'app>local>namespace> modules>Block>hello.php在hello.php中创建了一个函数
etc/config.xml
type(type="page/html")
template(template="example/view.phtml">)
FrontendName = 'mymodule'
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()函数像
<block type="mymodule/data" name="xyz" template="example/view.phtml">
<div> <?php echo $this->mydata(); ?> </div>
现在你可以在浏览器中得到你的输出“块被调用”
uujelgoq4#
我不知道“B”类型,但“A”指config.xml中config.xml示例中的模块名称标记:
<A><!-- script --></A>
不,你没有错。但是"<!-- script -->"可能会让人感到困惑。让我们澄清一下:正如上面的答案所述,这是一个别名,它由两部分组成,第一部分(“A”)本身是您在模块的config.xml中定义的模块类的别名,第二部分是相对于节点值的路径。这两个节点(“A”+大写的“B”)将被转换为一个类名,第一部分(“A”节点的值)将按照您的定义使用(如果您不想忍受数小时的痛苦,请注意upper/upper),第二部分将在每个下划线之后大写。因此,从A/B示例开始,其中包含一个块和以下配置:
"<!-- script -->"
config.xml
<config> ... <global> <blocks> <A>Vendor_Module_Block</A> </blocks> </global> ... </config>
在运行时,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()。
A/B
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()
nxowjjhe5#
我不知道“B”类型,但“A”指的是您的模块名称标记在XNU.xml中下面是一个示例:
NB:我希望我没有错。
5条答案
按热度按时间iklwldmw1#
为了更好地了解magento块类型,以下是一些广泛用于布局的内置块类型。
**core/template**
:该块呈现由其template
属性定义的模板。布局中定义的大多数块的类型或子类型为core/template
。**page/html**
:这是core/template
的子类型,定义了根块。所有其他块都是此块的子块。**page/html_head**
:定义页面的HTML头部,其中包含JavaScript,CSS等元素。**page/html_header**
:定义页面的标题部分,包含网站徽标,顶部链接等。**page/template_links**
:此块用于创建链接列表。页脚和页眉区域中可见的链接使用此块类型。**core/text_list**
:一些区块,如content
,left
,right
等。类型为core/text_list
。当这些块被呈现时,它们的所有子块都被自动呈现,而不需要调用getChildHtml()
方法。**page/html_wrapper**
:此块用于创建一个 Package 器块,该 Package 器块在由操作setHtmlTagName
设置的HTML标记内呈现其子块。如果没有设置元素,则默认标记为<div>
。**page/html_breadcrumbs**
:此块定义页面上的面包屑。**page/html_footer**
:定义页面的页脚区域,其中包含页脚链接,版权信息等。**core/messages**
:此块呈现错误/成功/通知消息。**page/switch**
:此块可用于语言或存储切换器。这是仅常用的块类型的列表。还有许多其他块类型用于高级主题实现。
jm81lzqq2#
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
。同样的事情也发生在资源模型和帮助器上。你自己的模块需要在它的config中定义这些,如果它有块,模型和助手的话。0h4hbjxa3#
page是在
etc/config.xml
文件中定义的FrontendName,html是块类名更多详情:
在这一行
type(type="page/html")
定义块类名称相关的template(template="example/view.phtml">)
和名称是唯一的每个块.第一次看到文件夹结构
app>local>namespace> modules>etc> config.xml
我们设置
FrontendName = 'mymodule'
app>local>namespace> modules>Block>hello.php
在hello.php中创建了一个函数
现在进入你的布局XML页面:
<block type="mymodule/data" name="xyz" template="example/view.phtml">
这里mydata是前端名称现在来看看你的模板
template/example/view.phtml页面
在这里,您可以直接调用mydata()函数
像
现在你可以在浏览器中得到你的输出“块被调用”
uujelgoq4#
我不知道“B”类型,但“A”指config.xml中config.xml示例中的模块名称标记:
不,你没有错。但是
"<!-- script -->"
可能会让人感到困惑。让我们澄清一下:正如上面的答案所述,这是一个别名,它由两部分组成,第一部分(“A”)本身是您在模块的config.xml
中定义的模块类的别名,第二部分是相对于节点值的路径。这两个节点(“A”+大写的“B”)将被转换为一个类名,第一部分(“A”节点的值)将按照您的定义使用(如果您不想忍受数小时的痛苦,请注意upper/upper),第二部分将在每个下划线之后大写。因此,从A/B示例开始,其中包含一个块和以下配置:在运行时,
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()
。nxowjjhe5#
我不知道“B”类型,但“A”指的是您的模块名称标记在XNU.xml中
下面是一个示例:
NB:我希望我没有错。