Я пытаюсь настроить мульти магазин с общей корзиной. Однако логин пользователя иногда не работает.
Store Switcher
Работает отлично, но внешний интерфейс User Login
на втором и 3 Store
требует от меня , чтобы нажать на Sign In
кнопку дважды для входа.
Я настроил несколько магазинов с этими настройками:
Multi Domain (виртуальные хосты)
Я использую один Website
. На сайте будет три Stores
. Доменные имена будут иметь один общий базовый домен. Дополнительные магазины будут использовать субдомены .
Я создал magento2.com в качестве базового домена по умолчанию.
Я создал store2.magento2.com как второй магазин.
Я создал store3.magento2.com как третий магазин.
Корневые категории и тестовые продукты
Я создал корневую категорию Store2 и корневую категорию Store3 . Я также создал подкатегории в каждой корневой категории.
Я добавил один тестовый продукт в каждую подкатегорию.
Магазины и Виды
Я ничего не изменил на главном сайте магазине и по умолчанию магазина View .
Я создал Store2 и Store View 2 для второго магазина.
Я создал Store3 и Store View 3 для третьего магазина.
Для Store2 я установил Store2 как Name
и выбрал Store2 Root Category как Root Category
.
Для Store View 2 я выбрал Store2 как Store
, использовал Store View 2 как Name
и ввел store2 как Store Code
.
Для третьего Store
я установил Store3 как Name
и выбрал Store3 Root Category как Root Category
.
Для Store View 3 я выбрал Store3 как Store
, использовал Store View 3 как Name
и ввел store3 as Store Code
.
Настройка URL и cookie
Configuration
Экран теперь показывает 5 вариантов под Store View
раскрывающимся:
Default Config
Main Website
Default Store View
- Store View 2
- Store View 3
Я изменил настройки URL и Cookie для Default Store View
, Store View 2 и Store View 3 .
Я НЕ изменил настройки URL или cookie для Default Config
и Main Website
.
Для Default Store View
, я изменился Cookie Path
.
Для Store View 2 я изменил Base URL
и Cookie Path
.
Для Store View 3 я изменил Base URL
и Cookie Path
.
Совместное использование аккаунта
Для учетных записей пользователей акций и покупок корзины среди множества магазинов, я изменился Share Customer Accounts
от «Per Сайта» в Global под Default Config
.
.htaccess изменить
Я добавил эти строки вверху .htaccess
файла в корневом каталоге проекта.
#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
изменение index.php
Использование Store Switcher
, иногда требуется дважды щелкнуть, чтобы переключиться с store2 / 3 на значение по умолчанию. Чтобы это исправить, мне пришлось сбросить значение $_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);
Для входа в систему иногда требуется дважды щелкнуть
С вышеупомянутой настройкой, Store Switcher
работает нормально. Покупки Cart
распределяются между всеми 3 магазинами как для вошедших, так и не вошедших в систему пользователей.
Однако в Store2 и Store3 интерфейс user login
иногда перенаправляет обратно на одну и ту же страницу входа. Если я Sign In
нажимаю кнопку на перенаправленной странице входа в систему (второй раз, чтобы нажать эту кнопку), она позволяет мне войти.
Есть ли способ решить эту проблему?
Обновление: отключение Cache
Я отключил кеширование из командной строки:
php bin/magento cache:disable
С кэшем отключен, user login
на store2 и Store3 стал гораздо более стабильным. Он все еще перенаправлялся обратно на страницу входа 1 из 10 попыток, но это изменение сделало вход в систему работать лучше.
Однако весь сайт стал медленным !!!
Есть ли способ правильно настроить кэш, чтобы заставить user login
работать правильно на множественной Store
установке?
источник
Ответы:
Нам удалось сделать коммутатор магазина и войти немного более стабильным с новой конфигурацией.
Добавить код магазина в URL
Самым большим изменением была установка
Add Store Code to Urls
на «Да».Магазины =>
Конфигурация в разделе Настройки =>
выберите
Default Config
=>Веб в разделе ОБЩИЕ = =
Параметры URL =>
измените на
Add Store Code to Urls
«Да»Удалить домен cookie
Затем мы удалили
Cookie Domain
значение из Store2 и Store3 со страницы конфигурации.Магазины =>
Конфигурация в разделе «Настройки» =>
выберите « Store2» или « Store3» => «
Интернет» в разделе «ОБЩИЕ» =>
Настройки cookie по умолчанию =>
удалите значение
Cookie Domain
и оставьте его пустымУдалить пользовательские коды из
.htaccess
иindex.php
Затем мы удалили пользовательские строки кода формы
.htaccess
иindex.php
.С новой конфигурацией настройка этих файлов больше не нужна. Это отличный, более чистый код.
После этих изменений переключатель магазина, общая корзина покупок и вход пользователя стали намного стабильнее. Обязательно очистите кеш после внесения этих изменений.
Обновление ядра Magento2 и его влияние на
.htaccess
иindex.php
Перед внесением изменений в конфигурацию и файл мы обновили ядро Magento2 с 2.1.0 до 2.1.3, используя
composer
. (Ссылка: обновить Magento 2.1.2 для 2.1.3 )Мы не уверены, что это будет обязательной частью этой конфигурации нескольких магазинов, но мы выполнили ее, надеясь, что сайт будет более стабильным с последними обновлениями из 2.1.3.
У нас было изменено 3 файла, которые были частью файлов ядра и модуля (эти файлы игнорируются нашим контролем версий Git):
Когда мы обновили Magento2, эти файлы были сброшены до исходного состояния 2.1.3. Мы не должны были вручную чистить наши
.htaccess
иindex.php
файлы. Содержимое файла автоматически сбрасывалось при обновлении. Это был положительный побочный эффект.Но был и плохой побочный эффект. Наш пользовательский код в файле конфигурации Grunt был сброшен и удален при обновлении ядра. Мы должны были вручную восстановить наши пользовательские строки кода в этом файле.
Я рекомендую сделать резервные копии файлов и БД перед обновлением ядра и изменениями конфигурации и файлов.
Сокращение Javascript может помочь
Сокращение JS сделало весь сайт более стабильным на нашем сайте.
Магазины =>
Конфигурация в разделе настроек =>
выбрать
Default Config
=>Разработчик в разделе ADVANCED =>
Настройки JavaScript =>
установить
Merge JavaScript Files
в «Да» =>установить
Enable JavaScript Bundling
в «Да» =>установить
Minify JavaScript Files
в «Да» =>затем очистить кеш
источник