Magento ::: Использование getBodyClass () в header.html - PullRequest
2 голосов
/ 14 марта 2011

У меня проблемы с выяснением того, как получить доступ к методу за пределами его области действия.

В моем случае ::::

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

Это код из 2columns-left.phtml

Я хочу использовать метод getBodyClass в header.html , например, так ::::

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

Но поскольку getBodyClass () является методом Mage_Page_Block_Html, он не работает с $ this в Mage_Page_Block_Html_Header.

Может кто-нибудь помочь мне с настройкой этого кода

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

для использования в header.html?Или укажите мне правильное направление?

Ответы [ 2 ]

4 голосов
/ 14 марта 2011

Класс тела устанавливается в блоке page/html, когда создается этот блок.

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.</p> <pre><code><?php //from any block template context $body_class = $this->getLayout()->createBlock('page/html')->getBodyClass(); ?> ... <div class="header <?php echo $body_class?>">

Или получить ссылку на существующий блок page/html.

<?php
$body_class = $this->getLayout()->getBlock('root')->getBodyClass();
?>
</code>
1 голос
/ 14 марта 2011

Использование правила CSS

В этой таблице стилей можно было бы избежать этого объявления о насмешках и нас, которые используют класс, находящийся в элементе body, например:

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

Создать блок страницы / html

Я бы предложил использовать правило CSS выше. Но если вам действительно нужен доступ к блоку page/html для этого метода, то вы можете создать экземпляр блока и получить к нему прямой доступ с помощью:

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