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?
źródło
Odpowiedzi:
Udało nam się zmienić przełącznik sklepu i zalogować się nieco bardziej stabilnie dzięki nowej konfiguracji.
Dodaj kod sklepu do adresów URL
Największą zmianą było ustawienie
Add Store Code to Urls
„Tak”.Sklepy =>
Konfiguracja w sekcji Ustawienia =>
wybierz
Default Config
=>Sieć w sekcji OGÓLNE =>
Opcje adresu URL =>
zmień opcję
Add Store Code to Urls
na „Tak”Usuń domenę plików cookie
Następnie usunęliśmy
Cookie Domain
wartość ze Store2 i Store3 ze strony konfiguracji.Sklepy =>
Konfiguracja w sekcji Ustawienia =>
wybierz Store2 lub Store3 =>
Sieć w sekcji OGÓLNE =>
Domyślne ustawienia plików cookie =>
usuń wartość
Cookie Domain
i pozostaw ją pustąUsuń niestandardowe kody z
.htaccess
iindex.php
Następnie usunęliśmy niestandardowe wiersze kodu
.htaccess
iindex.php
.Dzięki nowej konfiguracji dostosowanie tych plików nie było już potrzebne. To świetny, czystszy kod.
Po tych zmianach przełącznik sklepu, wspólny koszyk i logowanie użytkownika stały się znacznie bardziej stabilne. Po wprowadzeniu tych zmian wyczyść pamięć podręczną.
Ulepszenie rdzenia Magento2 i jego wpływ na
.htaccess
iindex.php
Przed wprowadzeniem zmian w konfiguracji i plikach zaktualizowaliśmy rdzeń Magento2 z 2.1.0 do 2.1.3 za pomocą
composer
. (Odniesienie: Aktualizacja Magento 2.1.2 dla 2.1.3 )Nie jesteśmy pewni, czy będzie to wymagana część tej konfiguracji wielu sklepów, ale przeprowadziliśmy ją, mając nadzieję, że witryna będzie bardziej stabilna dzięki najnowszym aktualizacjom z wersji 2.1.3
Zmodyfikowaliśmy 3 pliki, które były częścią plików rdzenia i modułów (pliki te są ignorowane przez naszą kontrolę wersji Git):
Kiedy zaktualizowaliśmy Magento2, pliki te są resetowane do stanu początkowego 2.1.3. NIE musieliśmy ręcznie czyścić naszych plików
.htaccess
iindex.php
plików. Zawartość pliku została automatycznie zresetowana przez aktualizację. To był pozytywny efekt uboczny.Ale był też zły efekt uboczny. Nasz niestandardowy kod w pliku konfiguracyjnym Grunt został zresetowany i usunięty przez aktualizację podstawową. Musieliśmy ręcznie przywrócić niestandardowe linie kodu w tym pliku.
Zalecam wykonanie kopii zapasowych plików i DB przed wykonaniem tej podstawowej aktualizacji i zmian w konfiguracji / pliku.
Pomaganie w minimalizacji Javascript może pomóc
Zmniejszenie JS sprawiło, że cała witryna jest bardziej stabilna na naszej stronie.
Sklepy =>
Konfiguracja w sekcji Ustawienia =>
wybierz
Default Config
=>Deweloper w sekcji ZAAWANSOWANE =>
Ustawienia JavaScript =>
ustaw
Merge JavaScript Files
na „Tak” =>ustaw
Enable JavaScript Bundling
na „Tak” =>ustaw
Minify JavaScript Files
na „Tak” =>następnie wyczyść pamięć podręczną
źródło