【问题标题】:What Block Type for Left Column in Magento Theme?Magento 主题中左栏的块类型是什么?
【发布时间】:2010-11-26 17:02:19
【问题描述】:

我正在开发一个自定义 Magento (1.3) 主题,并希望添加一个左列。

我已经创建了带有 html 的模板/页面/html/left.phtml。

在 2columns-left.phtml 中,我添加了以下内容:

<?php echo $this->getChildHtml('left'); ?>

在 page.xml 中,我添加了以下内容:

<block type="page/html" name="left" as="left" template="page/html/left.phtml" />

我不太明白的是该块类型应该是什么 - 如果我执行 page/html、core/template 或 page/html_header 它似乎可以工作 - 这是为了什么以及这种情况下的正确值是什么,我只想有效地包含一个 phtml 文件 - page/html/left.phtml 等。

谢谢,

伊恩

【问题讨论】:

  • 修复了代码格式。如果您在 StackOverflow 上使用制表符或四个空格缩进代码,它将自动进行代码格式/漂亮打印。
  • @Alan - 您还添加了一个分号,其中没有分号,也不需要。 :-P
  • 我会在默认的 HTML 格式代码上多加一个分号 ;)
  • 酷,感谢您的提示和修复。
  • @ichilton - 如果您有答案,请在可用答案中打勾。

标签: magento


【解决方案1】:

这是正在发生的事情的简化版本,但会 希望足以让您继续前进。

特殊物品

Magento 认为“特殊”的对象有三种类型。这些是模型、块和助手。 Magento 没有为这些对象使用类名,而是使用称为 class aliases 的类似 URI 的字符串。所以这个

page/html

对应Block类

Mage_Page_Block_Html

这里的类是指 PHP 类,而不是 CSS 类。

Magento 页面渲染

一个布局对象负责为一个 Magento 页面创建所有的 HTML。

布局对象是嵌套块对象的集合。

大多数块对象都是模板块,也就是说,块类继承自基本的 Magento 模板块Mage_Core_Block_Template。模板块是负责渲染 phtml 模板文件的对象。

因此,当您在 XML 布局文件中指定“类型”时,您就是在告诉 Magento。

我想添加一个带有类 foo/bar 的块对象,使用模板 baz.phtml

在代码中是

<!-- "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" />

如果你只想渲染一个模板文件,你可以使用

type="core/template"

但是,通过使用不同的值,例如

type="page/html"

您的 phtml 模板文件可以访问所有方法

Mage_Page_Block_Html

这意味着你可以做类似的事情

File: template.phtml

<a href="<?php echo $this->getBaseUrl();?>"></a>

core/template 类没有 getBaseUrl 方法,但 page/html 类有。

如果您正在进行自定义模块开发(而不仅仅是主题化),我通常会在我自己的模块中创建一个块对象,以扩展基本 Magento 块之一。这允许我在我认为合适的时候将我自己的方法添加到块中。如果您只是主题,page/html 是一个不错的默认值。

【讨论】:

  • 感谢您提供如此详细的信息! - 你有什么建议最好在哪里阅读这类东西?
  • 根据您那里所说,默认使用 core/template 并在需要使用示例中的方法时移至 page/html 不是更好吗?
  • 99% 的时间您将使用块创建 HTML,因此访问这些方法永远不会受到伤害,但这是一种风格/偏好/判断的事情。默认为核心/模板没有错。
  • 好的,谢谢。但是,访问这些方法是否会对性能造成影响?
  • @Alan - 从我的角度来看,“脱帽致敬”为您解答。非常感谢您了解这些细节。也清除了我的一些查询。
【解决方案2】:

这种情况的最佳类型是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>

【讨论】:

  • 谢谢 - 但如果我将其更改为 core/text_list,它似乎消失了?
【解决方案3】:

magento 主题中左列的块类型

<block type="core/text_list" name="left" as="left" translate="label">
    <label>Left Column</label>
</block>

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2010-12-01
    • 2012-09-18
    • 1970-01-01
    • 2014-11-03
    • 1970-01-01
    • 1970-01-01
    • 2014-08-24
    • 1970-01-01
    相关资源
    最近更新 更多