web-dev-qa-db-ja.com

インストールされているすべてのJoomla拡張機能とそのバージョンを取得する

私はJoomlaにはあまり詳しくありませんが、インストールされているすべての拡張機能とそのバージョン番号を可能であればリストするスクリプトを作成する必要があります。私はすでにWordPress、TYPO3、Drupalでこれを実行しましたが、Joomlaでは、これまでに見たことから、これはお尻のかなり大きな痛みのようです:

  • 3種類の拡張機能があり、3つの異なるフォルダにあります
  • 多くの拡張機能がインストール時に3つすべてのフォルダーに存在します(バージョン番号は通常、そのうちの1つだけにあります)
  • バージョン番号は定期的に文書化されていません。文書化されている場合、常に一貫しているとは限りません。たとえば、プラグイン「jNews」をダウンロードしました。ウェブサイトでは「8.5.1」と表示されていますが、モジュールフォルダーには次の内容の.xmlファイル「mod_jnews.xml」があります。

->

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

それは何ですか? 8.5.1? 1.5.0? 2.0? -

Joomlaをまったく使用したことがないので、これはかなり混乱しますが、私の誤解かもしれません。

私が実際に知りたいことは、次のとおりです。フォルダ構造とその中のファイルに基づいて、インストールされているすべてのJoomla拡張機能とそのバージョンを取得する信頼できる方法はありますか?または、スクリプト(私の場合はPython)を通じてこの情報を取得する他の方法はありますか?

4
R.G.

インストールされている拡張機能はすべて、データベースの#__extensions テーブル。したがって、単純なデータベースクエリを実行して、名前とマニフェストキャッシュ(バージョンを含む)を取得できます。

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

上記は、デフォルトのJoomla拡張機能を含む、すべてのプラグイン、コンポーネント、モジュール、テンプレート、ライブラリ、パッケージを取得することに注意してください。

もちろん、取得する拡張機能のタイプを変更することもできます。たとえば、コンポーネントのみを取得する場合は、上記のコードのクエリを次のように変更します。

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

お役に立てれば

4
Lodder