पैच SUPEE-6788 के लिए कस्टम मॉड्यूल के व्यवस्थापक राउटर को कैसे अपडेट करें


34

मुझे यकीन नहीं है कि SUPEE-6788 पैच के साथ काम करने के लिए कस्टम मॉड्यूल कैसे अपडेट करें , निर्देश बहुत स्पष्ट नहीं हैं।

एलन स्टॉर्म के ट्यूटोरियल के आधार पर , मैंने परीक्षण के लिए जनरेटर में एक साधारण मॉड्यूल www.silksoftware.com/magento-module-creator/ बनाया। इसमें व्यवस्थापक में कस्टम पृष्ठ है जो पूरी तरह से ठीक काम करता है, लेकिन जब मैं SUPEE-6788 में आवश्यक सुधार लागू करता हूं, तो व्यवस्थापक पृष्ठ 404 त्रुटि दिखाता है।

कस्टम व्यवस्थापक पृष्ठ का URL है:

localhost / index.php / admin / admin_adminhello / adminhtml_adminhellobackend / index / key / 83f08ec4bddff37e47412e16acc8d3f6 /

यहाँ मॉड्यूल का विन्यास है:

<config>
    <modules>
        <Pulsestorm_Adminhello>
            <version>0.1.0</version>
        </Pulsestorm_Adminhello>
    </modules>
    <global>
        <helpers>
            <adminhello>
                <class>Pulsestorm_Adminhello_Helper</class>
            </adminhello>
        </helpers>
        <blocks>
            <adminhello>
                <class>Pulsestorm_Adminhello_Block</class>
            </adminhello>
        </blocks>
    </global>
    <admin>
        <routers>
            <adminhello>
                <use>admin</use>
                <args>
                    <module>Pulsestorm_Adminhello</module>
                    <frontName>admin_adminhello</frontName>
                </args>
            </adminhello>
        </routers>
    </admin>
    ...

यहाँ नियंत्रक है:

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendController.php

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        $this->loadLayout();
        $this->_title($this->__("My Test Page Title"));
        $this->renderLayout();
    }
}

समाधान

मैंने <routers>पैच के निर्देशों के आधार पर इस तरह प्रतिस्थापित किया (शायद गलत तरीके से):

<routers>
    <adminhtml>
        <args>
            <modules>
                <admin_adminhello after="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</admin_adminhello>
            </modules>
        </args>
    </adminhtml>
</routers>

लेकिन अब यूआरएल सिर्फ दिखाता है 404 error:

स्थानीय होस्ट / index.php / व्यवस्थापक / admin_adminhello / adminhtml_adminhellobackend / सूचकांक / कुंजी / 83f08ec4bddff37e47412e16acc8d3f6 /

उस नए पैच के लिए मॉड्यूल को सही ढंग से कैसे तय किया जाए? क्या मुझे केवल config.xmlइस पैच को लागू करने के बाद मुझे अपडेट करने की आवश्यकता है या क्या मुझे व्यवस्थापक पृष्ठ का URL बदलने की आवश्यकता है?

जवाबों:


42

मैं पैच के साथ अनुशंसित 6788 के रूप में Magento के नए तरीके का उपयोग करने के लिए अपने कस्टम मॉड्यूल को बदलने में कामयाब रहा। इसलिए मैं अन्य के लिए एक संदर्भ के रूप में यहां देता हूं, इस धागे में सवाल का जवाब भी देता हूं।

  1. Config.xml फ़ाइल में राउटर में बदलें:

पहले:

<admin>
    <routers>
        <adminhello>
            <use>admin</use>
            <args>
                <module>Pulsestorm_Adminhello</module>
                <frontName>admin_adminhello</frontName>
            </args>
        </adminhello>
    </routers>
</admin>

बाद

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. नियंत्रक में बदलें

2.1।

पाथ से पहले

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendController.php

पथ के बाद

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/Adminhello/AdminhellobackendController.php

2.2

कक्षा से पहले

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

कक्षा के बाद

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. यदि आपके पास एक adminhtml.xml फ़ाइल है (बस नीचे दिए गए उदाहरण के रूप में दें)

से पहले

<config>
    <menu>
        <adminhello_config translate="title" module="adminhello">
            <title>Adminhello Settings</title>
            <sort_order>100</sort_order>
            <children>
                <list_action translate="title" module="adminhello">
                    <title>Manage Hellos</title>
                    <sort_order>4</sort_order>
                <action>adminhello/adminhtml_adminhellobackend</action>
                </list_action>
