如何从CodeIgniter访问Magento?

时间:2012-02-14 20:04:32

标签: 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。

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

2 个答案:

答案 0 :(得分:2)

我使用了两者,但我从未尝试过像这样捣碎它们。我预见到了很多问题。

你是如何修补magento的?

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

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

会话也可能成为一个真正的问题,以及配置数据。

现在考虑坚持使用magento,然后通过RESTFul服务修补你的博客/网站。

答案 1 :(得分:1)

上面的两个代码示例都可以正常工作。我遇到的问题是在CodeIgniter index.php文件的顶部附近调用session_start()。一旦删除,它就开始工作了。

对于后代,这里是CodeIgniter 2.1的Magento 10库:

应用/库/ 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