Mô-đun gỡ cài đặt


16

Tôi đã tạo một tiện ích mở rộng tạo thuộc tính thể loại khi cài đặt lần đầu tiên. Nhưng bây giờ khi tôi tắt / Gỡ cài đặt tiện ích mở rộng, tôi nhận được thông báo lỗi trên trang "Quản lý danh mục".

Tôi biết rằng khi Tiện ích mở rộng bị vô hiệu hóa thông qua kết nối Magento, chỉ các tệp bị xóa và không có gì bị xóa khỏi cơ sở dữ liệu.

Vì vậy, để khắc phục vấn đề này, chúng tôi có thể cung cấp một nút để xóa các mục cơ sở dữ liệu có thể được đặt trong phần cấu hình hệ thống cùng với các cài đặt mở rộng khác. Và khi quản trị viên nhấp vào nút đó, tất cả các mục cơ sở dữ liệu sẽ bị xóa cùng với các tệp được sử dụng bởi tiện ích mở rộng.

Xin vui lòng cho tôi biết nếu giải pháp trên sẽ làm việc? hoặc có giải pháp nào tốt hơn để xóa các mục không mong muốn khỏi cơ sở dữ liệu trong khi gỡ cài đặt tiện ích mở rộng.

Câu trả lời:


5

Bạn có thể tạo một tập lệnh shell gỡ cài đặt trong shell/thư mục. Tệp đó có thể xóa tệp, thư mục, bảng cơ sở dữ liệu, core_resourcemục nhập và thuộc tính khỏi EAV.

Nó sẽ trông giống như thế này:

<?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();

Bạn có thể chạy nó trên dòng lệnh với:

php shell/uninstall.php

Khi đã xong, bạn có thể xóa tệp shell.


6

Không có giải pháp.

Vấn đề là, gỡ cài đặt một mô-đun có nghĩa là xóa nó, nhưng khi nó bị xóa, không còn gì có thể gỡ cài đặt công cụ.

  1. Một số nhà cung cấp tiện ích mở rộng, cung cấp SQL-Query để xóa cơ sở dữ liệu.

  2. Một nhóm trên một trong những hackathon của chúng tôi đã từng viết một mô-đun làm cho chức năng cốt lõi của magento sử dụng các tập lệnh gỡ cài đặt có thể sử dụng được: https://github.com/magento-hackathon/MageTrashApp

Thật không may, bạn cần một mô-đun khác, điều này thực hiện cho bạn, vì vậy bạn có thể đi với 1.


1

Tôi cho rằng có thể tạo một tệp tự hủy. Tôi sẽ hình dung một cái gì đó như thế này:

Người dùng nhấp vào "Gỡ cài đặt tiện ích mở rộng và xóa tất cả dữ liệu" khỏi trang cấu hình tiện ích mở rộng (tất nhiên sẽ nhắc xác nhận sau khi nhấp vào nút đầu tiên, ĐÂY LÀ SỰ THẬT).

Bây giờ đối với chức năng, nếu bạn có thể xóa tất cả các tệp của mô-đun trước, sau đó xóa chính nó bằng unlink(__FILE__).

Một ý tưởng khác sẽ là một chút hackish, nhưng nói rằng bạn tự động tạo ra một kịch bản cài đặt sql, đó thực sự là một kịch bản gỡ cài đặt. Hành động của bạn vào phần phụ trợ sẽ cập nhật phiên bản mô-đun của bạn, thêm tệp sql với tập lệnh gỡ cài đặt, sau đó sẽ được chạy trên tải Mage tiếp theo.

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.