Cách cập nhật bộ định tuyến quản trị của mô-đun tùy chỉnh để vá SUPEE-6788


34

Tôi không chắc chắn cách cập nhật các mô-đun tùy chỉnh để hoạt động với bản vá SUPEE-6788 , hướng dẫn không rõ ràng lắm.

Dựa trên hướng dẫn của Alan Storm , tôi đã tạo ra một mô-đun đơn giản trong trình tạo www.silksoftware.com/magento-module-creator/ để thử nghiệm. Nó có trang tùy chỉnh trong quản trị viên hoạt động hoàn toàn tốt, nhưng khi tôi áp dụng các bản sửa lỗi bắt buộc trong SUPEE-6788, trang quản trị hiển thị lỗi 404.

URL của trang quản trị tùy chỉnh là:

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

Đây là cấu hình của mô-đun:

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

Đây là bộ điều khiển:

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendContoder.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();
    }
}

Dung dịch

Tôi đã thay thế <routers>phần dựa trên hướng dẫn từ bản vá như thế này (có thể không chính xác):

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

Nhưng bây giờ URL chỉ hiển thị 404 error:

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

Làm thế nào để sửa mô-đun chính xác cho bản vá mới đó? Tôi chỉ cần cập nhật config.xmlhay tôi cũng cần thay đổi URL của trang quản trị sau khi áp dụng bản vá này?

Câu trả lời:


42

Tôi đã quản lý để thay đổi mô-đun tùy chỉnh của mình để sử dụng Magento theo cách mới như được đề xuất với bản vá 6788. Vì vậy, tôi đưa ra đây làm tài liệu tham khảo cho người khác, cũng trả lời câu hỏi trong chuỗi này.

  1. Thay đổi thành bộ định tuyến trong tệp config.xml:

Trước:

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

Sau

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. Thay đổi thành Bộ điều khiển

2.1.

Trước đường dẫn

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

Sau con đường

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

2.2

Trước giờ học

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

Sau giờ học

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Nếu bạn có tệp adminhtml.xml (chỉ cần làm ví dụ như bên dưới)

Trước

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

Sau

<?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. Thay đổi mã của bạn

Trước: nhận URL

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

Sau: nhận URL

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Thay đổi trong tệp bố cục (nếu bạn có tệp bố cục, ví dụ như bên dưới)

Trước khi bố trí

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

Sau khi bố trí

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>

Xuất sắc! Làm việc như người ở!
BENN1TH

17

Tôi đã mất hàng giờ để tìm ra điều này. Chỉ vì các Dev tại Magento không có khả năng tạo ra một cấu hình dễ hiểu, hoặc thậm chí là ghi lại mã của chúng theo cách mà con người có thể đọc được.

Chúng ta hãy có một cái nhìn tại config.xml đầu tiên

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

Toàn bộ ý nghĩa của Thẻ đã thay đổi. Thẻ trong "mô-đun" chỉ là một tên ngẫu nhiên. bạn chỉ cần đảm bảo tính duy nhất của nó để đảm bảo nó không bị ghi đè khi XML được biên dịch. Nó có ảnh hưởng đến URL.

<admin_adminhello after= ..... >

Bây giờ Magento hy vọng bạn chuyển các lớp trình điều khiển phụ trợ của mình sang một thư mục con mới có tên là "adminhtml" Đây là lý do tại sao trong tệp config.xml bạn phải thay đổi hậu tố tên lớp bằng cách thêm _Adminhtml .

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

Trong trường hợp của bạn, thư mục sẽ được đặt tại

ứng dụng / mã / cục bộ / Pulsestorm / adminhello / bộ điều khiển / adminhtml

Bây giờ là vấn đề thực sự. Sử dụng hệ thống khác (tốt hơn), bạn có không gian tên của riêng mình được xác định bằng cách sử dụng Thẻ "FrontName". Bạn không còn sự xa xỉ này nữa, vì vậy bạn cần đảm bảo bộ điều khiển của bạn có một tên duy nhất. Nếu không, nó sẽ xung đột với các Phần mở rộng khác. Vì vậy, các bộ điều khiển được đặt tên như "AdminControll.php" không còn tốt nữa, bạn phải làm cho nó một dự án cụ thể, như trong trường hợp của bạn " adminhelloControll.php "

