ti-enxame.com

Obtenha todas as extensões Joomla instaladas e sua versão

Eu não estou realmente familiarizado com o Joomla, mas preciso escrever um script que deve listar todas as extensões instaladas e o número da versão, se possível. Eu já fiz isso no WordPress, TYPO3 e Drupal, mas no Joomla isso parece ser uma grande dor de cabeça pelo que vi até agora porque:

  • existem três tipos de extensões, localizados em três pastas diferentes
  • muitas extensões estão presentes nas três pastas após a instalação (embora o número da versão seja geralmente encontrado em apenas uma delas)
  • o número da versão não é documentado regularmente e, se for, nem sempre é consistente. Por exemplo, eu baixei o plugin "jNews". No site, diz "8.5.1", mas na pasta modules existe um arquivo .xml "mod_jnews.xml" com o seguinte conteúdo:

->

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

Então o que é? 8.5.1? 1.5.0? 2.0? -

Não tendo nenhuma experiência com o Joomla, acho isso bastante confuso, embora também possa ser um mal-entendido da minha parte.

No entanto, o que eu realmente quero saber é: Existe uma maneira confiável de obter todas as extensões do Joomla instaladas + sua versão apenas com base na estrutura de pastas e nos arquivos contidos? Ou qualquer outra maneira de obter essas informações através de um script (Python no meu caso)?

4
R.G.

Qualquer extensão instalada é armazenada no banco de dados, no #__extensions tabela. Portanto, você pode executar uma consulta simples ao banco de dados para obter o nome e o cache do manifesto (que contém a versão):

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

Observe que o acima irá obter todos os plugins, componentes, módulos, modelos, bibliotecas e pacotes, incluindo extensões padrão do Joomla.

É claro que você pode alterar os tipos de extensões que deseja obter. Por exemplo, se você deseja obter apenas componentes, altere a consulta no código acima para isso:

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

Espero que isto ajude

4
Lodder