...
            </children>
        </adminhello_config>
    </menu>
</config>

बाद

<?xml version="1.0" encoding="UTF-8"?>
<config>
    <menu>
        <adminhello_config translate="title" module="adminhello">
            <title>Adminhello Settings</title>
            <sort_order>100</sort_order>
            <children>
                <list_action translate="title" module="adminhello">
                    <title>Manage Hellos</title>
                    <sort_order>4</sort_order>
                <action>adminhtml/adminhello_adminhellobackend</action>
                </list_action>
...
            </children>
        </adminhello_config>
    </menu>
</config>
  1. अपने कोड में बदलें

पहले: URL प्राप्त करना

Mage::getUrl('adminhello/adminhtml_adminhellobackend/doSomething')

के बाद: URL प्राप्त करना

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. लेआउट फ़ाइलों में परिवर्तन (यदि आपके पास लेआउट फ़ाइलें हैं, उदाहरण के लिए नीचे)

लेआउट से पहले

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

लेआउट के बाद

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>

अति उत्कृष्ट! एक जादू की तरह काम किया!
BENN1TH

17

मैं यह पता लगाने के घंटे खो दिया है। सिर्फ इसलिए कि Magento के देवता समझने योग्य विन्यास बनाने में सक्षम नहीं हैं, या फिर भी एक तरह से अपने कोड का दस्तावेजीकरण कर रहे हैं जो एक इंसान इसे पढ़ सकेगा।

पहले config.xml पर एक नजर डालते हैं

<routers>
<adminhtml>
    <args>
        <modules>
            <admin_adminhello after="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</admin_adminhello>
        </modules>
    </args>
</adminhtml>

टैग का पूरा अर्थ बदल गया है। "मॉड्यूल" के तहत टैग सिर्फ एक यादृच्छिक नाम है। एक्सएमएल संकलित होने पर यह सुनिश्चित करने के लिए आपको यह सुनिश्चित करने की आवश्यकता है कि यह अद्वितीय नहीं है। इसका URL पर प्रभाव है।

<admin_adminhello after= ..... >

Magento अब आपसे अपेक्षा करता है कि आप अपने बैकएंड कंट्रोलर क्लासेस को एक नए सबफ़ोल्डर में ले जाएँ, जिसे "adminhtml" कहा जाता है। यही कारण है कि config.xml में आपको _Adminhtml जोड़कर वर्ग नाम प्रत्यय को बदलना होगा

... >Pulsestorm_Adminhello_Adminhtml</admin_adminhello> ....

आपके मामले में फ़ोल्डर में स्थित होगा

एप्लिकेशन / कोड / स्थानीय / Pulsestorm / Adminhello / नियंत्रक / Adminhtml

अब असली समस्या। दूसरे (बेहतर) सिस्टम का उपयोग करके आपके पास "FrontName" टैग का उपयोग करके अपने स्वयं के नामस्थान को परिभाषित किया गया था। आपके पास यह लक्जरी नहीं है, इसलिए आपको यह सुनिश्चित करने की आवश्यकता है कि आपके नियंत्रक का एक अद्वितीय नाम है। अन्यथा यह अन्य एक्सटेंशन के साथ संघर्ष करेगा। तो नियंत्रकों जैसे कि "AdminController.php" नाम कुछ भी अच्छा नहीं है, आपको इसे कुछ परियोजना को विशिष्ट बनाना होगा, जैसे आपके मामले में " AdminhelloController.php "

तब आपका URL चेंज हो जाएगा

http: //localhost/index.php/admin/adminhellobackend/index/key/83f08ec4bddff37e47412e16acc8d3f6/

फ़ाइल का नाम बदलने या स्थानांतरित करने के बाद कंट्रोलर क्लासनाम को समायोजित करना न भूलें

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendController.php

इस स्थिति में नाम Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController होगा

बेशक आपको मेनू आइटम और फ़ार्म में उपयोग किए जाने वाले किसी भी URL को समायोजित करना होगा जो आप बैकएंड में उपयोग करते हैं

