it-swarm.com.de

Update-Komponente, woher die alte Versionsnummer abrufen?

Ich habe mit Joomla 3.x festgestellt, dass ich ein Installationsskript wie das folgende verwenden kann:

class Com_ExampleInstallerScript
{
    public function install($adapter) 
    {
        // create tables
    }

    public function uninstall($adapter) 
    {
        // remove tables
    }

    public function update($adapter) 
    {
        // alter tables
    }

    public function preflight($route, $adapter) 
    {
        // stop service, probably creating a lock file
    }

    public function postflight($route, $adapter) 
    {
        // start service, probably removing a lock file
    }
}

Bis auf den Update-Teil ist alles in Ordnung. Ich vermute, dies wird ausgeführt, wenn ich bereits eine ältere Version installiert habe und versuche, die neue Version zu installieren. Wenn ja, wie kann ich die Versionsnummer der alten Version ermitteln? Ich möchte keine Upgrade-SQL-Dateien verwenden, das ist also nicht die Antwort.

1
inf3rno

Sie können die alte Version wie folgt herunterladen:

class Com_ExampleInstallerScript
{
    protected $release = '';

    protected $paramTable = '#__modules';

    protected $extension = 'mod_mymodule';

    public function preflight($type, $parent)
    {
        // Module manifest file version
        $this->release = $parent->get('manifest')->version;

        // Abort if the module being installed is not newer than the currently installed version
        if (strtolower($type) == 'update')
        {
            $manifest   = $this->getItemArray('manifest_cache', '#__extensions', 'element', JFactory::getDbo()->quote($this->extension));
            $oldRelease = $manifest['version'];

            if (version_compare($this->release, $oldRelease, '<'))
            {
                JFactory::getApplication()->enqueueMessage(JText::sprintf('YOU_CANT_UPDATE_TO_A_LOWER_VERSION', $oldRelease, $this->release), 'error');
                return false;
            }
            if (version_compare($oldRelease, $this->release, '<'))
            {
                // If old version is the same as or less than 1.0.1
                if (version_compare($oldRelease, '1.0.1', '<='))
                {
                    // DO something here
                }
            }
        }
        return true;
    }
}

Ich habe ein paar Kommentare hinzugefügt, um zu helfen. Hoffe das hilft

1
Lodder