英語のストアビューからイタリア語のストアビューに切り替えるたびに、同等のホームページが表示され(どこにいてもかまいません)、次のエラーがスローされます。
これが私の設定です:
私はこれらの環境をメインの.htaccessに加えました:
SetEnvIf Host ^(.*)\.example\.com MAGE_RUN_CODE=en
SetEnvIf Host ^(.*)\.example\.com MAGE_RUN_TYPE=store
SetEnvIf Host ^(.*)\.example\.it MAGE_RUN_CODE=it
SetEnvIf Host ^(.*)\.example\.it MAGE_RUN_TYPE=store
まとめ:たとえば、example.com/my-beautiful-product.html[English store view]そして、イタリアのストアビューに切り替えると、の例が表示されます.itと表示され、の例ではなく、エラー(「要求されたストアが見つかりませんでした。ストアを確認して、再試行してください。」) .it/my-beautiful-product.htmlエラーなし。
何か案は?
/ vendor/magento/module-store/Controller/Store/SwitchAction.phpの行106と$ requestedUrlToRedirectにストアビューコードをハードコード化しようとしました:
...
public function execute()
{
$targetStoreCode = $this->_request->getParam(
\Magento\Store\Model\StoreManagerInterface::PARAM_NAME
);
$fromStoreCode = $this->_request->getParam(
'___from_store',
$this->storeCookieManager->getStoreCodeFromCookie()
);
$requestedUrlToRedirect = 'https://example.it/my-beautiful-product.html';
$redirectUrl = $requestedUrlToRedirect;
// $requestedUrlToRedirect = $this->_redirect->getRedirectUrl();
// $redirectUrl = $requestedUrlToRedirect;
$error = null;
try {
$fromStore = $this->storeRepository->get('en');
$targetStore = $this->storeRepository->getActiveStoreByCode('it');
// $fromStore = $this->storeRepository->get($fromStoreCode);
// $targetStore = $this->storeRepository->getActiveStoreByCode($targetStoreCode);
} catch (StoreIsInactiveException $e) {
$error = __('Requested store is inactive');
} catch (NoSuchEntityException $e) {
$error = __("The store that was requested wasn't found. Verify the store and try again.");
}
if ($error !== null) {
$this->messageManager->addErrorMessage($error);
} else {
$redirectUrl = $this->storeSwitcher->switch($fromStore, $targetStore, $requestedUrlToRedirect);
}
$this->getResponse()->setRedirect($redirectUrl);
}
...
次に、イタリアのストアビューから英語のビューに切り替え、うまくいきました!だからできないようです$ targetStoreCodeと$ requestedUrlToRedirectの正しい値を取得します。何か案は?
これはMagento 2.3.1から2.3.5のバグです。問題はビューにあります...そして、28行目のmodule-store/view/frontend/templates/switch/languages.phtmlに正確にあります。
違う
<li class="view-<?= $block->escapeHtml($_lang->getCode()) ?> switcher-option">
<a href="<?= $block->escapeUrl($block->getViewModel()->getTargetStoreRedirectUrl($_lang)) ?>">
<?= $block->escapeHtml($_lang->getName()) ?>
</a>
</li>
正しい
<li class="view-<?= $block->escapeHtml($_lang->getCode()) ?> switcher-option">
<a href="#" data-post='<?= /* @noEscape */ $block->getTargetStorePostData($_lang) ?>'>
<?= $block->escapeHtml($_lang->getName()) ?>
</a>
</li>
...そして今、それは魅力のように機能します!
テーブル「フラグ」からすべてのデータをクリアしてみてください。
データベースで次のクエリを実行してから、ウェブサイトを開こうとする必要があります。
SET FOREIGN_KEY_CHECKS=0;
UPDATE `store` SET store_id = 0 WHERE code='admin';
UPDATE `store_group` SET group_id = 0 WHERE name='Default';
UPDATE `store_website` SET website_id = 0 WHERE code='admin';
UPDATE `customer_group` SET customer_group_id = 0 WHERE
customer_group_code='NOT LOGGED IN';
SET FOREIGN_KEY_CHECKS=1;