更新:
找到了翻译维护页面的另一种方法:
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
。
- 它仍然需要每种语言的模板文件(目前暂不翻译- 可能稍后再翻译)
基本设定
像这样的多网站多商店设置,唯一的区别是我设置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;
}
编辑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>
在第一级进行设置,不如先查找网站运行代码/语言环境
<?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
(第二域默认语言)
- ...
没有重复的CSS /图像
- 将您网站的特定CSS /图像文件放在一个目录中,然后将
<skin_base>
节点添加到local.xml
- 将文件中的所有静态链接
page.phtml
从即href="css/styles.css"
更改为<?php echo $this->getSkinBaseUrl('css/styles.css')?>