2012-02-14 98 views
0

我有一个默认的CodeIgniter 2.1安装Magento 10.4.4安装在一个名为商店的子目录。如何从CodeIgniter访问Magento?

以下代码在从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; 
?> 

但是,如果我在一个笨模型运行它,然后isLoggedIn返回false。

这里是笨页:

<?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; 

    } 
} 

笨正在做的东西,我一直无法跟踪呢。 websiteId返回正确,但isLoggedIn返回false。

任何人有任何想法?谢谢!!

回答

1

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

对于后代,这里是一个Magento的10库笨2.1:

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

使用例的应用程序/模型/ 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 
+1

当我使用法师::应用程序('默认','商店',$选项=空);它一直在抛出错误,但是当我写了Mage :: app();每件事情都很好 – 2014-03-13 15:27:08

+0

感谢您的评论,Ashraf!但是这个解决了。我的答案显示了一个工作示例。 – wclark 2014-03-13 15:47:23

+1

我只是想帮助任何人面对我遇到的同样的问题。代码很棒。他帮了我很多,并节省了很多时间。 – 2014-03-13 21:08:38

2

我同时使用,但ive从来没有试图捣碎他们那样。我预见了很多问题。

你如何修补magento?

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

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

会话可以在这里成为一个真正的问题还藏汉作为配置数据。

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

+0

菲利普,谢谢你的回答。 – wclark 2012-02-15 12:06:07

+0

Codeigniter指向magento数据库。我的第一个magento代码示例在Codeigniter之外正常工作。我最终会看到的是一个在页面上显示Magento块的CodeIgniter网站。我需要知道CodeIgniter的人,并且可以猜测为什么我的工作magento代码不能在CodeIgniter模型中工作。我不确定为什么会话或配置数据会造成问题。就像我说的,这是有效的,而不是在CodeIgniter中。 – wclark 2012-02-15 12:14:47