Dịch Chế độ bảo trì trên mỗi trang web trong thiết lập đa miền


12

Dịch Chế độ bảo trì trên mỗi trang web trong thiết lập nhiều trang web

Là gì đúng cách dịch (nội địa) trang bảo trì trong một đa trang web và đa miền môi trường?

Thiết lập được thực hiện thành:

  • MAGENTO_ROOT / index.php
  • MAGENTO_ROOT / uk / index.php
  • MAGENTO_ROOT / chúng tôi / index.php
  • MAGENTO_ROOT / somecode / index.php

Hãy giả sử rằng các cửa hàng có thể truy cập thông qua:

Tôi có thể dễ dàng thấy một vài giải pháp cho nó nhưng tất cả các vấn đề dường như là một cách giải quyết hơn là các giải pháp sạch đẹp, thực tế.

Làm thế nào để bạn giải quyết vấn đề này?


Câu trả lời:


10

Theo mặc định, Magento không hỗ trợ dịch ngoài hộp cho các trang lỗi và yêu cầu một số tùy chỉnh để cho phép các tính năng đó. Vì vậy, về mặt kỹ thuật không có đúng để làm như vậy.

Do toàn bộ ngăn xếp KHÔNG được khởi tạo trong quá trình tạo lỗi, nên chức năng dịch thông thường $this->__('foobar'); sẽ không hoạt động trong các mẫu.

Một số chi tiết về cách các trang lỗi được tạo có thể được tìm thấy trên MageBase:

Một lựa chọn là chỉ cần sao chép errors/vào mỗi thư mục con lại ngôn ngữ của bạn uk, usvv và sửa đổi các mẫu để phản ánh ngôn ngữ của điểm vào trang web của người dùng cuối.

Chỉ cần lưu ý index.phpmỗi chế độ xem của bạn để bao gồm các tài liệu lỗi tương đối phụ:

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

Ngoài ra, hãy lưu ý rằng có một mẫu cơ sở cho tất cả các lỗi, bao gồm 404 trong page.html

Có thể có nhiều giải pháp thanh lịch hơn nhưng vì bạn đã sao chép index.php cho các chế độ xem khác nhau, một vài tệp có thể không quá lộn xộn. Bạn cũng có thể sửa đổi các mẫu để bao gồm CSS và hình ảnh cấp cao nhất để tiết kiệm một số dự phòng.

Bạn cũng có thể tạo một tệp ngôn ngữ giống như bạn làm trong bản địa hóa tiêu chuẩn của Magento và đọc các giá trị trong process.phptệp, như tiêu đề và một số dữ liệu khác cần được bản địa hóa đang được đặt ở đó. Một ví dụ đơn giản về việc sử dụng Varien_File_Csv để đọc tệp .CSV ngôn ngữ:

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

Lưu ý bổ sung: Vì ngăn xếp tại thời điểm chạy hiện tại có thể không cho phép Varien_File_Csvbao gồm lớp bằng cách sử dụng hàm PHP bên trong, fgetcsv có thể là một lựa chọn tốt hơn.

Và phân tích tệp CSV ngôn ngữ cần thiết để điền dữ liệu cần thiết vào process.php tệp.

Một cách khác là chỉ cần thêm Google dịch hoặc công cụ bên thứ 3 như vậy để tự động dịch các trang lỗi sang ngôn ngữ của người dùng cuối.

Người giới thiệu:


2

Như đã đề cập trước đây, không có cách dễ dàng để dịch trang bảo trì. Tuy nhiên, có một cách giải quyết cho nó (có một số ưu điểm / nhược điểm riêng) - sử dụng một số tiện ích mở rộng chế độ bảo trì, chẳng hạn như:

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

Nó hiển thị trang chế độ bảo trì SAU Ngăn xếp Magento đã được tải, có nghĩa là bạn cần có kết nối cơ sở dữ liệu và một vài thứ khác. Do đó, nó cũng chậm hơn và đòi hỏi nhiều tài nguyên hơn. Nhưng nếu đó không phải là vấn đề với bạn, nó sẽ hiển thị trang bảo trì hoàn toàn có thể tùy chỉnh.


