Magento主题中左栏的块类型是什么?

Ian*_*ton 5 magento

我正在制作一个自定义的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页面渲染

布局对象负责为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是一个不错的默认.


jok*_*net 0

对于这种情况,最好的类型是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)