আনইনস্টলেশন মডিউল


16

আমি একটি এক্সটেনশন তৈরি করেছি যা প্রথমবার ইনস্টল করার সময় একটি বিভাগের বৈশিষ্ট্য তৈরি করে। তবে এখন যখন আমি এক্সটেনশানটি অক্ষম / আনইনস্টল করি, তখন আমি "বিভাগগুলি পরিচালনা করুন" পৃষ্ঠায় একটি ত্রুটি বার্তা পাই।

আমি জানি যে যখন ম্যাজেন্টো সংযোগের মাধ্যমে কোনও এক্সটেনশান অক্ষম করা হয় তখন কেবলমাত্র ফাইল মুছে ফেলা হয় এবং ডাটাবেস থেকে কিছুই মুছে ফেলা হয় না।

সুতরাং, এই সমস্যাটি কাটিয়ে উঠতে আমরা ডেটাবেস এন্ট্রিগুলি মুছতে একটি বোতাম সরবরাহ করতে পারি যা এক্সটেনশনের অন্যান্য সেটিংসের পাশাপাশি সিস্টেম কনফিগারেশন বিভাগের আওতায় রাখা যেতে পারে। এবং অ্যাডমিন সেই বোতামটিতে ক্লিক করলে এক্সটেনশন দ্বারা ব্যবহৃত ফাইলগুলির সাথে সমস্ত ডাটাবেস এন্ট্রি মুছে ফেলা উচিত।

উপরের সমাধানটি কাজ করবে কিনা দয়া করে আমাকে জানান? বা এক্সটেনশন আনইনস্টল করার সময় ডাটাবেস থেকে অযাচিত প্রবেশগুলি মুছতে আরও ভাল কোনও সমাধান আছে।

উত্তর:


5

আপনি একটি আনইনস্টল শেল স্ক্রিপ্ট তৈরি করতে পারেন যা shell/ফোল্ডারে থাকে। এই ফাইলটি core_resourceEAV থেকে ফাইল, ডিরেক্টরি, ডাটাবেস সারণি, এন্ট্রি এবং বৈশিষ্ট্যগুলি সরিয়ে ফেলতে পারে।

এটি দেখতে এমন কিছু লাগবে:

<?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. কিছু এক্সটেনশন প্রদানকারী, একটি এসকিউএল-ক্যোয়ারী সরবরাহ করে যা ডেটাবেস সাফ করে।

  2. আমাদের হ্যাকাথনের একটি গ্রুপ একবার মডিউল লিখেছিল যা আনইনস্টল স্ক্রিপ্টগুলি ব্যবহারের উপযোগী করে তোলে: https://github.com/magento-hackathon/MageTrashApp

দুর্ভাগ্যক্রমে আপনার আর একটি মডিউল প্রয়োজন, যা এটি আপনার জন্য করে, সুতরাং আপনি 1 সহ যেতে পারেন।


1

আমি মনে করি একটি স্ব-ধ্বংসাত্মক ফাইল তৈরি করা সম্ভব হবে। আমি এই জাতীয় কিছু কল্পনা করব:

এক্সটেনশান কনফিগারেশন পৃষ্ঠা থেকে ব্যবহারকারী ক্লিকগুলি "আনইনস্টল করুন এবং সমস্ত ডেটা মুছুন" (অবশ্যই প্রথম বোতাম ক্লিকের পরে এটি নিশ্চিত করার জন্য অনুরোধ করুন, এটি স্থায়ী)।

কার্যকারিতাটির জন্য, আপনি যদি প্রথমে মডিউলটির সমস্ত ফাইল মুছতে পারেন তবে তার সাথে নিজেকে মুছুন unlink(__FILE__)

আরেকটি ধারণাটি কিছুটা হ্যাকিশ হবে, তবে আপনি বলছেন যে আপনি গতিশীলভাবে একটি স্কিল ইনস্টল স্ক্রিপ্ট তৈরি করেছেন, এটি আসলে একটি আনইনস্টল স্ক্রিপ্ট ছিল। ব্যাকএন্ডে করা আপনার ক্রিয়াকলাপটি আপনার মডিউলটির সংস্করণ আপডেট করবে, স্কাইল ফাইলটিকে আনইনস্টল স্ক্রিপ্টের সাথে ইনজেক্ট করবে, যা পরবর্তী ম্যাজ লোডে চালানো হবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.