Magento :::在header.html中使用getBodyClass()

时间:2011-03-14 10:33:45

标签: magento-1.4 magento

我在解决如何从其范围之外访问方法时遇到了麻烦。

在我的情况下::::

<body<?php echo $this->getBodyClass()?' class="'.Mage::app()->getStore()->getCode().' '.$this->getBodyClass().'"':'' ?>>

这是来自2columns-left.phtml的代码

我想在header.html中使用getBodyClass方法,就像这样::::

<div class="header <?php echo $this->getBodyClass()?' '.$this->getBodyClass().'':'' ?>">

但是因为getBodyClass()是Mage_Page_Block_Html的一个方法,所以在Mage_Page_Block_Html_Header中它不适用于$ this。

任何人都可以帮我调整此代码

<div class="header <?php echo $this->getBodyClass()?' '.$this->getBodyClass().'':'' ?>">

用于header.html?或者指出我正确的方向?

2 个答案:

答案 0 :(得分:4)

在实例化该块时,在page/html块上设置body类。

public function __construct()
{
    parent::__construct();
    $this->_urls = array(
        'base'      => Mage::getBaseUrl('web'),
        'baseSecure'=> Mage::getBaseUrl('web', true),
        'current'   => $this->getRequest()->getRequestUri()
    );

    $action = Mage::app()->getFrontController()->getAction();
    if ($action) {
        $this->addBodyClass($action->getFullActionName('-'));
    }

    $this->_beforeCacheUrl();
}

从另一个区块中获取它的唯一方法是实例化另一个 page/html.

<?php
//from any block template context
$body_class = $this->getLayout()->createBlock('page/html')->getBodyClass();
?>
...
<div class="header <?php echo $body_class?>">

Or to get a reference to an existing page/html block.

<?php
//from any block template context
$body_class = $this->getLayout()->createBlock('page/html')->getBodyClass();
?>
...
<div class="header <?php echo $body_class?>">

答案 1 :(得分:1)

使用CSS规则

你可以在样式表中避免使用body元素上的这个kerfuffle和us声明,例如:

body.2column-left .header {
   ...
}

创建页面/ html块

我建议使用上面的CSS规则。但是如果确实需要访问该方法的page/html块,那么您可以创建该块的实例并直接访问它:

 $body_classes = $this->getLayout()->createBlock("page/html")->getBodyClass();