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