ترجمة وضع الصيانة لكل موقع ويب في إعداد متعدد المواقع ومتعدد المجالات

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

سؤال

ترجمة وضع الصيانة لكل موقع ويب في إعداد مواقع ويب متعددة النطاق

ما هو سليم طريقة ترجمة (التعريب) صفحة الصيانة في بيئة متعددة المواقع ومتعددة المجالات؟

تم الإعداد إلى:

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

لنفترض أنه يمكن الوصول إلى المتاجر من خلال:

يمكنني بسهولة رؤية بعض الحلول لذلك، ولكن يبدو أن جميعها بمثابة حل بديل أكثر من كونها حلولًا لطيفة ونظيفة.

كيف يمكنك حل هذه المشكلة؟

هل كانت مفيدة؟

المحلول

بشكل افتراضي، لا يدعم 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 أو أداة خارجية لترجمة صفحات الخطأ تلقائيًا إلى لغة المستخدمين النهائيين.

مراجع:

نصائح أخرى

كما هو مذكور قبل عدم وجود طريقة سهلة لترجمة صفحة الصيانة.هناك حلوة واحدة لذلك (الذي يحتوي على عدد مميزات / عيوب) - استخدم بعض ملحقات وضع الصيانة، مثل هذا واحد:

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

يعرض صفحة وضع الصيانة بعد تحميل مكدس Magento، مما يعني أنك بحاجة إلى اتصال قاعدة بيانات وعدد قليل من الأشياء الأخرى.بسبب ذلك، فإن الأمر أبطأ أيضا ويتطلب المزيد من الموارد.ولكن إذا لم تكن مشكلة بالنسبة لك، فإنها تجعل صفحة الصيانة قابلة للتخصيص بالكامل.

تحديث:

وجدت طريقة أخرى لصفحة الصيانة المترجمة:

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.
  • لا يزال يتطلب ملفات قالب لكل لغة (لا توجد ترجمة في الوقت الحالي - ربما في وقت لاحق)

الإعداد الأساسي

إعداد متجر متعدد المواقع مثل هذا، والفرق الوحيد هو أنني قمت بتعيين 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> في المستوى الأول، ابحث عن مواقع الويب 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 (اللغة الافتراضية للنطاق الأول)
  • 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')?>
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى magento.stackexchange
scroll top