web-dev-qa-db-fra.com

Composant de mise à jour, où récupérer l'ancien numéro de version?

Joomla 3.x m'a montré que je peux utiliser un script d'installation qui ressemble à ceci:

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
    }
}

Tout va bien sauf la partie mise à jour. Je suppose que cela fonctionne lorsque j’ai déjà installé une version plus ancienne et que j’essaie d’installer la nouvelle version. Si oui, comment puis-je obtenir le numéro de version de l'ancienne version? Je ne veux pas utiliser les fichiers SQL de mise à niveau, ce n'est donc pas la solution.

1
inf3rno

Vous pouvez obtenir l'ancienne version comme suit:

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;
    }
}

J'ai ajouté quelques commentaires pour vous aider. J'espère que cela t'aides

1
Lodder