Magento的和Drupal会议冲突 - 如何解决?(Magento and Drupal ses

2019-10-17 10:11发布

我试着写加载Magento的购物车中的Drupal块内部的块。

下面的代码(位于/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():该脚本试图执行的方法或访问不完整的对象的属性。 请确保您尝试操作的对象的类定义“Mage_Core_Model_Message_Collection”加载反序列化()被调用之前或提供__autoload()函数来加载的类定义在/ home / aendrew /工作区/ drupgento / Magento的/上线215的应用程序/代码/核心/法师/核心/型号/会话/ Abstract.php

我的猜测是,Drupal的做某种一个与Magento的冲突的会话处理 - 如果我在脚本的开始取消设置$ _SESSION,它会显示一个空的购物车(无论是否真正有它的项目)。 我也试图把现有的会话在一个临时变量,然后做一个array_merge()结尾,但这并不能工作。

任何想法,我该怎么办呢? 谢谢!

Answer 1:

我曾在一个集成Joomla和Magento的之间,我得到了同样的问题。 我公司提供的解决方案是,也许不是最好的解决方案,但它是唯一一个我发现共享一个单一的PHP脚本程序之间的会话。

我不得不“停止” Joomla的会议,做我的东西与Magento的,并在同一个脚本进程再次启动的Joomla会话这一切。 下面是什么我做了一个Joomla插件的样本,就可以得到这方面的一个鼓舞,因为我不知道Drupal的框架,但在这里,你会发现我做了Joomla的插件代码: http://pastie.org / 5505841#4

在提供的代码最有趣的部分是方法destroyTemporaryJoomlaSessionloadAndStartMagentoBootstraprestartJoomlaSessionstartMagentoSessionstopMagentoSession

然后,我在这样一些的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 ();

希望能帮助到你!



Answer 2:

Mage_Core_Model_Session_Abstract_Varien ::开始();



文章来源: Magento and Drupal sessions conflicts — how to resolve?