โมดูลการถอนการติดตั้ง


16

ฉันสร้างส่วนขยายที่สร้างแอตทริบิวต์หมวดหมู่เมื่อติดตั้งครั้งแรก แต่ตอนนี้เมื่อฉันปิดการใช้งาน / ถอนการติดตั้งส่วนขยายฉันได้รับข้อความแสดงข้อผิดพลาดในหน้า "จัดการหมวดหมู่"

ฉันรู้ว่าเมื่อส่วนขยายถูกปิดใช้งานผ่านการเชื่อมต่อ Magento เฉพาะไฟล์ที่ถูกลบและไม่มีการลบอะไรจากฐานข้อมูล

ดังนั้นเพื่อที่จะเอาชนะปัญหานี้เราสามารถให้ปุ่มเพื่อลบรายการฐานข้อมูลที่สามารถวางไว้ในส่วนการกำหนดค่าระบบพร้อมกับการตั้งค่าส่วนขยายอื่น ๆ และเมื่อผู้ดูแลระบบคลิกที่ปุ่มนั้นรายการฐานข้อมูลทั้งหมดควรถูกลบพร้อมกับไฟล์ที่ใช้โดยส่วนขยาย

โปรดแจ้งให้เราทราบว่าวิธีการแก้ปัญหาข้างต้นจะทำงานอย่างไร หรือมีวิธีแก้ปัญหาที่ดีกว่าเพื่อลบรายการที่ไม่ต้องการออกจากฐานข้อมูลขณะถอนการติดตั้งส่วนขยาย

คำตอบ:


5

คุณสามารถสร้างเชลล์สคริปต์ถอนการติดตั้งที่อยู่ในshell/โฟลเดอร์ ไฟล์นั้นสามารถลบไฟล์ไดเร็กทอรีตารางฐานข้อมูลcore_resourceรายการและแอ็ตทริบิวต์จาก EAV

มันจะมีลักษณะเช่นนี้:

<?php

include_once 'abstract.php';

class Namespace_Module_Uninstall extends Mage_Shell_Abstract {

    public function run() {
        $this->removeDirectories();
        $this->removeAttributes();
    }

    /**
     * Remove file system files here.
     */
    public function removeDirectories() {
        $file = new Varien_Io_File();

        $file->rmdir(BP . DS . 'app/code/local/My/', true);
        $file->rm(BP . DS . 'app/etc/modules/My_Module.xml');
    }

    /**
     * Remove any attributes here
     */
    public function removeAttributes() {
        $installer = $this->_getSetup();

        $installer->startSetup();

        // repeat this for any other attributes you wish to uninstall
        $installer->removeAttribute('catalog_product', 'your_attribute');

        $installer->endSetup();
    }

    /**
     * Return catalog/customer/core or whichever resource setup class you need
     *
     * @return Mage_Catalog_Model_Resource_Setup
     */
    protected function _getSetup() {
        return Mage::getResourceSingleton('catalog/setup', 'default_setup');
    }
}

$uninstall = new Namespace_Module_Uninstall();

$uninstall->run();

คุณสามารถรันบนบรรทัดคำสั่งด้วย:

php shell/uninstall.php

เมื่อเสร็จแล้วคุณสามารถลบไฟล์เชลล์เองได้


6

ไม่มีวิธีแก้ไข

ปัญหาคือการถอนการติดตั้งโมดูลหมายถึงการลบ แต่เมื่อมันถูกลบไม่มีอะไรมากที่สามารถถอนการติดตั้งเนื้อหา

  1. ผู้ให้บริการส่วนขยายบางรายระบุ SQL-Query ซึ่งล้างฐานข้อมูล

  2. กลุ่มหนึ่งในหนึ่งในแฮ็กเกอร์ของเราเคยเขียนโมดูลซึ่งทำให้ฟังก์ชั่นหลักของวีโอไอพีในการใช้สคริปต์ถอนการติดตั้งสามารถใช้งานได้: https://github.com/magento-hackathon/MageTrashApp

น่าเสียดายที่คุณต้องการโมดูลอื่นซึ่งทำเพื่อคุณดังนั้นคุณอาจไปกับ 1


1

ฉันคิดว่ามันเป็นไปได้ที่จะสร้างไฟล์ทำลายตนเอง ฉันจะจินตนาการบางอย่างเช่นนี้

ผู้ใช้คลิก "ถอนการติดตั้งส่วนขยายและลบข้อมูลทั้งหมด" จากหน้าการตั้งค่าส่วนขยาย (แน่นอนให้ยืนยันหลังจากคลิกปุ่มแรกนี่คือถาวร)

unlink(__FILE__)ตอนนี้สำหรับการทำงานถ้าคุณสามารถลบไฟล์ทั้งหมดของโมดูลแรกแล้วลบตัวเองด้วย

ความคิดอื่นอาจเป็นการแฮ็กเล็กน้อย แต่สมมติว่าคุณสร้างสคริปต์การติดตั้งแบบ sql ซึ่งเป็นสคริปต์การถอนการติดตั้งแบบไดนามิก การกระทำของคุณในแบ็กเอนด์จะอัปเดตเวอร์ชันของโมดูลของคุณฉีดไฟล์ sql ด้วยสคริปต์ถอนการติดตั้งซึ่งจะทำงานในการโหลด Mage ครั้งต่อไป

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