Cara memperbarui admin router modul kustom untuk patch SUPEE-6788

34

Saya tidak yakin cara memperbarui modul khusus agar berfungsi dengan tambalan SUPEE-6788 , petunjuknya tidak begitu jelas.

Berdasarkan tutorial Alan Storm , saya membuat modul sederhana di generator www.silksoftware.com/magento-module-creator/ untuk pengujian. Ini memiliki halaman khusus di admin yang berfungsi dengan baik, tetapi ketika saya menerapkan perbaikan yang diperlukan di SUPEE-6788, halaman admin menunjukkan 404 kesalahan.

URL dari halaman admin khusus adalah:

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

Berikut konfigurasi modul:

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

Ini controllernya:

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

Larutan

Saya mengganti <routers>bagian berdasarkan instruksi dari tambalan seperti ini (mungkin salah):

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

Tetapi sekarang URL hanya menunjukkan 404 error:

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

Bagaimana cara memperbaiki modul dengan benar untuk tambalan baru itu? Apakah saya hanya perlu memperbarui config.xmlatau apakah saya juga perlu mengubah URL halaman admin setelah menerapkan tambalan ini?

zitix
sumber

Jawaban:

42

Saya berhasil mengubah modul khusus saya untuk menggunakan cara baru Magento seperti yang direkomendasikan dengan patch 6788. Jadi saya berikan di sini sebagai referensi untuk yang lain, juga jawab pertanyaan di utas ini.

  1. Ubah ke router di file config.xml:

Sebelum:

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

Setelah

<admin>
    <routers>
        <adminhtml>
            <args>
                <modules>
                    <adminhello before="Mage_Adminhtml">Pulsestorm_Adminhello_Adminhtml</adminhello>
                </modules>
            </args>
        </adminhtml>
    </routers>
</admin>
  1. Ubah ke Kontroler

2.1.

Sebelum Path

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

Setelah jalan

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

2.2

Sebelum kelas

class Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController extends Mage_Adminhtml_Controller_Action 
{
..
}

Setelah kelas

class Pulsestorm_Adminhello_Adminhtml_Adminhello_AdminhellobackendController extends Mage_Adminhtml_Controller_Action
{
...
}
  1. Jika Anda memiliki file adminhtml.xml (berikan saja contoh seperti di bawah ini)

Sebelum

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

Setelah

<?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. Ubah kode Anda

Sebelum: mendapatkan URL

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

Setelah: mendapatkan URL

Mage::getUrl('adminhtml/adminhello_adminhellobackend/doSomething')
  1. Ubah file tata letak (jika Anda memiliki file tata letak, misalnya seperti di bawah ini)

Sebelum tata letak

<adminhello_adminhtml_adminhellobackend_index>
...
</adminhello_adminhtml_adminhellobackend_index>

Setelah tata letak

<adminhtml_adminhello_adminhellobackend_index>
...
</adminhtml_adminhello_adminhellobackend_index>
NgocDB
sumber
Luar biasa! Bekerja seperti pesona!
BENN1TH
17

Saya kehilangan jam mencari tahu ini. Hanya karena para Dev di Magento tidak mampu membuat konfigurasi yang dapat dimengerti, atau bahkan mendokumentasikan kode mereka dengan cara yang dapat dibaca oleh manusia.

Mari kita lihat config.xml terlebih dahulu

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

Seluruh arti dari Tag telah berubah. Tag di bawah "modul" hanyalah nama acak. Anda hanya perlu memastikan keunikannya untuk memastikan itu tidak ditimpa ketika XML dikompilasi. Itu memiliki pengaruh pada URL.

<admin_adminhello after= ..... >

Magento sekarang mengharapkan Anda untuk memindahkan kelas-kelas pengendali backend Anda ke subfolder baru yang disebut "adminhtml" Inilah sebabnya mengapa di config.xml Anda harus mengubah akhiran nama kelas dengan menambahkan _Adminhtml .

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

Dalam kasus Anda, folder tersebut akan berlokasi di

app / code / local / Pulsestorm / Adminhello / controllers / Adminhtml

