मल्टीवेबसाइट-मल्टीडोमेन सेटअप में प्रति वेबसाइट रखरखाव मोड का अनुवाद करें


12

मल्टी वेबसाइट-मल्टी डोमेन सेटअप में प्रति वेबसाइट में अनुरक्षण मोड का अनुवाद करें

बहु-वेबसाइट और बहु-डोमेन वातावरण में अनुरक्षण (स्थानीयकरण) रखरखाव पृष्ठ का उचित तरीका क्या है ?

सेटअप बना है:

  • MAGENTO_ROOT / index.php
  • MAGENTO_ROOT / ब्रिटेन / index.php
  • MAGENTO_ROOT / हमें / index.php
  • MAGENTO_ROOT / somecode / index.php

मान लेते हैं कि स्टोर के माध्यम से पहुंच योग्य हैं:

मैं आसानी से इसके लिए कुछ समाधान देख सकता हूं, लेकिन सभी के लिए वास्तविक अच्छा, स्वच्छ समाधानों की तुलना में अधिक समाधान का प्रतीत होता है।

आप इस मुद्दे को कैसे हल करेंगे?


क्या आपने इन एक्सटेंशन का उपयोग करने की कोशिश की है? magentocommerce.com/magento-connect/… magentocommerce.com/magento-connect/easy-site-mainurance.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अलग-अलग विचारों के लिए नकल कर रहे हैं , इसलिए कुछ और फाइलें बहुत अधिक अव्यवस्थित नहीं हो सकती हैं। आप शीर्ष स्तर सीएसएस और छवियों को शामिल करने के लिए कुछ अतिरेक को बचाने के लिए टेम्पलेट्स को भी संशोधित कर सकते हैं।

आप एक भाषा फ़ाइल भी बना सकते हैं जैसा कि आप Magento के मानक स्थानीयकरण में करते हैं और process.phpफ़ाइल के साथ मानों को पढ़ते हैं , जैसा कि शीर्षक और कुछ अन्य डेटा के लिए स्थानीयकरण की आवश्यकता होती है। भाषा पढ़ने के लिए Varien_File_Csv का उपयोग करने का एक सरल उदाहरण .CSV फ़ाइल:

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

अतिरिक्त ध्यान दें: चूंकि रन टाइम के वर्तमान बिंदु पर स्टैक Varien_File_Csvआंतरिक PHP फ़ंक्शन का उपयोग करके वर्ग को शामिल करने की अनुमति नहीं दे सकता है fgetcsv एक बेहतर विकल्प हो सकता है।

और फ़ाइल में आवश्यक डेटा को पॉप्युलेट करने के लिए आवश्यक भाषा CSV फ़ाइल को पार्स करें process.php

एक अन्य विकल्प केवल Google अनुवाद या इस तरह के 3 पार्टी उपकरण को स्वचालित रूप से अंत उपयोगकर्ताओं की भाषा में त्रुटि पृष्ठों का अनुवाद करना होगा।

संदर्भ:


2

जैसा कि पहले उल्लेख किया गया है कि रखरखाव पृष्ठ का अनुवाद करने का कोई आसान तरीका नहीं है। हालाँकि, इसके लिए एक वर्कअराउंड है (जिसके अपने फायदे / नुकसान की संख्या है) - कुछ रखरखाव मोड एक्सटेंशन का उपयोग करें, जैसे कि इस प्रकार है:

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

यह रखरखाव मोड पृष्ठ प्रदर्शित करता है AFTER Magento स्टैक लोड किया गया है, जिसका अर्थ है कि आपको डेटाबेस कनेक्शन और कुछ अन्य चीजें चाहिए। इसकी वजह से यह धीमा है और इसके लिए अधिक संसाधनों की आवश्यकता है। लेकिन अगर यह आपके लिए कोई समस्या नहीं है, तो यह रखरखाव पृष्ठ को पूरी तरह से अनुकूलन योग्य बनाता है।


यदि डेटाबेस से कनेक्शन बाधित हो जाएगा तो आउटपुट क्या होगा?
छंद

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. अपने URL में .htaccessएक skinपैरामीटर को जोड़ने वाले अपने कुछ नियम फिर से जोड़ें । उदाहरण के लिए।

    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हर सबफ़ोल्डर को निर्देशिका की नकल के बिना ...

"Downsides":

  • आपको तीन मुख्य फ़ाइलों को संपादित करना होगा। जितना संभव हो सके कोर में संपादन से बचने के लिए मैंने केवल त्रुटि / रिपोर्ट पृष्ठों का पथ शामिल किया है और processor.phpएक संशोधित पढ़ने के लिए विस्तारित किया है local.xml
  • इसके लिए अभी भी हर भाषा के लिए टेम्प्लेट फ़ाइलों की आवश्यकता है (फिलहाल कोई अनुवाद नहीं - शायद बाद में )

बुनियादी ढांचा

मल्टी-वेबसाइट मल्टी-स्टोर सेट-अप इस तरह, केवल भिन्न है कि मैंने इसके बजाय सेट MAGE_RUN_CODEकिया .htaccessहै index.php। 1 डोमेन के लिए मैं इसका उपयोग करने वाले 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, ..., सीएसएस निर्देशिका से मेल खाते हैं<runcode>-<locale>

  • default-default (प्रथम डोमेन डिफ़ॉल्ट भाषा)
  • default-en
  • default-fr
  • website1-default (दूसरा डोमेन डिफ़ॉल्ट भाषा)
  • ...

कोई डुप्लिकेट सीएसएस / छवियों

  • अपनी वेबसाइट विशिष्ट CSS / images फाइलों को एक डायरेक्टरी में रखें और <skin_base>नोड को इसमें जोड़ेंlocal.xml
  • फ़ाइलों में से यानी के लिए सभी स्थिर लिंक बदलेंpage.phtmlhref="css/styles.css"<?php echo $this->getSkinBaseUrl('css/styles.css')?>
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.