web-dev-qa-db-fra.com

Obtenez toutes les extensions Joomla installées et leur version

Je ne connais pas vraiment Joomla, mais je dois écrire un script censé répertorier toutes les extensions installées et leur numéro de version, si possible. J'ai déjà fait cela pour WordPress, TYPO3 et Drupal, mais dans Joomla, cela semble être une très grosse douleur dans le cul de ce que j'ai vu jusqu'à présent parce que:

  • il existe trois types d'extensions, situés dans trois dossiers différents
  • de nombreuses extensions sont présentes dans les trois dossiers lors de l’installation (bien que le numéro de version ne soit généralement trouvé que dans l’un d’eux)
  • le numéro de version n'est pas documenté régulièrement, et s'il l'est, il n'est pas toujours cohérent. Par exemple, j'ai téléchargé le plugin "jNews". Sur le site Web, il est indiqué "8.5.1", mais dans le dossier des modules, vous trouverez un fichier .xml "mod_jnews.xml" avec le contenu suivant:

->

<extension type="module" version="1.5.0" ...>
...
<version>2.0</version>
...
</extension>

Alors c'est quoi? 8.5.1? 1.5.0? 2,0? -

N'ayant aucune expérience de Joomla, je trouve cela assez déroutant, bien que cela puisse aussi être un malentendu de ma part.

Ce que je veux réellement savoir, c’est cependant: existe-t-il un moyen fiable d’obtenir toutes les extensions Joomla installées + leur version simplement en fonction de la structure des dossiers et des fichiers qu’ils contiennent? Ou tout autre moyen d'obtenir cette information via un script (Python dans mon cas)?

4
R.G.

Toute extension installée est stockée dans la base de données, dans le fichier #__extensions table. Vous pouvez donc exécuter une requête de base de données simplement pour obtenir le nom et le cache de manifeste (qui contient la version):

$db = JFactory::getDbo();

$query = $db->getQuery(true);

$query->select($db->quoteName(array('name', 'manifest_cache')))
      ->from($db->quoteName('#__extensions'));

$db->setQuery($query);

$results = $db->loadObjectList();

foreach ($results as $extension)
{
    $decode = json_decode($extension->manifest_cache);
    echo $extension->name . ' : ' . $decode->version . '<br>';
}

Notez que ce qui précède obtiendra tous les plugins, composants, modules, modèles, bibliothèques et packages, y compris les extensions Joomla par défaut.

Vous pouvez bien sûr changer les types d'extensions que vous souhaitez obtenir. Par exemple, si vous souhaitez uniquement obtenir des composants, modifiez la requête dans le code ci-dessus en ceci:

$query->select($db->quoteName(array('name', 'manifest_cache', 'type')))
      ->from($db->quoteName('#__extensions'))
      ->where($db->quoteName('type') . ' = ' . $db->quote('component'));

J'espère que cela t'aides

4
Lodder