it-swarm.it

Ottieni tutte le estensioni di Joomla installate e la loro versione

Non ho molta familiarità con Joomla, ma devo scrivere uno script che dovrebbe elencare tutte le estensioni installate e il loro numero di versione, se possibile. L'ho già fatto per WordPress, TYPO3 e Drupal, ma in Joomla questo sembra essere un bel dolore nel culo da quello che ho visto finora perché:

  • ci sono tre tipi di estensioni, situati in tre diverse cartelle
  • molte estensioni sono presenti in tutte e tre le cartelle al momento dell'installazione (sebbene il numero di versione si trovi di solito in una sola di esse)
  • il numero di versione non è documentato regolarmente e, se lo è, non è sempre coerente. Ad esempio ho scaricato il plug-in "jNews". Sul sito web, si dice "8.5.1" ma nella cartella dei moduli c'è un file .xml "mod_jnews.xml" con il seguente contenuto:

->

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

Quindi, cos'è? 8.5.1? 1.5.0? 2.0? -

Non avendo alcuna esperienza con Joomla, trovo questo piuttosto confuso, anche se può anche essere un malinteso da parte mia.

Quello che in realtà voglio sapere, però, è: esiste un modo affidabile per ottenere tutte le estensioni di Joomla installate + la loro versione basata solo sulla struttura delle cartelle e sui file all'interno? O un altro modo per ottenere queste informazioni tramite uno script (Python nel mio caso)?

4
R.G.

Qualsiasi estensione installata, viene archiviata nel database, nel #__extensions tavolo. Quindi puoi eseguire una semplice query di database per ottenere il nome e la cache manifest (che contiene la versione):

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

Nota che quanto sopra otterrà tutti i plugin, i componenti, i moduli, i modelli, le librerie e i pacchetti, comprese le estensioni predefinite di Joomla.

Ovviamente puoi cambiare i tipi di estensioni che desideri ottenere. Ad esempio, se si desidera ottenere solo componenti, modificare la query nel codice sopra in questo:

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

Spero che sia di aiuto

4
Lodder