Magento 在商店级别创建签出会话
我正在尝试在商店级别而不是站点级别为登录的客户创建不同的结账会话 我们有一个有2个商店的网站。当用户将产品添加到购物车时,我们希望仅在该商店的购物车中显示该产品。但目前在商店之间切换将显示以前添加到购物车中的其他商店的产品 经过一些研究,我发现每当用户登录商店时,都会在Magento 在商店级别创建签出会话,magento,Magento,我正在尝试在商店级别而不是站点级别为登录的客户创建不同的结账会话 我们有一个有2个商店的网站。当用户将产品添加到购物车时,我们希望仅在该商店的购物车中显示该产品。但目前在商店之间切换将显示以前添加到购物车中的其他商店的产品 经过一些研究,我发现每当用户登录商店时,都会在sales\u flat\u quote表中为登录的客户创建一条记录,这对于该站点中的所有商店都很常见。因此,当用户切换存储时,我需要在sales\u flat\u quote表中创建一个新记录 我发现类Mage\u Sales\
sales\u flat\u quote
表中为登录的客户创建一条记录,这对于该站点中的所有商店都很常见。因此,当用户切换存储时,我需要在sales\u flat\u quote
表中创建一个新记录
我发现类Mage\u Sales\u Model\u Mysql4\u Quote中的loadByCustomerId()
函数在Sales\u flat\u Quote表中创建了新记录。但我看到的只是一个选择查询:
$read = $this->_getReadAdapter();
$select = $this->_getLoadSelect('customer_id', $customerId, $quote)
->where('is_active=1')
->order('updated_at desc')
->limit(1);
$data = $read->fetchRow($select);
我不明白select查询是如何在sales\u flat\u quote
表中创建记录的
当登录的客户切换到同一站点下的其他商店时,是否有人可以指导他/她如何在此表中创建新记录
我们有一个有2个商店的网站。当用户向购物车添加产品时,
我们只想在购物车中为该商店展示该产品。但是
目前,在商店之间切换将显示其他商店的产品
以前添加到购物车的商店
哪个是正确的
看起来您想为存储定义分离购物车,这两个定义都连接到Magento中非常相同的网站定义
在Magento中,在同一网站中定义的所有商店始终共享同一购物车
那是故意的
要实现购物车分离,您需要将Magento设置更改为每个网站有两个网站
s和一个商店
。否则,你会遇到无休止的问题,将两家商店分开(就像你现在遇到的问题),我想
尽管如此,我还是会尝试回答你的具体问题:
我不明白select查询是如何在中创建记录的
sales\u flat\u quote
表格
SELECT
查询通常永远不会创建记录;人们认为它可以读取数据
查看Mage\u Checkout\u Model\u Session::loadCustomerQuote()
:
这就是为什么要调用您所说的Mage\u Sales\u Model\u Mysql4\u Quote::loadByCustomerId()
。它只加载客户报价(如果有),没有其他内容
通过调用quotessave()
方法创建/更新记录
例如,Magento EE 1.11.0.0通过以下方式保存记录:
if ($customerQuote->getId() && $this->getQuoteId() != $customerQuote->getId()) {
if ($this->getQuoteId()) {
$customerQuote->merge($this->getQuote())
->collectTotals()
->save(); // <- either this
}
$this->setQuoteId($customerQuote->getId());
if ($this->_quote) {
$this->_quote->delete();
}
$this->_quote = $customerQuote;
} else {
$this->getQuote()->getBillingAddress();
$this->getQuote()->getShippingAddress();
$this->getQuote()->setCustomer(Mage::getSingleton('customer/session')->getCustomer())
->setTotalsCollectedFlag(false)
->collectTotals()
->save(); // <- or that does the save
}
if($customerQuote->getId()&&$this->getQuoteId()!=$customerQuote->getId()){
如果($this->getQuoteId()){
$customerQuote->merge($this->getQuote())
->总数()
->save();//setQuoteId($customerQuote->getId());
如果($this->\u报价){
$this->_quote->delete();
}
$this->_quote=$customerQuote;
}否则{
$this->getQuote()->getBillingAddress();
$this->getQuote()->getShippingAddress();
$this->getQuote()->setCustomer(Mage::getSingleton('customer/session')->getCustomer())
->setTotalsCollectedFlag(错误)
->总数()
->保存();//谢谢你帮我澄清。我正在处理Magento 1.5.1。我在会话模型中找到了你提到的代码。尝试调试代码时,我发现当用户登录时,如果sales\u flat\u quote
表中没有该用户的记录,就会创建一条新记录。这甚至在保存之前就发生了()方法。我通过在setStoreId(Mage::app()->getStore()->getId())->loadByCustomer(Mage::getSingleton('customer/session')->getCustomerId()之后放置一个骰子来确认这一点
,新记录被创建。我想我将使用单独的站点->门店设置。我们有大约10000名客户,所以我们的想法是在门店级别将购物车分开,同时在两个门店共享相同的客户数据。谢谢你试图帮助我Jurgen。@Nithin:我可能错了(从未有过共享客户的设置,但尚未分离购物车),但afaik每个网站都有自己独立的客户群,所以我担心Magento不会让你在两个网站上分享客户。至少默认情况下不会。我建议先测试一下,以确保它不会成为死胡同。我已经尝试了几天了。也许我会回到稍后再讨论,但现在我想我将使用单独的站点rout。无论如何,谢谢。
if ($customerQuote->getId() && $this->getQuoteId() != $customerQuote->getId()) {
if ($this->getQuoteId()) {
$customerQuote->merge($this->getQuote())
->collectTotals()
->save(); // <- either this
}
$this->setQuoteId($customerQuote->getId());
if ($this->_quote) {
$this->_quote->delete();
}
$this->_quote = $customerQuote;
} else {
$this->getQuote()->getBillingAddress();
$this->getQuote()->getShippingAddress();
$this->getQuote()->setCustomer(Mage::getSingleton('customer/session')->getCustomer())
->setTotalsCollectedFlag(false)
->collectTotals()
->save(); // <- or that does the save
}