Điều gì sẽ là đầu ra nếu tức là kết nối đến cơ sở dữ liệu sẽ bị gián đoạn?
Versedi

1
Tôi nói, đó là cách giải quyết và không phù hợp với mọi trường hợp. Nếu cơ sở dữ liệu không có, Magento sẽ hiển thị thông báo lỗi.
Pronto

2

Cập nhật:

Tìm thấy một cách khác cho trang bảo trì dịch:

https://github.com/OpenMage/magento-lts/blob/1.9.3.x/errors/ Processor.php # L160-L162

    if (isset($_GET['skin'])) {
        $this->_setSkin($_GET['skin']);
    }

Trình xây dựng trang bảo trì tích lũy skintham số POST để thay đổi bố cục. Nó có vẻ là cách cố ý, nhưng nó không được ghi lại (chưa) ...

  1. Thêm một số quy tắc viết lại để .htaccessthêm một skintham số vào URL của bạn. Ví dụ.

    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. Sao chép errors/defaultvàoerrors/french

  3. Thay đổi / dịch tập tin mẫu theo nhu cầu của bạn

Có thể hơi muộn, nhưng một giải pháp hoạt động tốt , không cần sao chép errorthư mục vào mọi thư mục con ...

"Nhược điểm":

  • bạn phải chỉnh sửa ba tập tin cốt lõi. Để tránh các chỉnh sửa trong lõi càng nhiều càng tốt, tôi chỉ thay đổi bao gồm đường dẫn của các trang báo cáo / lỗi và mở rộng processor.phpđể đọc một sửa đổi local.xml.
  • nó vẫn yêu cầu các tệp mẫu cho mọi ngôn ngữ (hiện tại không có bản dịch - có thể sau này )

Thiết lập cơ bản

Multi-trang web đa cửa hàng thiết lập như thế này, chỉ differnce là tôi đã thiết lập MAGE_RUN_CODEtrong .htaccessthay vì index.php. Đối với tên miền đầu tiên, tôi không sử dụng RUN_CODEtất cả các tên miền khác ...

RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule .* - [E=MAGE_RUN_CODE:website1]
RewriteCond %{HTTP_HOST} ^www.example.com$
RewriteRule .* - [E=MAGE_RUN_TYPE:website]

Ngoài các câu trả lời liên quan tôi đã phải thiết lập RewriteBasetrong .htaccessđể phù hợp với mục locale và chỉnh sửa index.phptrong en, frvà sự thay đổi

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

đến

$maintenanceFile = '../maintenance.flag';
...
if (file_exists($maintenanceFile)) {
    include_once '../errors/503.php';
    exit;
}

Chỉnh sửa errors/404.php, 503.phpreport.php

Thay thế

require_once 'processor.php';
$processor = new Error_Processor();

với

require_once 'processor_multiwebsite.php';
$processor = new Error_Processor_Multiwebsite();

Và thêm nó vào 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.xmlCấu trúc mới

Thay vì đặt <skin>ở cấp đầu tiên, hãy tìm trang web runcode / locale trước

<?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>

Mẫu

Thêm 503.phtml, ..., CSS vào thư mục phù hợp<runcode>-<locale>

  • default-default (Ngôn ngữ mặc định của tên miền thứ 1)
  • default-en
  • default-fr
  • website1-default (Ngôn ngữ mặc định của tên miền thứ 2)
  • ...

Không có CSS ​​/ hình ảnh trùng lặp

  • đặt các tệp CSS / hình ảnh cụ thể của trang web của bạn vào một thư mục và thêm <skin_base>nút vàolocal.xml
  • thay đổi TẤT CẢ các liên kết tĩnh trong page.phtmlcác tệp từ tức là href="css/styles.css"thành<?php echo $this->getSkinBaseUrl('css/styles.css')?>
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.