इंस्टॉलेशन मॉड्यूल


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. कुछ एक्सटेंशन प्रदाता, SQL-Query प्रदान करते हैं जो डेटाबेस को साफ़ करता है।

  2. हमारे हैकथॉन में से एक पर एक समूह ने एक बार एक मॉड्यूल लिखा था जो मैगनेटो कोर फ़ंक्शन को अनइंस्टॉल स्क्रिप्ट का उपयोग करने योग्य बनाता है: https://github.com/magento-hackathon/MageTrashApp

दुर्भाग्य से आपको एक और मॉड्यूल की आवश्यकता होती है, जो आपके लिए ऐसा करता है, इसलिए आप 1 के साथ जा सकते हैं।


1

मुझे लगता है कि एक स्व-विनाश फ़ाइल बनाना संभव होगा। मैं कुछ इस तरह की कल्पना करूंगा:

एक्सटेंशन कॉन्फ़िगरेशन पृष्ठ से उपयोगकर्ता क्लिक "एक्सटेंशन की स्थापना रद्द करें और सभी डेटा हटाएं" (निश्चित रूप से पहले बटन क्लिक करने के बाद पुष्टि करने के लिए, यह स्थायी है)।

अब कार्यक्षमता के लिए, यदि आप पहले मॉड्यूल की सभी फ़ाइलों को हटा सकते हैं, तो अपने आप को हटा दें unlink(__FILE__)

एक और विचार थोड़ा हैकिश होगा, लेकिन कहते हैं कि आपने गतिशील रूप से एक sql इंस्टॉल स्क्रिप्ट बनाई है, जो वास्तव में एक अनइंस्टॉल स्क्रिप्ट थी। बैकएंड पर आपकी कार्रवाई आपके मॉड्यूल के संस्करण को अपडेट करेगी, अनइंस्टॉल स्क्रिप्ट के साथ sql फ़ाइल को इंजेक्ट करेगी, जिसे बाद में अगले मैज लोड पर चलाया जाएगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.