2012-02-14 23 views
0

Magento 10.4.4をstoreというサブディレクトリにインストールしたデフォルトのCodeIgniter 2.1がインストールされています。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; 
?> 

しかし、これを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を返します。

誰もが考えている?感謝!!

答えて

1

上記の両方のコード例が正常に動作します。私が持っていた問題は、CodeIgniterのindex.phpファイルの最上部付近でsession_start()を呼び出すことでした。それが削除されると、すべてが機能し始めました。後世のために

は、ここにMagentoの10図書館はCodeIgniterの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( 'default'、 'store'、$ options = null)を使用しました。私はMage :: app()を書いたときにエラーを投げつけ続けました。すべてのものがうまく動作します –

+0

あなたのコメントのおかげで、アシュラフ!!しかし、これは解決されます。私の答えは実際の例を示しています。 – wclark

+1

私はちょうど私がmet.theコードと同じ問題に直面するのを手伝いたいと思ったwonderful.itは私を助けて、多くの時間を節約しました。 –

2

私は両方を使用していますが、iveはそのようにマッシュアップしようとはしませんでした。私はかなりの問題を予見しています。

どのようにマゼンタにパッチを当てていますか?

あなたが実行している2デシベルの接続が必要になる場合があります。

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

セッションは、ここでの本当の問題は、また、設定データとしてaswellになる可能性があります。

今のところmagentoを貼って、RESTFulサービスを通じてブログ/ウェブサイトにパッチを当ててください。

+0

あなたの答えをありがとう、フィリップ。 – wclark

+0

CodeigniterはMagentoデータベースを指します。私の最初のマゼンタコードの例は、Codeigniterの外でうまく動作します。私が最後にするのは、Magentoブロックをページに表示するCodeIgniterのWebサイトです。私はCodeIgniterを知っている人が必要で、私の働くMagentoコードがCodeIgniterモデル内で動作しない理由を推測できます。なぜセッションや設定データが問題になるのかよく分かりません。私が言ったように、これはCodeIgniterではなく、うまく動作します。 – wclark

関連する問題