यह भी सुनिश्चित करें कि आप index.php फ़ाइल में डेवलपर मोड पर स्विच करें । मैंने देखा कि यदि नियंत्रक में कुछ बग है, तो आपको एक 404 भी मिलता है। Develeport मोड के साथ आपको स्टैकग्रेस त्रुटि मिलती है।

मैं भी क्या करूंगा, नियंत्रक को कॉल करने के बाद बस एक लॉग लिखना होगा, बस इतना है कि आप देखें कि क्या नियंत्रक विधि बिल्कुल एक्सेस की गई थी।

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendController.php

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
    public function indexAction()
    {
        Mage::log('Controller was accessed', null, 'controller.log', true);
        $this->loadLayout();
        $this->_title($this->__("My Test Page Title"));
        $this->renderLayout();
    }
}

यदि यह काम करता है तो क्या आप अपने उत्तर का विस्तार कर सकते हैं? धन्यवाद!
४rea पर क्लॉडिउ क्रेगना २

ठीक है, किया ... आशा है कि यह मदद करता है
leedch

हे, एक बार पुराने MagentoCommerce मंचों पर दिन में एक उल्लसित मैगनेटो डेवलपर की प्रतिक्रिया को आपके " अभी तक यहां तक ​​कि उनके कोड को टिप्पणी करते हुए" भी पकड़ा गया । "लेकिन कोड स्व दस्तावेज है ..."। उम्म ने तब पर्ल पॉड टेस्ट पास नहीं किया था, अब नहीं करता है। ऊपर दिए गए स्पष्टीकरण के लिए धन्यवाद, मुझे इसकी आवश्यकता थी।
फियास्को लैब्स

3
Magento अब आपसे अपेक्षा करता है कि आप अपने बैकएंड कंट्रोलर क्लासेस को "adminhtml" नामक एक नए सबफ़ोल्डर में ले जाएँ - यह सच नहीं है, कंट्रोलर जहाँ चाहे वहाँ जा सकता है, यह केवल इस मामले में adminhtml फ़ोल्डर के अंतर्गत है क्योंकि आपने एक शुरुआती मार्ग परिभाषित किया है की Pulsestorm_Adminhello_Adminhtmlconfig.xml में। आपको किसी भी व्यवस्थापक लेआउट हैंडल को अपडेट करने की आवश्यकता है, और व्यवस्थापक URL की तरह उत्पन्न करने के लिए कॉल करता है getUrl()
जोनाथन हसी

@leedch मैं अपने बाल खींच रहा हूं ताकि यह पता लगाने की कोशिश करूं कि जब मैं 404 त्रुटि प्राप्त करता हूं तो कोई भी चीज जो मैं कोशिश करता हूं, वह SUPEE-6788 के लिए व्यवस्थापक मार्ग को बदलने पर यह मॉड्यूल काम नहीं करेगा। यह एक कस्टम HTML चालान प्रिंट करने के लिए एक सरल मॉड्यूल है। github.com/gaiterjones/magento-htmlinvoice
paj

8

यहाँ Magento SUPEE-6788 पैच के परिणामस्वरूप विस्तार और अनुकूलन संघर्षों के लिए एक विश्लेषण / फिक्स टूल है।

https://github.com/rhoerr/supee-6788-toolbox

नोट: किसी भी पैच या पैच फिक्स को लागू करने से पहले, हमेशा अपनी वेबसाइट और डेटाबेस का बैकअप बनाने की सिफारिश की जाती है।

आप केवल विश्लेषण कर सकते हैं कि क्या तय करने की आवश्यकता है।

विश्लेषण करने के लिए: SSH से चलाएँ:php -f fixSUPEE6788.php -- analyze

यह दिखाएगा कि किन फ़ाइलों में समस्याएं हैं और आप उन्हें कैसे ठीक कर सकते हैं। यह फिक्स लागू नहीं होगा।

या, आप परिवर्तनों को भी लागू कर सकते हैं / ठीक कर सकते हैं।

परिवर्तन लागू करने के लिए: SSH से चलाएँ:php -f fixSUPEE6788.php -- fix

यह स्वचालित रूप से फिक्स का विश्लेषण और लागू करेगा।


यू के लिए अच्छा शेयर +1
अमित बेरा

क्या इस तरह के सभी मॉड्यूल के लिए अभी भी व्यवस्थापक पृष्ठ पृष्ठ 404 दिखा रहे हैं
वसीक शाहरुख
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.