【问题标题】:Including magento header outside of magento. Problems with $this->getChildHtml()包括 magento 之外的 magento 标头。 $this->getChildHtml() 的问题
【发布时间】:2013-06-01 22:09:35
【问题描述】:

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

我正在尝试将 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。为什么是这样?为什么不自动添加它们?这是一个相关的问题吗

谢谢

【问题讨论】:

    标签: magento


    【解决方案1】:

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

    例如。这是我在 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;
    

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

    【讨论】:

    • 我想加载我当前的主题标题我们如何加载。
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 2013-09-11
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-10-29
      • 2017-01-12
      • 1970-01-01
      相关资源
      最近更新 更多