我已经非常彻底地研究过这个话题,但找不到答案。
我正在尝试将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。为什么是这样?他们为什么不自动添加?这是一个相关的问题
由于
答案 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;
我知道这有点晚了但希望这可以帮助其他人解决这个问题。