我正在尝试使用共享购物车设置一个多商店。但是,用户登录有时不起作用。
该Store Switcher
工作正常,但前端User Login
的第二和第三个Store
要求我按一下Sign In
按钮两次登录。
我通过以下设置设置了多个商店:
多域(虚拟主机)
我正在使用一个Website
。该站点将有三个Stores
。域名将共享一个公共基本域。其他商店将使用子域。
我创建了magento2.com作为默认基本域。
我创建了store2.magento2.com作为第二家商店。
我创建了store3.magento2.com作为第三家商店。
根类别和测试产品
我创建了Store2 Root Category和Store3 Root Category。我还在每个根目录类别下创建了子类别。
我在每个子类别中添加了一个测试产品。
商店和景观
我没有在“ 主要网站商店”和“ 默认商店视图”上进行任何更改。
我为第二家商店创建了Store2和Store View 2。
我为第三家商店创建了Store3和Store View 3。
对于Store2,我将Store2设置为,Name
并将Store2根目录类别选择为Root Category
。
对于Store View 2,我选择Store2为Store
,使用Store View 2为Name
,并输入store2为Store Code
。
对于3rd Store
,我将Store3设置为,Name
并将Store3根目录类别选择为Root Category
。
对于Store View 3,我选择Store3为Store
,使用Store View 3为Name
,并输入store3作为Store Code
。
URL和Cookie设置
在Configuration
现在屏幕显示下5个选项Store View
下拉菜单:
Default Config
Main Website
Default Store View
- 店铺检视2
- 店铺景观3
我更改了Default Store View
“ 商店视图2 ”和“ 商店视图3”的 URL和Cookie设置 。
我没有改变URL或Cookie设置为Default Config
和Main Website
。
因为Default Store View
,我改变了Cookie Path
。
对于商店查看2,我改变了Base URL
和Cookie Path
。
对于商店查看3,我改变了Base URL
和Cookie Path
。
账户共享
要在多个商店之间共享用户帐户和购物车,我Share Customer Accounts
从下的“每个网站” 更改为“ 全局 ” Default Config
。
.htaccess更改
我.htaccess
在项目根目录的文件顶部添加了这些行。
#Multi store setting
SetEnvIf Host magento2.com MAGE_RUN_CODE=default
SetEnvIf Host magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^magento2.com MAGE_RUN_CODE=default
SetEnvIf Host ^magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host store2.magento2.com MAGE_RUN_CODE=store2
SetEnvIf Host store2.magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^store2.magento2.com MAGE_RUN_CODE=store2
SetEnvIf Host ^store2.magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host store3.magento2.com MAGE_RUN_CODE=store3
SetEnvIf Host store3.magento2.com MAGE_RUN_TYPE=store
SetEnvIf Host ^store3.magento2.com MAGE_RUN_CODE=store3
SetEnvIf Host ^store3.magento2.com MAGE_RUN_TYPE=store
index.php更改
使用Store Switcher
有时需要单击两次以从store2 / 3切换到默认值。要解决此问题,我必须$_COOKIE['store']
在index.php处重置其值:
<?php
/**
* Application entry point
*
* Example - run a particular store or website:
* --------------------------------------------
* require __DIR__ . '/app/bootstrap.php';
* $params = $_SERVER;
* $params[\Magento\Store\Model\StoreManager::PARAM_RUN_CODE] = 'website2';
* $params[\Magento\Store\Model\StoreManager::PARAM_RUN_TYPE] = 'website';
* $bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $params);
* \/** @var \Magento\Framework\App\Http $app *\/
* $app = $bootstrap->createApplication('Magento\Framework\App\Http');
* $bootstrap->run($app);
* --------------------------------------------
*
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
try {
require __DIR__ . '/app/bootstrap.php';
} catch (\Exception $e) {
echo <<<HTML
<div style="font:12px/1.35em arial, helvetica, sans-serif;">
<div style="margin:0 0 25px 0; border-bottom:1px solid #ccc;">
<h3 style="margin:0;font-size:1.7em;font-weight:normal;text-transform:none;text-align:left;color:#2f2f2f;">
Autoload error</h3>
</div>
<p>{$e->getMessage()}</p>
</div>
HTML;
exit(1);
}
// Fix store switcher bug on switching to the default store
if ( isset($_SERVER['MAGE_RUN_TYPE']) == 'store' && isset($_SERVER['MAGE_RUN_CODE']) ) {
if ( !empty($_SERVER['MAGE_RUN_CODE']) ) {
$_COOKIE['store'] = $_SERVER['MAGE_RUN_CODE'];
}
}
$bootstrap = \Magento\Framework\App\Bootstrap::create(BP, $_SERVER);
/** @var \Magento\Framework\App\Http $app */
$app = $bootstrap->createApplication('Magento\Framework\App\Http');
$bootstrap->run($app);
用户登录有时需要单击两次
通过上述设置,Store Switcher
可以正常工作。购物Cart
在所有3个商店中共享给已登录和未登录用户。
但是,在Store2和Store3上,前端user login
有时会重定向回同一登录页面。如果按Sign In
重定向登录页面上的按钮(第二次单击此按钮),就让我登录。
有没有办法解决这个问题?
更新:禁用 Cache
我从命令行禁用了缓存:
php bin/magento cache:disable
随着禁用缓存,user login
在商店2和Store3变得更加稳定。在10次尝试中,它仍然重定向回登录页面1,但是此更改使登录工作更好。
但是,整个站点变慢了!!!
有没有一种方法可以正确配置缓存以使其在user login
多重Store
设置中正确执行?