Jump to:

23367 Posts in 18143 Topics by 2863 members

General Questions

SilverStripe Forums » General Questions » Silverstripe Magento integration [solved]

General questions about getting started with SilverStripe that don't fit in any of the categories above.

Moderators: martimiz, Sean, biapar, Willr, Ingo, swaiba, simon_w

Page: 1
Go to End
Author Topic: 1911 Views
  • SSadmin
    Avatar
    Community Member
    90 Posts

    Silverstripe Magento integration [solved] Link to this post

    Hey, guys

    Just wonder is there anyone in silverstripe community did a in-depth integration with silverstripe and magento.

    i have encounter a weird problem, so any heads up would be helpful.

    the folder structure :

    +silverstripe root
    - shop(magento root)
    - test.php

    i am trying to bring magento user control to silverstripe page. by calling magento function :

       $site_path=realpath(dirname(__FILE__) . '/../..' );
       
       //init magento connection
    require_once "$site_path/shop/app/Mage.php";

    Mage::app('default');

    umask(0);

    Mage::getSingleton('core/session', array('name' => 'frontend'));

    $session = Mage::getSingleton('customer/session');

    var_dump(Mage::getSingleton('customer/session')->isLoggedIn());

    $customer_data = Mage::getModel('customer/customer')->$session->id;

    //CHECK IF LOGGED IN
    if(Mage::getSingleton('customer/session')->isLoggedIn()){

    Debug::show( 'Welcome ' .$session = Mage::getSingleton('customer/session')->getCustomer()->getName());

    }

    It should return true, and aslo retrun the login name from magento.

    It works fine on test.php file, but seems not working once you put into the code into Page controller init function. It always return false.

    I wonder is some functions in silverstripe RequestHandler conflict with the code or break the session object that passed on by magento.

    Any help would be appreciated.

    Thanks
    Alex

  • MarcusDalgren
    Avatar
    Community Member
    288 Posts

    Re: Silverstripe Magento integration [solved] Link to this post

    I haven't tried this myself but my guess is that the reason you're not having any luck is because there's already a session started by silverstripe. In order to get the user session from Magento I think you'd have to close down the silverstripe session first and then start up the magento session to do your stuff.

  • SSadmin
    Avatar
    Community Member
    90 Posts

    Re: Silverstripe Magento integration [solved] Link to this post

    thanks for your quick feedback, Smurkas.
    I have tried to clean all session before calling magento mage functions.

       public function init(){

    Session::clear_all();

       //docroot
    $site_path=realpath(dirname(__FILE__) . '/../..' );

       //init magento connection
        require_once "$site_path/shop/app/Mage.php";

    Mage::app('default');

    umask(0);

    $session = Mage::getSingleton('customer/session');

    var_dump(Mage::getSingleton('customer/session')->isLoggedIn());

    $customer_data = Mage::getModel('customer/customer')->$session->id;

    Debug::show(var_dump(Session::get_all()));

    //CHECK IF LOGGED IN
    if(Mage::getSingleton('customer/session')->isLoggedIn()){

    Debug::show( 'Welcome ' .$session = Mage::getSingleton('customer/session')->getCustomer()->getName());

    }

    }

    however, it still return flase by some resaon.

    well, i have just pick up a interesting stuff by relevant to the problem.

    on my standalone test.php (which worked) :

    i try to dump the session core

    echo var_dump($_SESSION['core']);

    it looks like :

    array(6) { ["_session_validator_data"]=> array(4) { ["remote_addr"]=> string(9) "127.0.0.1" ["http_via"]=> string(0) "" ["http_x_forwarded_for"]=> string(0) "" ["http_user_agent"]=> string(63) "Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0" } ["session_hosts"]=> array(1) { ["testdomain.dev"]=> bool(true) } ["messages"]=> object(Mage_Core_Model_Message_Collection)#38 (2) { ["_messages:protected"]=> array(0) { } ["_lastAddedMessage:protected"]=> NULL } ["just_voted_poll"]=> bool(false) ["visitor_data"]=> array(19) { [""]=> NULL ["server_addr"]=> int(2130706433) ["remote_addr"]=> int(2130706433) ["http_secure"]=> bool(false) ["http_host"]=> string(15) "testdomain.dev" ["http_user_agent"]=> string(63) "Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0" ["http_accept_language"]=> string(14) "en-gb,en;q=0.5" ["http_accept_charset"]=> string(30) "ISO-8859-1,utf-8;q=0.7,*;q=0.7" ["request_uri"]=> string(14) "/shop/customer" ["session_id"]=> string(26) "a1tdof021stiagvq158m7m1770" ["http_referer"]=> string(0) "" ["first_visit_at"]=> string(19) "2011-08-28 22:58:10" ["is_new_visitor"]=> bool(false) ["last_visit_at"]=> string(19) "2011-08-28 23:12:05" ["visitor_id"]=> string(2) "41" ["last_url_id"]=> string(3) "794" ["do_customer_login"]=> bool(false) ["customer_id"]=> string(1) "1" ["customer_log_id"]=> string(1) "5" } ["last_url"]=> string(46) "http://testdomain.dev/shop/cms/index/noRoute/" }

    but if i do the same in silverstripe end inside init();
    it returns only part of the obejct. strange @@

    array(2) { ["core"]=> array(2) { ["_session_validator_data"]=> array(4) { ["remote_addr"]=> string(9) "127.0.0.1" ["http_via"]=> string(0) "" ["http_x_forwarded_for"]=> string(0) "" ["http_user_agent"]=> string(63) "Mozilla/5.0 (Windows NT 5.1; rv:6.0) Gecko/20100101 Firefox/6.0" } ["session_hosts"]=> array(1) { ["nelsonhoney.dev"]=> bool(true) } } }

  • SSadmin
    Avatar
    Community Member
    90 Posts

    Re: Silverstripe Magento integration [solved] Link to this post

    wonder is there a default silverstripe session length limitation on its Session object.

    compare the session object ( standalone one and silverstripe ) one at:

    https://gist.github.com/1177408

  • MarcusDalgren
    Avatar
    Community Member
    288 Posts

    Re: Silverstripe Magento integration [solved] Link to this post

    Session::clear_all(); does not actually kill the session. I think you actually have to destroy it in order to get Magento up and running. Try Session::destroy(false); and if that doesn't work try Session::destroy(true); after calling Session::clear_all()

    With the second version you'll actually kill the current session cookie so I'm not sure if the silverstripe session can be retrieved again. I think the best option when working with systems like this is if you have some kind of layer between them and call that with curl or file_get_contents. Since both systems make extensive use of the session I don't know if you can get them running side by side without seriously crippling one or the other.

  • SSadmin
    Avatar
    Community Member
    90 Posts

    Re: Silverstripe Magento integration [solved] Link to this post

    Hey, Smurkas.

    thanks for your suggestions. I tried both Session::destroy(false); and Session::destroy(true);. seems still no luck on that.
    I do know it could get super annoy trying to make silverstripe integrated with magento, working with magento is not a joy at all..
    But thanks for help anyway..
    i am doing debuging individually, trying to find the difference between the two.
    Let me know if you have any other insight regarding of this.

    Cheers.

  • SSadmin
    Avatar
    Community Member
    90 Posts

    Re: Silverstripe Magento integration [solved] Link to this post

    Hey, for everyone who may encounter same issue. it has been solved by moving all Mage Initialise code from Page init() to _config.php instead.

    so in _config.php add the follow code.

    $site_path = realpath(dirname(__FILE__) . '/..' );

    // include Magento Application
    require_once "$site_path/shop/app/Mage.php";

    umask(0); // changes this file's permissions - security issue?

    // Initialise Magento
    Mage::app('default');
    // get the magento session - make sure ttl is the same
    // $this->mage_session = $this->get_mage_session();

    // You have two options here,
    // "frontend" for frontend session or "adminhtml" for admin session
    Mage::getSingleton("core/session", array("name" => "frontend"));

    Thanks for the help from Barry Keenan.
    For the whole tutorial please visit www.gingerleprechaun.com

    1911 Views
Page: 1
Go to Top

Want to know more about the company that brought you SilverStripe? Then check out SilverStripe.com

Comments on this website? Please give feedback.