マルチウェブサイト マルチドメイン設定におけるウェブサイトごとのメンテナンス モードの変換
-
13-12-2019 - |
質問
マルチ Web サイト/マルチドメイン設定における Web サイトごとのメンテナンス モードの変換
とは何ですか ちゃんとした マルチ Web サイトおよびマルチドメイン環境でメンテナンス ページを翻訳 (ローカリゼーション) する方法は?
セットアップは次のようになります。
- MAGENTO_ROOT/index.php
- MAGENTO_ROOT/uk/index.php
- MAGENTO_ROOT/us/index.php
- MAGENTO_ROOT/somecode/index.php
次の方法でストアにアクセスできると仮定します。
- http://MagentoExample.com/index.php (デフォルト)
- http://MagentoExample.uk/ (イギリス)
- http://MagentoExample.us/ (私たち)
- http://MagentoExample.com (何らかのコード)
この問題に対する解決策は簡単にいくつか見つかりますが、それらはすべて、実際の優れたクリーンな解決策というよりは回避策であるように思えます。
この問題をどうやって解決しますか?
解決
デフォルトでMagentoはエラーページの変換範囲外のボックスをサポートしておらず、そのような機能を許可するためのいくつかのカスタマイズが必要です。それで技術的には適切なの方法はありません。
エラー発生中にフルスタックは初期化されていないため、通常の変換機能$this->__('foobar');
はテンプレートでは機能しません。
MageBase:
にあるエラーページの生成方法に関する詳細はいくつかあります。 1つのオプションは、errors/
をあなたの言語のあなたの言語のサブディレクトリ、uk
などの各サブディレクトリにコピーし、エンドユーザーのWebサイトのエントリポイントの言語を反映するようにテンプレートを変更することです。
各ビューのus
に注意して、サブの相対エラーを含める:
if (file_exists($maintenanceFile)) {
include_once dirname(__FILE__) . '/errors/503.php';
exit;
}
.
は、index.php
おそらくより洗練された解決策がありますが、既に異なるビューのためにpage.html
を複製しているので、さらに多くのファイルが多すぎることがないかもしれません。冗長性を保存するためにトップレベルのCSSとイメージを含めるようにテンプレートを変更することもできます。
マゼントの標準ローカライズと同じように言語ファイルを作成し、index.php
ファイルを使用して、Localizationが設定されている必要がある他のデータを使用することができます。言語の.csvファイルを読むためのVARIEN_FILE_CSVを使用する簡単な例:
$csvObject = new Varien_File_Csv();
$csvObject->getData($file);
.
追加注:現在の実行時のスタックは、内部PHP関数 fgetcsv がより良い代替案です。
と、Varien_File_Csv
ファイルに必要なデータを入力するために必要な言語CSVファイルを解析します。
別の代替案は、Enter Usersの言語にエラーページを自動的に翻訳するためにGoogle Translateまたはそのようなサードパーティ製のツールを追加することです。
参考文献:
- > http://alanstorm.com/magento_error_page_framework_503_404
-
http://www.demacmedia.com/magento-commerce/mini-tutorial-improving-magento%E2%80%99s-maintenance-mode-for-store-view-specific-use/
他のヒント
メンテナンスページを翻訳する簡単な方法はありません。ただし、(独自の利点/短所があります) - このようなメンテナンスモードの拡張機能の一部を使用します。
http://www.magentocommerce.com/magento-connect/store-メンテナンス.html
マゼントスタックがロードされた後にメンテナンスモードページを表示します。つまり、データベース接続と他のものはほとんどありません。それが遅く、より多くのリソースも必要です。しかし、それがあなたにとって問題でなければ、それは完全にカスタマイズ可能なメンテナンスページをレンダリングします。
アップデート:
メンテナンス ページを翻訳する別の方法を見つけました。
https://github.com/OpenMage/magento-lts/blob/1.9.3.x/errors/processor.php#L160-L162
if (isset($_GET['skin'])) {
$this->_setSkin($_GET['skin']);
}
メンテナンス ページ コンストラクターは、 skin
レイアウトを変更するためのPOSTパラメータ。これは意図的な方法のようですが、(まだ)文書化されていません...
いくつかの書き換えルールを追加します
.htaccess
を追加しますskin
パラメータを URL に追加します。例えば。RewriteCond %{HTTP_HOST} ^french.example.com$ RewriteCond %{DOCUMENT_ROOT}/.maintenance.flag -f RewriteCond %{QUERY_STRING} !(^|&)skin=french(&|$) [NC] RewriteRule ^ %{REQUEST_URI}?skin=french[L]
コピー
errors/default
にerrors/french
- ニーズに合わせてテンプレート ファイルを変更/翻訳します
少し遅いかも知れませんが、 良い 実用的なソリューション、コピーせずに error
ディレクトリをすべてのサブフォルダーに...
「欠点」:
- 3 つのコア ファイルを編集する必要があります。コアでの編集をできるだけ避けるために、エラー/レポートページのインクルードパスを変更し、拡張しました
processor.php
変更されたものを読むにはlocal.xml
. - すべての言語のテンプレート ファイルが依然として必要です (現時点では翻訳はありません - おそらく後で)
基本的なセットアップ
複数のウェブサイトと複数の店舗のセットアップ このように、唯一の違いは私が設定したことです MAGE_RUN_CODE
で .htaccess
の代わりに index.php
. 。最初のドメインには no を使用します RUN_CODE
他のものはすべて次のように見えます...
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule .* - [E=MAGE_RUN_CODE:website1]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule .* - [E=MAGE_RUN_TYPE:website]
リンクされた回答に加えて、設定する必要がありました RewriteBase
で .htaccess
ロケールディレクトリと一致させて編集する index.php
で en
, fr
そして変化する
$maintenanceFile = 'maintenance.flag';
...
if (file_exists($maintenanceFile)) {
include_once dirname(__FILE__) . '/errors/503.php';
exit;
}
に
$maintenanceFile = '../maintenance.flag';
...
if (file_exists($maintenanceFile)) {
include_once '../errors/503.php';
exit;
}
編集 errors/404.php
, 503.php
そして report.php
交換する
require_once 'processor.php';
$processor = new Error_Processor();
と
require_once 'processor_multiwebsite.php';
$processor = new Error_Processor_Multiwebsite();
そしてこれを追加します errors/processor_multiwebsite.php
<?php
require_once 'processor.php';
class Error_Processor_Multiwebsite extends Error_Processor
{
const DEFAULT_RUNCODE = 'default';
const DEFAULT_LOCALE = 'default';
/**
* Magento run code
*
* @var string
*/
protected $_runCode;
/**
* Magento run code
*
* @var string
*/
protected $_locale;
public function __construct()
{
$this->_runCode = self::DEFAULT_RUNCODE;
if (isset($_SERVER['MAGE_RUN_CODE'])) {
$this->_runCode = $_SERVER['MAGE_RUN_CODE'];
}
$this->_locale = self::DEFAULT_LOCALE;
$path = array_filter(explode('/', str_replace('index.php', '', $_SERVER['SCRIPT_NAME'])));
if (end($path)) {
$this->_locale = end($path);
}
parent::__construct();
}
/**
* Retrieve skin URL
*
* @return string
*/
public function getSkinUrl()
{
$baseUrl = str_replace($this->_locale . '/', '', $this->getBaseUrl());
return $baseUrl . self::ERROR_DIR. '/' . $this->_config->skin . '/';
}
/**
* Retrieve skin base URL
*
* @return string
*/
public function getSkinBaseUrl($file)
{
return $this->_config->skin_base ? "../{$this->_config->skin_base}/{$file}" : $file;
}
/**
* Prepare config data
*/
protected function _prepareConfig()
{
parent::_prepareConfig();
$local = $this->_loadXml(self::MAGE_ERRORS_LOCAL_XML);
if (!is_null($local)) {
if ((string)$local->{$this->_runCode}->{$this->_locale}->skin) {
$this->_config->skin = (string)$local->{$this->_runCode}->{$this->_locale}->skin;
}
# add skin base URL
if ((string)$local->{$this->_runCode}->{$this->_locale}->skin_base) {
$this->_config->skin_base = (string)$local->{$this->_runCode}->{$this->_locale}->skin_base;
}
}
}
}
新しい local.xml
構造
設定する代わりに<skin>
最初のレベルでは、最初に Web サイトの runcode/locale を探します。
<?xml version="1.0"?>
<config>
<!-- 1st domain w/o runcode -->
<default>
<!-- no locale sub dir -->
<default>
<skin>default-default</skin>
...
</default>
<en>
<skin>default-en</skin>
<skin_base>default-default</skin_base>
...
</en>
<fr>
<skin>default-fr</skin>
<skin_base>default-default</skin_base>
...
</fr>
</default>
<!-- runcode website1 -->
<website1>
<!-- no locale sub dir -->
<default>
<skin>website1-default</skin>
...
</default>
...
</website1>
</config>
テンプレート
追加 503.phtml
, 、 ...、CSS とディレクトリの一致 <runcode>-<locale>
default-default
(最初のドメインのデフォルト言語)default-en
default-fr
website1-default
(2番目のドメインのデフォルト言語)- ...
重複したCSS/画像はありません
- Web サイト固有の CSS/画像ファイルを 1 つのディレクトリに置き、
<skin_base>
ノードからlocal.xml
- すべてを変更する 静的 のリンク
page.phtml
つまり、からのファイルhref="css/styles.css"
に<?php echo $this->getSkinBaseUrl('css/styles.css')?>