1
<page>
            <rewrite>
                <html>MageWorx_SeoSuite_Block_Page_Html</html>
                <html_head>MageWorx_SeoSuite_Block_Page_Html_Head</html_head>
            </rewrite>
        </page>

上面的代码重写了这个块。我正在使用以下代码创建一个新的标题块,然后在我的 wordpress 博客中手动将 JS 文件添加到标题块,以保持页眉和页脚与 Magento 相同

$layout = Mage::getSingleton('core/layout'); 
$headBlock = $layout->createBlock('page/html_head');
$headBlock->addJs('prototype/prototype.js');
..... and other JS and CSS using the same code

但是当我使用上面的代码时,它会像我一样出现错误

"Call to a member function getFullActionName() on a non-object in app\code\local\MageWorx\SeoSuite\Block\Page\Html\Head.php on line 53" 

第 53 行在哪里

        $actionName = $this->getAction()->getFullActionName();

扩展 Mageworx_seosuite 在 Magento 中运行良好,没有任何错误,但是当我尝试按照http://www.atwix.com/magento/wordpress-magento/在博客中使用它时,它给了我错误

谁能帮我这里有什么问题。

谢谢

4

1 回答 1

0

由于 Magento 文件包含在 Wordpress 中,因此没有实际的 Magento 请求运行,也没有前端控制器,而 MageWorx 扩展通常正确地依赖于前端控制器。

您可以尝试做的是通过在$headBlock创建后添加以下代码来强制存在虚拟前端控制器:

if ($headBlock instanceof MageWorx_SeoSuite_Block_Page_Html_Head) {
    $reflectedApp = new ReflectionObject(Mage::app());
    $controllerProperty = $reflectedApp->getProperty('_frontController');
    $controllerProperty->setAccessible(true);
    $controllerProperty->setValue(Mage::app(), new Mage_Core_Controller_Varien_Front());
    new Mage_Core_Controller_Front_Action(Mage::app()->getRequest(), Mage::app()->getResponse());
}

但这并不是很干净,可能还不够。

或者,您可以尝试在创建块之前禁用 MageWorx 重写:

Mage::app()->getConfig()->setNode('global/blocks/page/rewrite/html_head', '', true);
于 2013-05-23T09:29:48.537 回答