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 に答える