包括magento之外的magento标题。 $ this-> getChildHtml()的问题

时间:2013-06-06 02:50:49

标签: magento

我已经非常彻底地研究过这个话题,但找不到答案。

我正在尝试将Magneto头部包含在WordPress页面中。我创建了一个新的wordpress模板并添加了以下代码。

try {
    require_once ABSPATH . '/app/Mage.php';

    if (Mage::isInstalled()) {
        $mage = Mage::app();
        Mage::getSingleton('core/session', array('name' => 'frontend'));

        if(Mage::getDesign()->designPackageExists('xxx')) {
            Mage::getDesign()->setPackageName('xxx');
            Mage::getDesign()->setTheme('xxx');             
        }


        // init translator
        $mage->getTranslator()->init('frontend');

        // init head
        $head = $mage->getLayout()->getBlockSingleton('page/html_head');        
} }   

然后在我的模板中进一步向下

echo $head->toHtml();

现在发生的事情是头部的某些部分正在被回应,而某些部分则没有。

当我进入head.phtml并试图弄清楚发生了什么时,我注意到任何包含

的行
$this->getChildHtml()

没有得到回应。

我查看this example并注意到作者手动添加了html和CSS。为什么是这样?他们为什么不自动添加?这是一个相关的问题

由于

2 个答案:

答案 0 :(得分:0)

您是否熟悉magento布局的呈现方式?使用$head = $mage->getLayout()->getBlockSingleton('page/html_head');,您可以创建一个没有任何子项的新块。这就是作者需要再次添加JS和CSS的原因。要加载默认头部块,请查看此线程Load block outside Magento。您可以使用$layout->getBlock('head')->toHtml();加载它。

答案 1 :(得分:0)

要显示在标题栏内生成的块,您需要先创建它,然后将其设置为标题块的子项。

例如。以下是我在Wordpress中显示Magento标头块的方法,包括由原始header.phtml中的getChildHtml()生成的货币下拉块:

Mage::getSingleton('core/session', array('name' => 'frontend'));
$session = Mage::getSingleton("customer/session");
$layout = Mage::getSingleton('core/layout');

$headerBlock = $layout->createBlock('page/html_header')->setTemplate('page/html/header.phtml');
$currencyBlock = $layout->createBlock('directory/currency')->setTemplate('currency/currency.phtml');
$headerBlock->setChild('currency_selector', $currencyBlock);
$headerBlock = $headerBlock->toHtml();

然后您可以在页面上的所需位置编写块:

echo $headerBlock;

我知道这有点晚了但希望这可以帮助其他人解决这个问题。