J'essaie de configurer un magasin multiple avec un panier partagé. Cependant, la connexion utilisateur ne fonctionne parfois pas.
Cela Store Switcher
fonctionne bien, mais le frontend des User Login
2 et 3 Store
me demande de cliquer Sign In
deux fois sur le bouton pour me connecter.
J'ai configuré plusieurs magasins avec ces configurations:
Multi domaine (hôtes virtuels)
J'en utilise un Website
. Le site en aura trois Stores
. Les noms de domaine partageront un domaine de base commun. Les magasins supplémentaires utiliseront des sous-domaines .
J'ai créé magento2.com comme domaine de base par défaut.
J'ai créé store2.magento2.com en tant que 2e magasin.
J'ai créé store3.magento2.com en tant que 3e magasin.
Catégories racine et produits de test
J'ai créé la catégorie racine Store2 et la catégorie racine Store3 . J'ai également créé des sous-catégories sous chaque catégorie racine.
J'ai ajouté un produit de test à chaque sous-catégorie.
Magasins et vues
Je n'ai rien changé sur la boutique principale du site Web et la vue par défaut de la boutique .
J'ai créé Store2 et Store View 2 pour le 2ème magasin.
J'ai créé Store3 et Store View 3 pour le 3e magasin.
Pour Store2 , j'ai défini Store2 comme Name
et sélectionné la catégorie racine Store2 comme Root Category
.
Pour Store View 2 , j'ai sélectionné Store2 as Store
, utilisé Store View 2 as Name
et entré store2 as Store Code
.
Pour le 3ème Store
, j'ai défini Store3 comme Name
et sélectionné la catégorie racine Store3 comme Root Category
.
Pour Store View 3 , j'ai sélectionné Store3 as Store
, utilisé Store View 3 as Name
et entré store3 as Store Code
.
Paramètre URL et cookie
L' Configuration
écran affiche maintenant 5 choix sous le Store View
menu déroulant:
Default Config
Main Website
Default Store View
- Vue du magasin 2
- Vue du magasin 3
J'ai modifié les paramètres d'URL et de cookies pour Default Store View
, Store View 2 et Store View 3 .
Je n'ai PAS modifié les paramètres d'URL ou de cookie pour Default Config
et Main Website
.
Car Default Store View
, j'ai changé Cookie Path
.
Pour Store View 2 , j'ai changé Base URL
et Cookie Path
.
Pour Store View 3 , j'ai changé Base URL
et Cookie Path
.
Partage de compte
Pour partager les comptes d'utilisateurs et le panier entre plusieurs magasins, je suis passé Share Customer Accounts
de "Par site Web" à Global sous Default Config
.
changement de .htaccess
J'ai ajouté ces lignes en haut du .htaccess
fichier dans le répertoire racine du projet.
#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
changement index.php
En utilisant le Store Switcher
, parfois nécessaire de cliquer deux fois pour passer de store2 / 3 à la valeur par défaut. Pour résoudre ce problème, j'ai dû réinitialiser la valeur de $_COOKIE['store']
l'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);
La connexion de l'utilisateur nécessite parfois de cliquer deux fois
Avec la configuration ci-dessus, le Store Switcher
fonctionne correctement. Les achats Cart
sont partagés entre les 3 magasins pour les utilisateurs connectés et non connectés.
Cependant, sur Store2 et Store3 , le frontend user login
redirige parfois vers la même page de connexion. Si j'appuie sur le Sign In
bouton de la page de connexion redirigée (2e fois pour cliquer sur ce bouton), cela me permet de me connecter.
Existe-t-il un moyen de résoudre ce problème?
Mise à jour: désactivation Cache
J'ai désactivé la mise en cache depuis la ligne de commande:
php bin/magento cache:disable
Avec le cache désactivé, le user login
sur Store2 et Store3 est devenu beaucoup plus stable. Il a toujours redirigé vers la page de connexion 1 tentative sur 10, mais cette modification a rendu la connexion plus efficace.
Cependant, l'ensemble du site est devenu lent !!!
Existe-t-il un moyen de configurer correctement le cache pour user login
qu'il fonctionne correctement sur une Store
configuration multiple ?
la source
Réponses:
Nous avons réussi à rendre le commutateur de magasin et à nous connecter un peu plus stable avec la nouvelle configuration.
Ajouter le code du magasin aux URL
Le plus grand changement était de mettre
Add Store Code to Urls
"Oui".Magasins =>
Configuration dans la section Paramètres =>
sélectionnez
Default Config
=>Web dans la section GÉNÉRAL =>
Options d'url =>
changez
Add Store Code to Urls
en "Oui"Supprimer le domaine des cookies
Ensuite, nous avons supprimé la
Cookie Domain
valeur de Store2 et Store3 de la page de configuration.Magasins =>
Configuration dans la section Paramètres =>
sélectionnez Store2 ou Store3 =>
Section Web dans GENERAL =>
Paramètres de cookies par défaut =>
supprimez la valeur
Cookie Domain
et laissez-la videSupprimer les codes personnalisés de
.htaccess
etindex.php
Ensuite, nous avons supprimé le formulaire de lignes de code personnalisées
.htaccess
etindex.php
.Avec la nouvelle configuration, la personnalisation de ces fichiers n'était plus nécessaire. C'est un code génial et plus propre.
Après ces modifications, le commutateur de magasin, le panier d'achat partagé et la connexion utilisateur sont devenus beaucoup plus stables. Assurez-vous de vider le cache après avoir apporté ces modifications.
Mise à niveau du noyau Magento2 et son effet sur
.htaccess
etindex.php
Avant d'effectuer des modifications de configuration et de fichier, nous avons mis à niveau le noyau Magento2 de 2.1.0 à 2.1.3 à l'aide de
composer
. (Référence: mise à jour de Magento 2.1.2 pour 2.1.3 )Nous ne sommes pas sûrs que ce sera une partie requise pour cette configuration multi-magasins, mais nous l'avons effectuée en espérant que le site sera plus stable avec les dernières mises à jour de 2.1.3
Nous avons modifié 3 fichiers qui faisaient partie des fichiers core et module (ces fichiers sont ignorés par notre contrôle de version Git):
Lorsque nous avons mis à niveau Magento2, ces fichiers sont réinitialisés à l'état initial de 2.1.3. Nous n'avons PAS eu à nettoyer manuellement nos fichiers
.htaccess
etindex.php
. Le contenu du fichier a été automatiquement réinitialisé par la mise à niveau. C'était un effet secondaire positif.Mais il y avait aussi un mauvais effet secondaire. Notre code personnalisé dans le fichier de configuration Grunt a été réinitialisé et effacé par la mise à niveau principale. Nous avons dû restaurer manuellement nos lignes de code personnalisées sur ce fichier.
Je recommande d'effectuer des sauvegardes de fichiers et de bases de données avant d'effectuer cette mise à niveau principale et les modifications de configuration / fichier.
Réduire Javascript pourrait aider
La réduction de JS a rendu l'ensemble du site plus stable sur notre site.
Magasins =>
Configuration dans la section Paramètres =>
sélectionnez
Default Config
=>Développeur dans la section AVANCÉ =>
Paramètres JavaScript =>
défini
Merge JavaScript Files
sur "Oui" =>défini
Enable JavaScript Bundling
sur "Oui" =>défini
Minify JavaScript Files
sur "Oui" =>puis, videz le cache
la source