Перекласти режим обслуговування на веб-сайт у налаштуваннях багато веб-сайтів та багатодомен


12

Перекласти режим обслуговування на веб-сайт у налаштуваннях кількох веб-сайтів

Який правильний спосіб перекладу (локалізації) сторінки технічного обслуговування у середовище, розміщене на кількох веб-сайтах та у кількох доменах?

Налаштування зроблено у:

  • MAGENTO_ROOT / index.php
  • MAGENTO_ROOT / uk / index.php
  • MAGENTO_ROOT / us / index.php
  • MAGENTO_ROOT / деякий код / ​​index.php

Припустимо, що магазини доступні через:

Я легко бачу мало рішень для цього, але все це здається скоріше вирішенням, ніж власне приємні, чисті рішення.

Як ви вирішуєте це питання?


ви намагалися використовувати ці розширення? magentocommerce.com/magento-connect/… magentocommerce.com/magento-connect/easy-site-maintenance.html
MagenX

Відповіді:


10

За замовчуванням Magento не підтримує переклад нестандартних для перекладу сторінок помилок, і вимагає певних налаштувань, щоб дозволити такі функції. Тож технічно немає належного способу зробити це.

Оскільки повний стек НЕ ініціалізується під час генерації помилок, нормальна функція перекладу $this->__('foobar');не працюватиме в шаблонах.

Деякі відомості про те, як створюються сторінки помилок, можна знайти на MageBase:

Одним з варіантів є просто скопіювати errors/в кожен з ваших вкладених каталогів ваших мов uk, usі т.д. , і змінювати шаблони для відображення мов точки входу сайту кінцевого користувача.

Просто зауважте, що ви index.phpпереглядаєте кожен із них, щоб включити додаткові документи про помилки:

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

Також майте на увазі, що є базовий шаблон для всіх помилок, включаючи 404 в page.html

Напевно, є більш елегантні рішення, але оскільки ви вже дублюєте index.phpрізні види, декілька файлів можуть не надто заплутатися. Ви також можете змінити шаблони, щоб вони включали CSS верхнього рівня та зображення, щоб заощадити надмірність.

Ви також можете створити мовний файл такий же, як у стандартній локалізації Magento, і прочитати значення у process.phpфайлі, оскільки там встановлюються заголовок та деякі інші дані, які потребують локалізації. Простий приклад використання Varien_File_Csv для читання мовного файлу .CSV:

$csvObject = new Varien_File_Csv();
$csvObject->getData($file);

Додаткова примітка: Оскільки стек у поточній точці часу запуску може не дозволяти Varien_File_Csvвключенню класу за допомогою внутрішньої функції PHP, fgetcsv може бути кращою альтернативою.

І розібрати файл CSV мови, необхідний для заповнення потрібних даних у process.phpфайлі.

Іншою альтернативою було б просто додати Google translate або такий сторонній інструмент для автоматичного перекладу сторінок помилок на мову кінцевих користувачів.

Список літератури:


2

Як було сказано раніше, немає простого способу перекладати сторінку обслуговування. Однак для цього є одне вирішення (яке має власну кількість переваг / недоліків) - використовуйте деякі розширення режиму обслуговування, наприклад, таке:

http://www.magentocommerce.com/magento-connect/store-maintenance.html

На ньому відображається сторінка режиму обслуговування ПІСЛЯ завантаження стека Magento, що означає, що вам потрібно мати підключення до бази даних та деякі інші речі. Через це він також повільніше і вимагає більше ресурсів. Але якщо це не є проблемою для вас, це робить сторінку обслуговування повністю настроюваною.


Яким буде вихід, якщо підключення до бази даних буде перервано?
versedi

1
Я сказав, що це вирішується і не підходить для кожної справи. Якщо бази даних немає, Magento відобразить повідомлення про помилку.
Pronto

2

Оновлення:

Знайдено інший спосіб для перекладеної сторінки обслуговування:

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/defaultвerrors/french

  3. Змініть / перекладіть файли шаблонів під свої потреби

Можливо, трохи пізно, але гарне робоче рішення, не копіюючи 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')?>
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.