Próbuję skonfigurować sklep wielobranżowy ze wspólnym koszykiem. Jednak logowanie użytkownika czasami nie działa.
Store Switcher
Działa dobrze, ale nakładka User Login
na 2 i 3 Store
wymaga ode mnie kliknij Sign In
przycisk dwa razy się zalogować.
Mam skonfigurowane wiele sklepów z tymi konfiguracjami:
Multi Domain (Virtual Hosts)
Używam jednego Website
. Witryna będzie miała trzy Stores
. Nazwy domen będą miały wspólną wspólną domenę podstawową. Dodatkowe sklepy będą używać subdomen .
Stworzyłem magento2.com jako domyślną domenę podstawową.
Stworzyłem store2.magento2.com jako drugi sklep.
Stworzyłem store3.magento2.com jako trzeci sklep.
Kategorie główne i produkty testowe
Utworzyłem kategorię główną Store2 i kategorię główną Store3 . Utworzyłem również podkategorie w ramach każdej kategorii głównej.
Dodałem jeden produkt testowy do każdej podkategorii.
Sklepy i widoki
NIE zmieniłem niczego w głównym sklepie internetowym i domyślnym widoku sklepu .
Utworzyłem Store2 i Store View 2 dla drugiego sklepu.
Stworzyłem Store3 i Store View 3 dla trzeciego sklepu.
W przypadku Store2 ustawiłem Store2 jako Name
i wybrałem kategorię katalogu głównego Store2 jako Root Category
.
Dla Store View 2 wybrałem Store2 as Store
, użyłem Store View 2 as Name
i wprowadziłem store2 as Store Code
.
Dla 3. Store
ustawiłem Store3 jako Name
i wybrałem kategorię katalogu głównego Store3 jako Root Category
.
Dla Store View 3 wybrałem Store3 as Store
, użyłem Store View 3 as Name
i wprowadziłem store3 as Store Code
.
Ustawienie adresu URL i plików cookie
Configuration
Teraz ekran pokazuje 5 wyborów pod Store View
rozwijaną:
Default Config
Main Website
Default Store View
- Widok sklepu 2
- Widok sklepu 3
Zmieniłem adres URL i ustawienia plików cookie dla Default Store View
, Widok sklepu 2 i Widok sklepu 3 .
NIE zmieniłem ustawień adresu URL ani plików cookie dla Default Config
i Main Website
.
Bo się Default Store View
zmieniłem Cookie Path
.
W przypadku widoku sklepu 2 zmieniłem Base URL
i Cookie Path
.
W widoku sklepu 3 zmieniłem Base URL
i Cookie Path
.
Udostępnianie konta
Aby udostępnić konta użytkowników i koszyk zakupów w wielu sklepach, zmieniłem Share Customer Accounts
opcję „Na stronę internetową” na Globalną pod Default Config
.
.htac zmiana
Dodałem te linie na górze .htaccess
pliku w katalogu głównym projektu.
#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
zmiana index.php
Za pomocą Store Switcher
, czasami wymagane dwukrotne kliknięcie, aby przełączyć z store2 / 3 do domyślnego. Aby to naprawić, musiałem zresetować wartość dla $_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);
Logowanie użytkownika czasami wymaga dwukrotnego kliknięcia
Przy powyższej konfiguracji Store Switcher
działa dobrze. Zakupy Cart
są wspólne dla wszystkich 3 sklepów zarówno dla zalogowanych, jak i niezalogowanych użytkowników.
Jednak w Store2 i Store3 frontend user login
czasami przekierowuje z powrotem na tę samą stronę logowania. Jeśli naciśniesz Sign In
przycisk na przekierowanej stronie logowania (drugi raz, aby kliknąć ten przycisk), pozwolę się zalogować.
Czy istnieje sposób na rozwiązanie tego problemu?
Aktualizacja: wyłączanie Cache
Wyłączyłem buforowanie z wiersza poleceń:
php bin/magento cache:disable
Z wyłączoną pamięcią podręczną, user login
na Store2 i Store3 stały się znacznie bardziej stabilne. Nadal przekierowano z powrotem na stronę logowania 1 na 10 prób, ale ta zmiana sprawiła, że logowanie działało lepiej.
Jednak cała strona zwolniła !!!
Czy istnieje sposób, aby poprawnie skonfigurować pamięć podręczną, aby user login
poprawnie działała na wielu Store
konfiguracjach?