Estou tentando configurar uma loja múltipla com carrinho compartilhado. No entanto, o login do usuário às vezes não funciona.
A Store Switcher
fina funciona, mas o frontend User Login
em 2º e 3º Store
exige que eu clique no Sign In
botão duas vezes para login.
Eu tenho várias lojas de configuração com estas configurações:
Vários Domínios (Hosts Virtuais)
Eu estou usando um Website
. O site terá três Stores
. Os nomes de domínio compartilharão um domínio base comum. As lojas adicionais usarão subdomínios .
Criei magento2.com como o domínio base padrão.
Criei store2.magento2.com como a segunda loja.
Criei store3.magento2.com como a 3ª loja.
Categorias de raiz e produtos de teste
Criei a categoria raiz Store2 e a categoria raiz Store3 . Também criei subcategorias em cada categoria raiz.
Adicionei um produto de teste a cada subcategoria.
Lojas e Vistas
NÃO alterei nada na loja principal do site e na exibição padrão da loja .
Criei a Store2 e a Store View 2 para a 2ª loja.
Criei Store3 e Store View 3 para a 3ª loja.
Para Store2 , eu defino Store2 como Name
e selecionei Store2 Root Category como Root Category
.
Para a Visualização da loja 2 , selecionei a Loja2 como Store
, usei a Visualização da loja 2 como Name
e entrei na loja2 como Store Code
.
Para o terceiro Store
, defino Store3 como Name
e selecione Store3 Root Category como Root Category
.
Para a Visualização da loja 3 , selecionei a Loja3 como Store
, usei a Visualização da loja 3 como Name
e entrei na loja3 como Store Code
.
Configuração de URL e Cookie
A Configuration
tela agora mostra 5 opções no Store View
menu suspenso:
Default Config
Main Website
Default Store View
- Vista da loja 2
- Vista da loja 3
Alterei as configurações de URL e cookie para Default Store View
, Visualização da loja 2 e Visualização da loja 3 .
NÃO alterei as configurações de URL ou cookie para Default Config
e Main Website
.
Pois Default Store View
mudei Cookie Path
.
Para o Store View 2 , eu mudei Base URL
e Cookie Path
.
Para o Store View 3 , eu mudei Base URL
e Cookie Path
.
Compartilhamento de conta
Para compartilhar contas de usuário e carrinho de compras entre várias lojas, mudei Share Customer Accounts
de "Por site" para Global em Default Config
.
.htaccess change
Eu adicionei essas linhas na parte superior do .htaccess
arquivo no diretório raiz do projeto.
#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
mudança index.php
Usando o Store Switcher
, às vezes é necessário clicar duas vezes para alternar de store2 / 3 para o padrão. Para corrigir isso, tive que redefinir o valor para $_COOKIE['store']
no 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);
Às vezes, o login do usuário exige clicar duas vezes
Com a configuração acima, o Store Switcher
está funcionando bem. As compras Cart
são compartilhadas entre todas as 3 lojas para usuários conectados e não conectados.
No entanto, na Store2 e Store3 , o front-end user login
às vezes redireciona de volta para a mesma página de logon. Se eu pressionar o Sign In
botão na página de login redirecionada (pela segunda vez para clicar neste botão), vamos fazer o login.
Existe alguma forma de corrigir esse problema?
Atualização: desativando Cache
Desativei o cache da linha de comando:
php bin/magento cache:disable
Com o cache desativado, user login
no Store2 e Store3 se tornou muito mais estável. Ele ainda foi redirecionado de volta para a página de login 1 em 10 tentativas, mas essa alteração fez com que o login funcionasse melhor.
No entanto, todo o site ficou lento !!!
Existe uma maneira de configurar corretamente o cache para que ele user login
funcione corretamente em uma Store
configuração múltipla ?