Session Magento多个网站共享购物车
我有点进退两难的Magento网站,我正在建设。我有两个网站,每个网站都有一个商店,以便为每个网站启用多种货币结账。因此,通过一个通用magento安装管理的两个站点(在两个不同的域上)之间的唯一区别是货币显示和结帐货币。到目前为止,一切正常。 但是,我尝试在站点之间共享结帐会话,以便在站点之间切换时购物车保持不变。我设法将正确的会话id添加到切换url中,这样每个站点都知道我们要查找的会话。然而,实际显示购物车的方法似乎并不独立于网站工作——例如 Mage_Checkout_Model_会话 _getQuoteIdKey()->使用当前网站id检查会话中的报价id 我不知道该如何覆盖该功能,以便每个网站共享完全相同的购物车数据 my$\u SESSION['checkout']变量在每个站点上显示相同的内容,但包含此网站id后,数据对购物车没有任何用处: 'quote_id_4'=>字符串'13'(长度=2)Session Magento多个网站共享购物车,session,magento,shopping-cart,Session,Magento,Shopping Cart,我有点进退两难的Magento网站,我正在建设。我有两个网站,每个网站都有一个商店,以便为每个网站启用多种货币结账。因此,通过一个通用magento安装管理的两个站点(在两个不同的域上)之间的唯一区别是货币显示和结帐货币。到目前为止,一切正常。 但是,我尝试在站点之间共享结帐会话,以便在站点之间切换时购物车保持不变。我设法将正确的会话id添加到切换url中,这样每个站点都知道我们要查找的会话。然而,实际显示购物车的方法似乎并不独立于网站工作——例如 Mage_Checkout_Model_会话
你知道这是否可行吗?在我寻找答案并偶然发现2009年以来提出的同一个问题没有明确的解决方案后,我最终不得不亲自研究代码的深层次——瞧,我有了一个可行的解决方案。这里有一个详细的指南,供任何想使用
- 多个货币,这些货币不仅显示,而且实际以所选货币记账
- 在整个网站上共享购物车,而不仅仅是商店
- 为每种货币创建一个具有相应商店和商店视图的网站(不仅仅是商店视图,还有完整的网站)
- 将每个网站的系统-配置-货币设置设置为相应的货币。所有三个条目“基本货币”、“默认显示货币”和“允许货币”都应设置为同一种货币
- 返回默认的总体配置范围,并将系统-配置-目录-目录价格范围设置为“网站”
- 您还可以在系统-管理货币汇率中定义货币汇率
- 为每个网站范围设置适当的系统配置Web安全和不安全的基本url
- 在.htaccess文件中,将其添加到顶部(替换您在设置网站时输入的相应网站域和代码(此处为base_us和code base_uk) SetEnvIf主机网站-us.local MAGE_RUN_CODE=base_us SetEnvIf主机网站-us.local MAGE_RUN_TYPE=网站 SetEnvIf主机^WEBITE-us.local MAGE\U RUN\U CODE=base\U us SetEnvIf主机^WEBITE-us.local MAGE_RUN_TYPE=网站 SetEnvIf主机网站-uk.local MAGE_RUN_CODE=base_uk SetEnvIf主机网站-uk.local MAGE_RUN_TYPE=网站 SetEnvIf主机^website-uk.local MAGE\u RUN\u CODE=base\u uk SetEnvIf主机^WEBITE-uk.local MAGE_RUN_TYPE=网站
- 覆盖Mage/Core/Model/Store中的方法convertPrice并更改方法convertPrice-这将确保价格始终以正确的转换和正确的货币符号显示
与
现在应该可以显示多种货币,在多个网站上以多种货币收费,并在共享登录和购物车上进行。此解决方案是我在互联网上找到的知识集合,结合了我自己发现的一些零碎信息,因此感谢提供建议的人!非常有用的解决方案,其他e是我想问的一件小事,这里的会话ID是共享的,但在我的设置中,当我首先从非默认商店向购物车添加某个东西时,它会创建自己的会话,当我转到默认商店时,它会创建自己的会话,就像我首先将产品从默认商店添加到购物车,然后移动到购物车中的辅助商店项目一样共享同一个会话。很有用,但您知道是否可以保持购物车会话为全局会话,同时将订单分配给特定网站?我需要每个网站的客户和订单隔离,但使用共享购物车。使用哪种magento版本?/** * Convert price from default currency to current currency * * @param double $price * @param boolean $format Format price to currency format * @param boolean $includeContainer Enclose into <span class="price"><span> * @return double */ public function convertPrice($price, $format = false, $includeContainer = true) { $categories = Mage::getModel('catalog/category')->getCollection(); $categ_ids=$categories->getAllIds(); $baseCurrencyCode = Mage::app()->getBaseCurrencyCode(); $allowedCurrencies = Mage::getModel('directory/currency')->getConfigAllowCurrencies(); $currencyRates = Mage::getModel('directory/currency')->getCurrencyRates($baseCurrencyCode,array_values($allowedCurrencies)); if ($this->getCurrentCurrency() && $this->getBaseCurrency()) { $value = $this->getBaseCurrency()->convert($price, $this->getCurrentCurrency()); } else { $value = $price; } if($this->getCurrentCurrencyCode() != $baseCurrencyCode) { $value = $price * $currencyRates[$this->getCurrentCurrencyCode()]; } if ($this->getCurrentCurrency() && $format) { $value = $this->formatPrice($value, $includeContainer); } return $value; }
<?php /** * Currency switcher * * @see Mage_Directory_Block_Currency */ ?> <div class="top-currency"> <?php $websites = Mage::getModel('core/website')->getCollection(); $this_session_id = Mage::getSingleton('core/session', array('name' => 'frontend'))->getSessionId(); ?> <select id="website-changer" onChange="document.location=this.options[selectedIndex].value"> <?php foreach($websites as $website): $default_store = $website->getDefaultStore(); $website_currency = $default_store->getBaseCurrency()->getCurrencyCode(); $url_obj = new Mage_Core_Model_Url(); $default_store_path = $url_obj->getBaseUrl(array('_store'=> $default_store->getCode())); $default_store_path .= Mage::getSingleton('core/url')->escape(ltrim(Mage::app()->getRequest()->getRequestString(), '/')); $default_store_path = explode('?', $default_store_path); $default_store_path = $default_store_path[0] . '?SID=' . $this_session_id; ?> <option <? if(strstr($default_store_path,Mage::getBaseUrl())):?>selected="selected"<?endif; ?> value="<?=$default_store_path ?>"> <?=$website_currency?> </option> <?endforeach;?> </select> </div>
// potential custom logic for session id (ex. switching between hosts) $this->setSessionId();
// potential custom logic for session id (ex. switching between hosts) /* Amend to ensure shopping carts are shared between websites */ if (isset($_COOKIE['lastsid'])) { session_decode(file_get_contents(Mage::getBaseDir('session').'/sess_'.$_COOKIE['lastsid'])); setcookie ('lastsid', '', time() - 3600); } if (isset($_GET['SID'])) { $this->setSessionId($_GET['SID']); session_decode(file_get_contents(Mage::getBaseDir('session') . '/sess_' . $_GET['SID'])); setcookie('lastsid', $_GET['SID']); $_COOKIE['lastsid'] = $_GET['SID']; } else { $this->setSessionId(); } /* Amend end */