Sekarang Masalah sebenarnya. Menggunakan sistem (lebih baik) lainnya, Anda memiliki ruang nama sendiri yang ditentukan dengan menggunakan Tag "FrontName". Anda tidak lagi memiliki kemewahan ini, jadi Anda perlu memastikan pengontrol Anda memiliki nama yang unik. Kalau tidak, itu akan bertentangan dengan Ekstensi lain. Jadi pengontrol yang menamakan sesuatu seperti "AdminController.php" tidak lagi bagus, Anda harus menjadikannya sesuatu yang spesifik untuk proyek, seperti dalam kasus Anda " AdminhelloController.php "

URL Anda kemudian akan dikaburkan ke

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

Jangan lupa untuk menyesuaikan nama pengontrol setelah mengganti nama atau memindahkan file

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

Dalam hal ini namanya adalah Pulsestorm_Adminhello_Adminhtml_AdminhellobackendController

Tentu saja Anda juga harus menyesuaikan URL apa pun yang digunakan dalam item menu dan formulir yang Anda gunakan di backend

Pastikan juga Anda mengaktifkan Mode Pengembang di file index.php . Saya perhatikan bahwa jika controller memiliki beberapa bug di dalamnya, Anda juga mendapatkan 404. Dengan mode Develeport Anda mendapatkan kesalahan Stacktrace.

Apa yang saya juga akan lakukan, hanya menulis log setelah controller dipanggil, hanya agar Anda melihat apakah metode controller diakses sama sekali.

/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();
    }
}
Leedch
sumber
dapatkah Anda memperluas jawaban Anda jika berhasil? Terima kasih!
Claudiu Creanga
Oke, sudah selesai ... semoga membantu
leedch
Heh, pernah menangkap respons pengembang Magento yang lucu kembali pada hari itu di forum MagentoCommerce lama untuk komentar " belum mendokumentasikan kode mereka ". "Tapi kodenya adalah dokumentasi sendiri ...". Umm tidak lulus uji perl pod dulu, jangan sekarang. Terima kasih atas penjelasan di atas, saya membutuhkannya.
Fiasco Labs
3
Magento sekarang mengharapkan Anda untuk memindahkan kelas-kelas pengendali backend Anda ke dalam subfolder baru yang disebut "adminhtml" - ini tidak benar, pengontrol dapat berada di mana pun Anda inginkan, itu hanya di bawah folder adminhtml dalam kasus ini karena Anda telah menetapkan rute awal dari Pulsestorm_Adminhello_Adminhtmldalam config.xml. Anda juga perlu memperbarui pegangan tata letak admin, dan panggilan untuk menghasilkan seperti admin URL getUrl().
Jonathan Hussey 3-15
@leedch Saya mencabut rambut saya mencoba mencari tahu mengapa modul ini tidak akan berfungsi ketika saya mengubah routing admin untuk SUPEE-6788 tidak peduli apa yang saya coba, saya mendapatkan kesalahan 404. Ini adalah modul sederhana untuk mencetak faktur html khusus. github.com/gaiterjones/magento-htmlinvoice
paj
8

Berikut adalah alat analisis / perbaikan untuk konflik ekstensi dan penyesuaian yang dihasilkan dari patch Magento SUPEE-6788.

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

Catatan: Sebelum menerapkan tambalan atau perbaikan tambalan, selalu disarankan untuk membuat cadangan situs web dan basis data Anda.

Anda hanya dapat menganalisis apa yang perlu diperbaiki.

Untuk menganalisis: Jalankan dari SSH:php -f fixSUPEE6788.php -- analyze

Ini akan menunjukkan file mana yang memiliki masalah dan bagaimana Anda dapat memperbaikinya. Ini tidak akan menerapkan perbaikan.

ATAU, Anda dapat menerapkan perubahan / perbaikan juga.

Untuk menerapkan perubahan: Jalankan dari SSH:php -f fixSUPEE6788.php -- fix

Ini akan menganalisis dan menerapkan perbaikan secara otomatis.

Mukesh Chapagain
sumber
Bagus Bagikan +1 untuk Anda
Amit Bera
Apakah ini tetapi halaman admin masih untuk semua modul tersebut menunjukkan halaman 404
Wasiq Shahrukh