Drupal ブロック内に Magento ショッピング カートをロードするブロックを作成しようとしています。
次のコード (/test.php にあります) は、ショッピング カートとその内容を適切に読み込みます (Magento インストールは /magento にあります)。
<?php
/*
* Initialize magento.
*/
require_once('magento/app/Mage.php');
umask(0);
Mage::app('default');
Mage::getSingleton('core/session', array('name'=>'frontend'));
Mage::getSingleton('customer/session');
/*
* Add specific layout handles to our layout and then load them.
*/
$layout = Mage::app()->getLayout();
$layout->getUpdate()
->addHandle('default')
->load();
/*
* Generate blocks, but XML from previously loaded layout handles must be
* loaded first.
*/
$layout->generateXml()
->generateBlocks();
/*
* Now we can simply get any block in the usual way.
*/
$cart = $layout->getBlock('cart_sidebar')->toHtml();
echo $cart;
?>
(セッション値をデバッグするために FirePHP を使用しています。これが fb(); 呼び出しの目的です。)
Drupal 内で (hook_menu コールバックを介して) まったく同じコードを使用すると、次のエラーが発生します。
致命的なエラー: Mage_Core_Model_Session_Abstract::getMessages(): スクリプトがメソッドを実行しようとしたか、不完全なオブジェクトのプロパティにアクセスしようとしました。unserialize() が呼び出される前に、操作しようとしているオブジェクトのクラス定義「Mage_Core_Model_Message_Collection」がロードされていることを確認するか、/home/aendrew/workspace/drupgento/magento/ にクラス定義をロードする __autoload() 関数を提供してください。 app/code/core/Mage/Core/Model/Session/Abstract.php 行 215
私の推測では、Drupal は Magento と競合する何らかのセッション処理を行っていると思います。スクリプトの開始時に $_SESSION の設定を解除すると、空のカートが表示されます (実際にアイテムがあるかどうかに関係なく)。また、既存のセッションを一時変数に入れてから、最後に array_merge() を実行しようとしましたが、それも機能しません。
どうすればこれを行うことができますか?ありがとう!