Estoy tratando de configurar una tienda múltiple con carrito compartido. Sin embargo, el inicio de sesión del usuario a veces no funciona.
La Store Switcher
obras excelentes, pero la interfaz User Login
días 2 y 3 Store
me obliga a hacer clic en el Sign In
botón dos veces para inicio de sesión.
He configurado varias tiendas con estas configuraciones:
Multi Dominio (Hosts Virtuales)
Estoy usando uno Website
. El sitio tendrá tres Stores
. Los nombres de dominio compartirán un dominio base común. Las tiendas adicionales usarán subdominios .
He creado magento2.com como el dominio de base por defecto.
He creado store2.magento2.com como la segunda tienda.
He creado store3.magento2.com como la tercera tienda.
Categorías de raíz y productos de prueba
He creado store2 Raíz de la categoría y Store3 Raíz de la categoría . También creé subcategorías en cada categoría raíz.
Agregué un producto de prueba a cada subcategoría.
Tiendas y vistas
NO cambié nada en la Tienda del sitio web principal y en la Vista de tienda predeterminada .
He creado store2 y tienda Ver 2 para la segunda tienda.
He creado Store3 y tienda Ver 3 para la tercera tienda.
Para Store2 , configuré Store2 como Name
y seleccioné Store2 Root Category como Root Category
.
Para Store View 2 , seleccioné Store2 como Store
, utilicé Store View 2 como Name
, e ingresé store2 como Store Code
.
Para el tercero Store
, configuré Store3 como Name
y seleccioné Store3 Root Category como Root Category
.
Para Store View 3 , seleccioné Store3 como Store
, utilicé Store View 3 como Name
, e ingresé store3 como Store Code
.
Configuración de URL y cookies
La Configuration
pantalla ahora muestra 5 opciones en el Store View
menú desplegable:
Default Config
Main Website
Default Store View
- Vista de tienda 2
- Vista de tienda 3
He cambiado la configuración de URL y de la galleta por Default Store View
, tienda Vista 2 , y tienda Ver 3 .
NO cambié la configuración de URL o Cookie para Default Config
y Main Website
.
Porque Default Store View
yo cambié Cookie Path
.
Para Store View 2 , cambié Base URL
y Cookie Path
.
Para Store View 3 , cambié Base URL
y Cookie Path
.
Compartir cuenta
Para compartir cuentas de usuario y carrito de compras entre varias tiendas, cambié Share Customer Accounts
de "Por sitio web" a Global en Default Config
.
.htaccess change
Agregué estas líneas en la parte superior del .htaccess
archivo en el directorio raíz del proyecto.
#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
cambio index.php
Usando Store Switcher
, a veces se requiere hacer clic dos veces para cambiar de store2 / 3 al predeterminado Para solucionar esto, tuve que restablecer el valor $_COOKIE['store']
en 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);
El inicio de sesión del usuario a veces requiere hacer clic dos veces
Con la configuración anterior, Store Switcher
funciona correctamente. Las compras Cart
se comparten entre las 3 tiendas tanto para los usuarios que han iniciado sesión como para los que no lo han hecho.
Sin embargo, en Store2 y Store3 , la interfaz a user login
veces redirige a la misma página de inicio de sesión. Si presiono el Sign In
botón en la página de inicio de sesión redirigida (segunda vez que hago clic en este botón), me permite iniciar sesión.
¿Hay alguna forma de solucionar este problema?
Actualización: deshabilitar Cache
Deshabilité el almacenamiento en caché desde la línea de comandos:
php bin/magento cache:disable
Con el caché deshabilitado, user login
en Store2 y Store3 se volvió mucho más estable. Todavía redirigió a la página de inicio de sesión 1 de cada 10 intentos, pero este cambio hizo que el inicio de sesión funcionara mejor.
¡Sin embargo, todo el sitio se volvió lento!
¿Hay alguna manera de configurar correctamente el caché para que user login
funcione correctamente en una Store
configuración múltiple ?
fuente
Respuestas:
Logramos hacer que el conmutador de la tienda y el inicio de sesión sean un poco más estables con la nueva configuración.
Agregar código de tienda a las URL
El mayor cambio fue establecer
Add Store Code to Urls
"Sí".Tiendas =>
Configuración en la sección Configuración =>
seleccione
Default Config
=>Web en la sección GENERAL =>
Opciones de URL =>
cambie
Add Store Code to Urls
a "Sí"Eliminar el dominio de cookies
Luego, eliminamos el
Cookie Domain
valor de Store2 y Store3 de la página de Configuración.Tiendas =>
Configuración en la sección Configuración =>
seleccione Tienda2 o Tienda3 =>
Web en la sección GENERAL =>
Configuración predeterminada de cookies =>
elimine el valor
Cookie Domain
y déjelo en blancoEliminar códigos personalizados de
.htaccess
yindex.php
Luego, eliminamos las líneas de código personalizadas
.htaccess
yindex.php
.Con la nueva configuración, la personalización de estos archivos ya no era necesaria. Este es un código genial y más limpio.
Después de estos cambios, el conmutador de la tienda, el carrito de compras compartido y el inicio de sesión del usuario se volvieron mucho más estables. Asegúrese de borrar el caché después de realizar estos cambios.
Actualización principal de Magento2 y su efecto en
.htaccess
yindex.php
Antes de realizar cambios en la configuración y el archivo, actualizamos el núcleo Magento2 de 2.1.0 a 2.1.3 usando
composer
. (Referencia: Actualización de Magento 2.1.2 para 2.1.3 )No estamos seguros de que esto sea una parte necesaria para esta configuración de varias tiendas, pero lo realizamos con la esperanza de que el sitio sea más estable con las últimas actualizaciones de 2.1.3
Modificamos 3 archivos que formaban parte de los archivos principales y de módulo (nuestro control de versiones de Git ignora estos archivos):
Cuando actualizamos Magento2, estos archivos se restablecen al estado inicial de 2.1.3. No tuvimos que limpiar manualmente nuestros
.htaccess
yindex.php
archivos. La actualización restableció automáticamente el contenido del archivo. Este fue un efecto secundario positivo.Pero también hubo un efecto secundario negativo. Nuestro código personalizado en el archivo de configuración de Grunt fue restablecido y borrado por la actualización central. Tuvimos que restaurar manualmente nuestras líneas de código personalizadas en este archivo.
Recomiendo tomar copias de seguridad de archivos y bases de datos antes de hacer esta actualización principal y los cambios de configuración / archivo.
Reducir Javascript podría ayudar
La reducción de JS hizo que todo el sitio fuera más estable en nuestro sitio.
Tiendas =>
Configuración en la sección Configuración =>
seleccionar
Default Config
=>Desarrollador en la sección AVANZADA =>
Configuración de JavaScript =>
establecer
Merge JavaScript Files
en "Sí" =>establecer
Enable JavaScript Bundling
en "Sí" =>establecer
Minify JavaScript Files
en "Sí" =>luego, borrar caché
fuente