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 ?
fonte
Respostas:
Conseguimos tornar o alternador de lojas e o login um pouco mais estáveis com a nova configuração.
Adicionar código de loja aos URLs
A maior mudança foi definir
Add Store Code to Urls
"Sim".Lojas =>
Configuração na seção Configurações =>
selecione
Default Config
=>Web na seção GERAL =>
Opções de URL =>
altere
Add Store Code to Urls
para "Sim"Remover domínio de cookie
Em seguida, removemos o
Cookie Domain
valor do Store2 e Store3 da página Configuração.Lojas =>
Configuração na seção Configurações =>
selecione Loja2 ou Loja3 =>
Web na seção GERAL =>
Configurações Padrão de Cookies =>
remova o valor
Cookie Domain
e deixe em brancoRemova os códigos personalizados de
.htaccess
eindex.php
Em seguida, removemos as linhas de código personalizadas do formulário
.htaccess
eindex.php
.Com a nova configuração, a personalização desses arquivos não era mais necessária. Isso é ótimo, código mais limpo.
Após essas alterações, o alternador da loja, o carrinho de compras compartilhado e o login do usuário tornaram-se muito mais estáveis. Certifique-se de limpar o cache depois de fazer essas alterações.
Atualização do núcleo Magento2 e seus efeitos sobre
.htaccess
eindex.php
Antes de fazer alterações na configuração e no arquivo, atualizamos o núcleo do Magento2 de 2.1.0 para 2.1.3 usando
composer
. (Referência: Update Magento 2.1.2 for 2.1.3 )Não temos certeza de que essa será uma parte necessária para essa configuração de várias lojas, mas a executamos esperando que o site seja mais estável com as atualizações mais recentes da 2.1.3
Foram modificados três arquivos, que faziam parte dos arquivos principais e do módulo (esses arquivos são ignorados pelo nosso controle de versão do Git):
Quando atualizamos o Magento2, esses arquivos são redefinidos para o estado inicial de 2.1.3. NÃO tivemos que limpar manualmente nossos arquivos
.htaccess
eindex.php
. O conteúdo do arquivo foi redefinido automaticamente pela atualização. Este foi um efeito colateral positivo.Mas também houve um efeito colateral ruim. Nosso código personalizado no arquivo de configuração do Grunt foi redefinido e apagado pela atualização principal. Tivemos que restaurar manualmente nossas linhas de código personalizadas nesse arquivo.
Eu recomendo fazer backups de arquivos e banco de dados antes de fazer essa atualização principal e alterações de configuração / arquivo.
Minimizar o Javascript pode ajudar
A redução da JS tornou o site inteiro mais estável em nosso site.
Lojas =>
Configuração na seção Configurações =>
selecione
Default Config
=>Desenvolvedor na seção AVANÇADO =>
Configurações de JavaScript =>
defina
Merge JavaScript Files
como "Sim" =>defina
Enable JavaScript Bundling
como "Sim" =>defina
Minify JavaScript Files
como "Sim" => defina como "Sim" =>depois limpe o cache
fonte