マルチウェブサイト マルチドメイン設定におけるウェブサイトごとのメンテナンス モードの変換

magento.stackexchange https://magento.stackexchange.com//questions/88988

質問

マルチ Web サイト/マルチドメイン設定における Web サイトごとのメンテナンス モードの変換

とは何ですか ちゃんとした マルチ Web サイトおよびマルチドメイン環境でメンテナンス ページを翻訳 (ローカリゼーション) する方法は?

セットアップは次のようになります。

  • MAGENTO_ROOT/index.php
  • MAGENTO_ROOT/uk/index.php
  • MAGENTO_ROOT/us/index.php
  • MAGENTO_ROOT/somecode/index.php

次の方法でストアにアクセスできると仮定します。

この問題に対する解決策は簡単にいくつか見つかりますが、それらはすべて、実際の優れたクリーンな解決策というよりは回避策であるように思えます。

この問題をどうやって解決しますか?

役に立ちましたか?

解決

デフォルトでMagentoはエラーページの変換範囲外のボックスをサポートしておらず、そのような機能を許可するためのいくつかのカスタマイズが必要です。それで技術的には適切なの方法はありません。

エラー発生中にフルスタックは初期化されていないため、通常の変換機能$this->__('foobar');はテンプレートでは機能しません。

MageBase:

にあるエラーページの生成方法に関する詳細はいくつかあります。

1つのオプションは、errors/をあなたの言語のあなたの言語のサブディレクトリ、ukなどの各サブディレクトリにコピーし、エンドユーザーのWebサイトのエントリポイントの言語を反映するようにテンプレートを変更することです。

各ビューのusに注意して、サブの相対エラーを含める:

if (file_exists($maintenanceFile)) {
    include_once dirname(__FILE__) . '/errors/503.php';
    exit;
}
.

は、index.php

の404を含むすべてのエラーの基本テンプレートがあると注意してください。

おそらくより洗練された解決策がありますが、既に異なるビューのために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://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パラメータ。これは意図的な方法のようですが、(まだ)文書化されていません...

  1. いくつかの書き換えルールを追加します .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]
    
  2. コピー errors/defaulterrors/french

  3. ニーズに合わせてテンプレート ファイルを変更/翻訳します

少し遅いかも知れませんが、 良い 実用的なソリューション、コピーせずに 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.phpen, 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 サイトの runco​​de/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')?>
ライセンス: CC-BY-SA帰属
所属していません magento.stackexchange
scroll top