我在解决如何从其范围之外访问方法时遇到了麻烦。
在我的情况下::::
<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?或者指出我正确的方向?
答案 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();