我正在制作一个自定义的Magento(1.3)主题,我想添加一个左列.
我用html创建了template/page/html/left.phtml.
在2columns-left.phtml中,我添加了以下内容:
<?php echo $this->getChildHtml('left'); ?>
Run Code Online (Sandbox Code Playgroud)
在page.xml中,我添加了以下内容:
<block type="page/html" name="left" as="left" template="page/html/left.phtml" />
Run Code Online (Sandbox Code Playgroud)
我不太了解的是块类型应该是什么 - 如果我执行page/html,core/template或page/html_header似乎有效 - 这是什么以及这个案例的正确值是什么,我在哪里只想有效地包含一个phtml文件 - page/html/left.phtml等.
谢谢,
伊恩
Ala*_*orm 15
这是正在发生的事情的简化版本,但希望足以让你前进.
Magento认为有三种类型的物体是"特殊的".这些是模型,块和助手.而不是为这些对象使用类名称Magento使用类似URI的字符串,称为类别名.所以这
page/html
Run Code Online (Sandbox Code Playgroud)
对应于Block类
Mage_Page_Block_Html
Run Code Online (Sandbox Code Playgroud)
这里的类指的是PHP类,而不是CSS类.
布局对象负责为Magento页面创建所有HTML.
布局对象是嵌套的块对象的集合.
大多数块对象都是模板块,也就是说,Block类继承自Magento基本模板块Mage_Core_Block_Template.模板块是负责呈现phtml模板文件的对象.
因此,当您在XML布局文件中指定"类型"时,您告诉Magento.
我想使用模板baz.phtml添加类foo/bar的块对象
在代码中,那是
<!-- "name" and "as" are used to identify the block in the layout, so that
PHP code can get a reference to the object. -->
<block type="foo/bar" name="myname" as="myname" template="path/to/baz.phtml" />
Run Code Online (Sandbox Code Playgroud)
如果您只想渲染模板文件,则可以使用
type="core/template"
Run Code Online (Sandbox Code Playgroud)
但是,通过使用不同的值,例如
type="page/html"
Run Code Online (Sandbox Code Playgroud)
您的phtml模板文件可以访问所有方法
Mage_Page_Block_Html
Run Code Online (Sandbox Code Playgroud)
这意味着你可以做类似的事情
File: template.phtml
<a href="<?php echo $this->getBaseUrl();?>"></a>
Run Code Online (Sandbox Code Playgroud)
该core/template班没有一个getBaseUrl方法,但page/html类一样.
如果你正在进行自定义模块开发(而不仅仅是主题),我通常会在自己的模块中创建一个块对象,它扩展了一个基本的Magento块.这允许我在我认为合适时将自己的方法添加到块中.如果你只是主题,那page/html是一个不错的默认.
对于这种情况,最好的类型是core/text_list因为它连接每个子 HTML。
为了进行测试,您可以在布局 XML 中使用此示例:
<block type="core/text_list" name="left" as="left">
<block type="core/text" name="test">
<action method="setText"><text>Hello World</text></action>
</block>
</block>
Run Code Online (Sandbox Code Playgroud)