如何从CodeIgniter访问Magento



我有一个默认的CodeIgniter 2.1安装,Magento 10.4.4安装在一个名为store的子目录中。

以下代码在从web根目录运行时有效(禁用.htaccess)。它将给出登录的Magento用户的名字。

<?php
$site_root = '/var/www/mysite/www/httpdocs';
require_once ($site_root . '/store/app/Mage.php');
umask(0);
// Initialize Magento and hide sensitive config data below site root
$name='frontend';
$options = array('etc_dir' => realpath('../magento-etc'));
Mage::app('default','store', $options);
Mage::getSingleton("core/session", array("name" => $name));
$websiteId = Mage::app()->getWebsite()->getId();
echo "websiteid: $websiteId<br>";
$store = Mage::app()->getStore();
$customer = Mage::getModel("customer/customer");
$customer->website_id = $websiteId;
$customer->setStore($store);
echo 'customerwebsiteId: ' . $customer->website_id . '<br>';
$session = Mage::getSingleton('customer/session');
$magento_message = 'Welcome ';
// Generate a personalize greeting
if($session->isLoggedIn()){
  $magento_message .= $session->getCustomer()->getData('firstname').' ';
  $magento_message .= $session->getCustomer()->getData('lastname').'!';
}else{
  $magento_message .= 'Guest!';
}
echo $magento_message;
?>

但是,如果我在CodeIgniter模型中运行这个,那么isLoggedIn返回false。

这是CodeIgniter页面:

<?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
class Test_mage extends CI_Controller {
    function __construct()
    {
        parent::__construct();
    }
    public function index()
    {
        $site_root = '/var/www/mysite/www/httpdocs';
        require_once ($site_root . '/store/app/Mage.php');
        umask(0);
        // Initialize Magento and hide sensitive config data below site root
        $name='frontend';
        $options = array('etc_dir' => realpath('../magento-etc'));
        Mage::app('default','store', $options);
        Mage::getSingleton("core/session", array("name" => $name));
        $websiteId = Mage::app()->getWebsite()->getId();
        echo "websiteid: $websiteId<br>";
        $store = Mage::app()->getStore();
        $customer = Mage::getModel("customer/customer");
        $customer->website_id = $websiteId;
        $customer->setStore($store);
        echo 'customerwebsiteId: ' . $customer->website_id . '<br>';
        $session = Mage::getSingleton('customer/session');
        $magento_message = 'Welcome ';
        // Generate a personalize greeting
        if($session->isLoggedIn()){
            $magento_message .= $session->getCustomer()->getData('firstname').' ';
            $magento_message .= $session->getCustomer()->getData('lastname').'!';
        }else{
            $magento_message .= 'Guest!';
        }
        echo $magento_message;
    }
}

CodeIgniter正在做一些我还无法跟踪的事情。websiteId返回正确,但isLoggedIn返回false。

有人有什么想法吗?谢谢!!

我两者都用,但我从未尝试过像那样把它们混合在一起。我预见到了不少问题。

你是如何修补magento的?

您可能需要运行两个数据库连接:

$db['magento']
$db['default'] // codeigniter default

会话和配置数据在这里也可能成为一个真正的问题。

考虑暂时使用magento,然后通过RESTFul服务补丁到你的博客/网站。

上面的两个代码示例都运行良好。我遇到的问题是在CodeIgniter index.php文件顶部附近调用session_start()。一旦移除,一切都开始运转。

为了子孙后代,这里有一个用于CodeIgniter 2.1:的Magento 10图书馆

application/librarys/magento.php

<?php if ( ! defined('BASEPATH')) exit("No direct script access allowed");
Class Magento {
  function __construct($params)
  {
    global $site_root;
    $name = $params['name'];
    // Include Magento application
    require_once ($site_root . '/store/app/Mage.php');
    umask(0);
    // Initialize Magento and hide sensitive config data below site root
    // Uncomment next line if you have moved app/etc
    // $options = array('etc_dir' => realpath('../magento-etc'));
    Mage::app('default','store', $options=null);
    return Mage::getSingleton("core/session", array("name" => $name));
  }
}
// end of magento.php

用法示例app/model/test_mage.php

 <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
 class Test_mage extends CI_Controller {
  function __construct()
  {
    parent::__construct();
    $params = array('name' => 'frontend'); // frontend or adminhtml
    $this->load->library('magento', $params);
  }
  public function index()
  {
    $session = Mage::getSingleton('customer/session');
    $magento_message = 'Welcome ';
    // Generate a personalize greeting
    if ($session->isLoggedIn())
    {
      $magento_message .= $session->getCustomer()->getData('firstname').' ';
      $magento_message .= $session->getCustomer()->getData('lastname').'!';
    }
    else
      $magento_message .= 'Guest!';
    echo $magento_message . '<br>';
  }
}
// end of test_mage.php

最新更新