1

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() を実行しようとしましたが、それも機能しません。

どうすればこれを行うことができますか?ありがとう!

4

2 に答える 2

3

Joomla と MAgento の統合に取り組みましたが、同じ問題が発生します。私が提供する解決策は最善の解決策ではないかもしれませんが、単一の PHP スクリプト プロセス間でセッションを共有できる唯一の解決策でした。

Joomla セッションを「停止」し、Magento で作業を行い、同じスクリプト プロセス中に Joomla でセッションを再開する必要がありました。これは私が Joomla プラグインのために行ったことのサンプルです。私は Drupal Framework を認識していないので、そのインスピレーションを得ることができますが、Joomla プラグインのために私が行ったコードをここで見つけることができます: http://pastie.org /5505841#4

提供されたコードで最も興味深い部分は、メソッドdestroyTemporaryJoomlaSession、、、およびです。loadAndStartMagentoBootstraprestartJoomlaSessionstartMagentoSessionstopMagentoSession

次に、このプラグインをいくつかの Joomla モジュールで次のように使用します。

$plgMageLib = new plgSystemMagelib ( );
$plgMageLib->destroyTemporaryJoomlaSession ();
if ($plgMageLib->loadAndStartMagentoBootstrap ()) :
    $plgMageLib->startMagentoSession ();

    /* Content of Magento logic, blocks or else */

    $html = '';
    $blockId = $params->get ( 'block_id', '' );
    echo JFusion_Helper_Mageselectblock::callblock ( $blockId );

    /* EOF */

    $plgMageLib->stopMagentoSession ();

endif;
$plgMageLib->restartJoomlaSession ();

それが役に立てば幸い!

于 2012-12-10T10:28:44.813 に答える
0

Mage_Core_Model_Session_Abstract_Varien::start();

于 2013-07-02T07:04:11.723 に答える