Оновлення:
Знайдено інший спосіб для перекладеної сторінки обслуговування:
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
каталог у кожну папку ...
"Далі":
- ви повинні відредагувати три основні файли. Щоб максимально уникнути редагувань в ядрі, я просто змінив, включаючи шлях сторінок помилок / звітів і розширений
processor.php
для читання змінених local.xml
.
- для нього все ще потрібні файли шаблонів для кожної мови (на даний момент немає перекладу - можливо, пізніше )
Основні настройки
Multi-сайт мульти-магазин установка , як це, тільки differnce є те , що я поставив MAGE_RUN_CODE
в .htaccess
замість index.php
. Для першого домену я не використовую 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;
}
Edit 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>
на першому рівні спочатку шукайте веб-сайти 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
(Мова за замовчуванням 1-го домену)
default-en
default-fr
website1-default
(2-я мова за замовчуванням домену)
- ...
Немає дублікатів CSS / зображень
- помістіть специфічні файли CSS / зображень для вашого веб-сайту в один каталог і додайте у нього
<skin_base>
вузолlocal.xml
- змінити ВСІ статичні посилання у
page.phtml
файлах з ie href="css/styles.css"
на<?php echo $this->getSkinBaseUrl('css/styles.css')?>