URL của bạn sau đó sẽ chagne đến

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

Đừng quên điều chỉnh tên lớp của bộ điều khiển sau khi đổi tên hoặc di chuyển tệp

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

Trong trường hợp này, tên sẽ là Pulsestorm_Adminhello_Adminhtml_AdminhellobackendControll

Tất nhiên, bạn cũng phải điều chỉnh bất kỳ URL nào được sử dụng trong các mụcbiểu mẫu trình đơn mà bạn sử dụng trong phần phụ trợ

Đồng thời đảm bảo rằng bạn bật Chế độ nhà phát triển trong tệp index.php . Tôi nhận thấy rằng nếu bộ điều khiển có một số lỗi trong đó, bạn cũng nhận được 404. Với chế độ Develeport, bạn sẽ gặp lỗi Stacktrace.

Những gì tôi cũng sẽ làm, chỉ là viết một bản ghi một khi bộ điều khiển được gọi, để bạn thấy nếu phương thức bộ điều khiển được truy cập.

/app/code/local/Pulsestorm/Adminhello/controllers/Adminhtml/AdminhellobackendContoder.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();
    }
}

bạn có thể mở rộng câu trả lời của bạn nếu nó hoạt động? cảm ơn!
Claudiu Creanga

Ok, xong ... hy vọng nó có ích
leedch

Heh, một lần bắt gặp phản hồi của nhà phát triển Magento vui nhộn trở lại trong ngày trên các diễn đàn Thương mại Magento cũ đối với nhận xét " thậm chí ghi lại mã của họ ". "Nhưng mã là tài liệu tự ...". Umm đã không vượt qua bài kiểm tra perl pod sau đó, không phải bây giờ. Cảm ơn lời giải thích ở trên, tôi cần nó.
Phòng thí nghiệm Fiasco

3
Bây giờ Magento mong bạn chuyển các lớp trình điều khiển phụ trợ của mình sang một thư mục con mới có tên là "adminhtml" - điều này không đúng, bộ điều khiển có thể ở bất cứ đâu bạn muốn, nó chỉ nằm trong thư mục adminhtml trong trường hợp này vì bạn đã xác định tuyến bắt đầu của Pulsestorm_Adminhello_Adminhtmltrong config.xml. Bạn cũng cần cập nhật bất kỳ xử lý bố cục quản trị viên nào và các cuộc gọi để tạo URL của quản trị viên như thế nào getUrl().
Jonathan Hussey

@leedch Tôi đang nhổ tóc cố gắng tìm hiểu tại sao mô-đun này không hoạt động khi tôi thay đổi định tuyến quản trị viên cho SUPEE-6788 cho dù tôi có cố gắng gì thì tôi cũng gặp lỗi 404. Đây là một mô-đun đơn giản để in hóa đơn html tùy chỉnh. github.com/gaiterjones/magento-htmlinvoice
pyjama

8

Đây là một công cụ phân tích / sửa lỗi cho các xung đột mở rộng và tùy chỉnh do bản vá Magento SUPEE-6788.

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

Lưu ý: Trước khi áp dụng bất kỳ bản vá hoặc sửa lỗi, luôn luôn nên sao lưu trang web và cơ sở dữ liệu của bạn.

Bạn chỉ có thể phân tích những gì cần sửa chữa.

Để phân tích: Chạy từ SSH:php -f fixSUPEE6788.php -- analyze

Điều này sẽ cho thấy tập tin nào có vấn đề và làm thế nào bạn có thể sửa chúng. Điều này sẽ không áp dụng sửa chữa.

HOẶC, bạn cũng có thể áp dụng các thay đổi / sửa chữa.

Để áp dụng các thay đổi: Chạy từ SSH:php -f fixSUPEE6788.php -- fix

Điều này sẽ phân tích và áp dụng sửa chữa tự động.


Chia sẻ tốt +1 cho bạn
Amit Bera

Đã làm điều này nhưng vẫn có các trang quản trị cho tất cả các mô-đun như vậy đang hiển thị trang 404
Wasiq Shahrukh
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.