Magento 2:ユーザーストアでは、マルチストアセットアップで2回ログインする必要がある場合があります


9

共有カートでマルチストアをセットアップしようとしています。ただし、ユーザーログインが機能しない場合があります。

Store Switcher罰金を動作しますが、フロントエンドのUser Login2番目と3番目には、Storeクリックして私を必要とSign Inログインにボタンを2回。

私はこれらのセットアップでマルチストアをセットアップしました:

マルチドメイン(仮想ホスト)

使用していWebsiteます。サイトには3つありStoresます。ドメイン名は、1つの共通の基本ドメインを共有します。追加のストアはサブドメインを使用します。

デフォルトのベースドメインとしてmagento2.comを作成しました。

2番目のストアとしてstore2.magento2.comを作成しました。

3番目のストアとしてstore3.magento2.comを作成しました。

ここに画像の説明を入力してください


ルートカテゴリとテスト製品

Store2ルートカテゴリStore3ルートカテゴリを作成しました。また、各ルートカテゴリの下にサブカテゴリを作成しました。

ここに画像の説明を入力してください

各サブカテゴリに1つのテスト製品を追加しました。

ここに画像の説明を入力してください


ストアとビュー

メインWebサイトストアデフォルトストアビューでは何も変更していません。

2番目のストア用にStore2Store View 2を作成しました。

3番目のストア用にStore3Store View 3を作成しました。

ここに画像の説明を入力してください


Store2については、Store2をとして設定しNameStore2ルートカテゴリをとして選択しましたRoot Category

ここに画像の説明を入力してください


以下のためにストアビュー2、私が選択したStore2をとしてStore使用し、ストアビュー2としてName、入力されたstore2を通りStore Code

ここに画像の説明を入力してください


3番目にStoreStore3をとして設定しNameStore3ルートカテゴリをとして選択しましたRoot Category

ここに画像の説明を入力してください


Store View 3については、Store3 as を選択しStoreStore View 3 asを使用してNamestore3 as と入力しましStore Code

ここに画像の説明を入力してください


URLとCookieの設定

Configuration画面が下の5つの選択肢を示しStore View、ドロップダウン:

  1. Default Config
  2. Main Website
  3. Default Store View
  4. ストアビュー2
  5. ストアビュー3

ここに画像の説明を入力してください

Default Store Viewストアビュー2ストアビュー3の URLとCookieの設定を変更しました 。

Default ConfigおよびのURLまたはCookie設定を変更しませんでしたMain Website


のためにDefault Store View、私は変更しましたCookie Path

ここに画像の説明を入力してください


ストアビュー2については、を変更Base URLしましたCookie Path

ここに画像の説明を入力してください

ここに画像の説明を入力してください


ストアビュー3について、私は変更Base URLしましたCookie Path

ここに画像の説明を入力してください

ここに画像の説明を入力してください


アカウント共有

共有ユーザーアカウントと複数の店舗間でのショッピングカートに、私は変更Share Customer Accountsに「パーウェブサイト」からグローバルの下で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からデフォルトに切り替えるために2回クリックする必要がある場合があります。これを修正するに$_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);


ユーザーログインで2回クリックする必要がある場合がある

上記の設定で、Store Switcherは正常に動作しています。ショッピングCartは、ログインしているユーザーとログインしていないユーザーの両方の3つのストアすべてで共有されます。

ここに画像の説明を入力してください

ただし、Store2およびStore3では、フロントエンドuser loginが同じログインページにリダイレクトする場合があります。Sign Inリダイレクトされたログインページのボタンを押すと(このボタンを2回目にクリックすると)、ログインできます。

この問題を修正する方法はありますか?


更新:無効化 Cache

コマンドラインからキャッシュを無効にしました:

php bin/magento cache:disable

無効なキャッシュを使用すると、user login上のStore2Store3は、はるかに安定しました。それでも、10回の試行のうち1回はログインページにリダイレクトされましたが、この変更によりログインがよりうまく機能するようになりました。

しかし、サイト全体が遅くなりました!!!

user loginマルチStoreセットアップで正しく実行するようにキャッシュを適切に構成する方法はありますか?


こんにちはあなたは問題を修正することができましたか?私のサイトでも同じ問題が発生しています。ログインの詳細は、単一のWebサイトの下にあるストア間で共有されません。あなたはあなたのソリューションを共有してくださいすることができます
Zammuuz

回答:


0

新しい設定により、ストアスイッチャーとログインを少し安定させることができました。

店舗コードをURLに追加

最大の変更はAdd Store Code to Urls、「はい」に設定することでした。

ストア=>
設定セクションの設定=>
選択Default Config=>
一般セクションのWeb =>
URLオプション=> 「はい」に
  変更Add Store Code to Urls

ここに画像の説明を入力してください

 

Cookieドメインを削除

次に、構成ページCookie DomainからStore2およびStore3から値を削除しました。

ストア=>
設定セクションの設定=> Store2またはStore3を
選択=> 一般セクションのWeb => デフォルトの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バージョンコントロールでは無視されます)。

  1. .htaccess
  2. index.php
  3. dev / tools / grunt / configs / themes.js(カスタムテーマCSSをコンパイルするためのGrunt設定ファイル)

Magento2をアップグレードすると、これらのファイルは2.1.3の初期状態にリセットされます。.htaccessindex.phpファイルを手動でクリーンアップする必要はありませんでした。ファイルの内容は、アップグレードによって自動的にリセットされました。これは良い副作用でした。

しかし、悪い副作用もありました。Grunt構成ファイル内のカスタムコードは、コアのアップグレードによってリセットおよび消去されました。このファイルのカスタムコード行を手動で復元する必要がありました。

このコアアップグレードと構成/ファイルの変更を行う前に、ファイルとDBのバックアップを取ることをお勧めします。


JavaScriptの縮小が役立つ場合があります

JSを縮小すると、サイト全体の安定性が向上しました。

店舗=>
コンフィギュレーション設定]セクションで=>
を選択Default Config=>
ADVANCEDセクションで開発=>
JavaScriptの設定=>
  セットMerge JavaScript Files「はい」=>への
  セットEnable JavaScript Bundling「はい」=>に
  設定さMinify JavaScript Filesに「はい」=>
その後、キャッシュのクリア

ここに画像の説明を入力してください

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.