วิธีอัปเดตเราเตอร์ผู้ดูแลระบบของโมดูลที่กำหนดเองสำหรับแพทช์ SUPEE-6788


34

ฉันไม่แน่ใจว่าจะอัปเดตโมดูลที่กำหนดเองเพื่อทำงานกับแพตช์SUPEE-6788 ได้อย่างไรคำแนะนำนั้นไม่ชัดเจน

จากการสอนของ Alan Storm ฉันสร้างโมดูลง่าย ๆ ในเครื่องกำเนิดไฟฟ้า www.silksoftware.com/magento-module-creator/ สำหรับการทดสอบ มันมีหน้ากำหนดเองในผู้ดูแลระบบซึ่งทำงานได้อย่างสมบูรณ์แบบ แต่เมื่อฉันใช้การแก้ไขที่จำเป็นใน SUPEE-6788 หน้าผู้ดูแลระบบแสดงข้อผิดพลาด 404

URL ของหน้าผู้ดูแลระบบที่กำหนดเองคือ:

localhost / index.php / admin / admin_adminhello / adminhtml_adminhellobackend / ดัชนี / คีย์ / 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>

แต่ตอนนี้ URL เพิ่งแสดง404 error:

localhost / index.php / admin / admin_adminhello / adminhtml_adminhellobackend / ดัชนี / คีย์ / 83f08ec4bddff37e47412e16acc8d3f6 /

วิธีแก้ไขโมดูลให้ถูกต้องสำหรับแพตช์ใหม่นั้น? ฉันต้องอัปเดตconfig.xmlหรือต้องเปลี่ยน URL ของหน้าผู้ดูแลระบบหลังจากใช้โปรแกรมแก้ไขนี้หรือไม่

คำตอบ:


42

ฉันจัดการเพื่อเปลี่ยนโมดูลที่กำหนดเองของฉันเพื่อใช้ Magento วิธีใหม่ตามที่แนะนำกับแพทช์ 6788 ดังนั้นฉันให้ที่นี่เป็นข้อมูลอ้างอิงสำหรับผู้อื่นและตอบคำถามในหัวข้อนี้ด้วย

  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

ฉันเสียเวลาคิดเรื่องนี้ เพียงเพราะ Devs ที่ Magento ไม่สามารถสร้างการกำหนดค่าที่เข้าใจได้หรือแม้กระทั่งการจัดทำเอกสารรหัสของพวกเขาในแบบที่มนุษย์จะสามารถอ่านได้

ลองดูที่config.xmlก่อน

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

ความหมายทั้งหมดของแท็กเปลี่ยนไป แท็กภายใต้ "โมดูล" เป็นเพียงชื่อสุ่ม คุณเพียงแค่ต้องทำให้แน่ใจว่ามันไม่ซ้ำกันเพื่อให้แน่ใจว่าจะไม่ถูกเขียนทับเมื่อรวบรวม XML มันมีผลกับ URL

<admin_adminhello after= ..... >

วีโอไอพีในขณะนี้คาดว่าคุณจะย้ายไปเรียนควบคุมแบ็กเอนด์ของคุณลงในโฟลเดอร์ย่อยใหม่ที่เรียกว่า "adminhtml" นี่คือเหตุผลที่ใน config.xml ที่คุณต้องเปลี่ยนคำต่อท้ายชื่อชั้นโดยการเพิ่ม_Adminhtml

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

ในกรณีของคุณโฟลเดอร์จะอยู่ที่

app / รหัส / ท้องถิ่น / Pulsestorm / Adminhello / ควบคุม / Adminhtml

ตอนนี้ปัญหาที่แท้จริง การใช้ระบบอื่น (ดีกว่า) คุณได้กำหนด namespace ของคุณเองโดยใช้แท็ก "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 คุณจะได้รับข้อผิดพลาด Stacktrace

สิ่งที่ฉันจะทำคือเพียงแค่เขียนบันทึกเมื่อตัวควบคุมถูกเรียกใช้เพื่อให้คุณเห็นว่าวิธีการควบคุมนั้นเข้าถึงได้หรือไม่

/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();
    }
}

คุณสามารถขยายคำตอบได้ไหมถ้ามันใช้งานได้? ขอบคุณ!
Claudiu Creanga

ตกลงเสร็จแล้ว ... หวังว่ามันจะช่วยได้
58

หึจับครั้งหนึ่งเคยเป็นเฮฮาวีโอไอพีตอบสนองนักพัฒนากลับในวันที่ในฟอรั่ MagentoCommerce เก่าของคุณ " เลยแม้กระทั่งการจัดเก็บเอกสารรหัสของพวกเขา " ความคิดเห็น "แต่รหัสคือการบันทึกเอกสารด้วยตนเอง ... " อืมไม่ผ่านการทดสอบ perl pod ตอนนี้ไม่ได้แล้ว ขอบคุณสำหรับคำอธิบายข้างต้นฉันต้องการมัน
Fiasco Labs

3
Magento คาดว่าคุณจะย้ายคลาสตัวควบคุมแบ็กเอนด์ของคุณไปยังโฟลเดอร์ย่อยใหม่ที่ชื่อว่า "adminhtml" - ไม่เป็นความจริงตัวควบคุมสามารถอยู่ได้ทุกที่ที่คุณต้องการมันอยู่ภายใต้โฟลเดอร์ adminhtml ในกรณีนี้เพราะคุณได้กำหนดเส้นทางเริ่มต้น จากPulsestorm_Adminhello_Adminhtmlใน config.xml นอกจากนี้คุณยังจำเป็นต้องปรับปรุงใด ๆ ที่จับรูปแบบการดูแลระบบและการโทรไปยังผู้ดูแลระบบสร้าง URL getUrl()เช่น
Jonathan Hussey

@leedch ฉันดึงผมออกมาแล้วพยายามหาสาเหตุว่าทำไมโมดูลนี้จะไม่ทำงานเมื่อฉันเปลี่ยนเส้นทางผู้ดูแลระบบสำหรับ SUPEE-6788 ไม่ว่าฉันจะพยายามทำอะไรฉันก็จะได้รับข้อผิดพลาด 404 มันเป็นโมดูลง่าย ๆ ในการพิมพ์ใบแจ้งหนี้ 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 สำหรับคุณ
Amit Bera

ทำอย่างนี้ แต่ยังคงหน้าผู้ดูแลระบบสำหรับโมดูลดังกล่าวทั้งหมดจะแสดงหน้า 404
Wasiq Shahrukh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.