1

有什么方法可以通过名称获取组件版本吗?我尝试了很多示例,但没有找到任何可行的示例。之类的东西JComponentHelper::getParams('com_mycomponent')->get('version')不起作用,因为它从jos_extensions.params行中检索值。我的组件版本仅jos_extensions.manifest_cache在行中...

4

7 回答 7

6

您可以使用以下内容:

Joomla 2.5:

$parser = JFactory::getXMLParser('Simple');
$xml = JPATH_SITE .'/components/com_wrapper/wrapper.xml';
$parser->loadFile($xml);
$doc = $parser->document;
$element = $doc->getElementByPath('version');
$version = $element->data();

echo $version;

Joomla 3.x(平台 13.3 及以下)

$xml = JFactory::getXML(JPATH_SITE .'/components/com_wrapper/wrapper.xml');
$version = (string)$xml->version;

echo $version;

Joomla 3.2+:

getXML在此答案后的 2 周内已弃用。相反,使用SimpleXML


显然,这是 Wrapper 组件的示例,因此请将路径更改为适合您需要的任何内容。

希望这可以帮助

于 2013-10-10T10:45:21.777 回答
2

如果您正在寻找 Joomla 站点中所有组件的列表,您可以使用扩展管理器 -> 管理并选择类型过滤器“组件”来找到它们。这将为您提供一个带有版本列的列表,其中显示所有组件的版本。这是您原始问题的答案,无需编码。

于 2013-10-19T20:00:59.183 回答
1

基于 CoalaWeb 的回答,但代码更少(使用框架中的更多代码):

/** @var JTableExtension $extension */
$extension = JTable::getInstance('extension');
$id = $extension->find(array('element' => $extension));
$extension->load($id);
$componentInfo = json_decode($extension->manifest_cache, true);

return $componentInfo['version'];
于 2015-03-02T13:05:31.500 回答
1

Joomla 1.5、2.5、3.X。

我们为 Joomla 1.5 (com_ponent.xml) 和 2.5、3.X (_manifest.xml) 版本使用不同的 XML 文件。使用SimpleXML

public static function getVbssoVersion() {
   $xml_path = JPATH_ADMINISTRATOR . '/components/com_ponent/';
   $xml_path .= (defined('JVER') && JVER == '1.5') ? 'com_ponent.xml' : '_manifest.xml';
   $xml_obj = new SimpleXMLElement(file_get_contents($xml_path));

   return strval($xml_obj->version); 
}
于 2016-01-23T13:58:51.107 回答
1

要充分利用 Joomla API,请使用 JComponentHelper、\Joomla\Registry\Registry 和 JTable 类:

$component = \JComponentHelper::getComponent('com_myextension');
$extension = \JTable::getInstance('extension');
$extension->load($component->id);
$manifest = new \Joomla\Registry\Registry($extension->manifest_cache);

echo $manifest->get('version');

这主要适用于较新的 3.x 版本的 Joomla;3.6+ 可能。

于 2017-10-23T20:10:45.493 回答
0

嗨,我使用此函数根据元素从扩展表中返回版本(我发现它比名称更可靠),但您可以轻松地将元素替换为名称。

我在插件中有这个,该函数只需要元素($ext)来检查表中的当前扩展名。

function extversion($ext) {
    $db = JFactory::getDbo();
    $query = $db->getQuery(true);
    $query->select('manifest_cache');
    $query->from($db->quoteName('#__extensions'));
    $query->where('element = "' . $ext . '"');
    $db->setQuery($query);

    $manifest = json_decode($db->loadResult(), true);
    return $manifest['version'];
}
于 2015-01-12T13:49:02.280 回答
0

Joomla 3.2+:

由于不推荐使用 getXML,因此您可以通过以下方式使用 SimpleXML:

$xml = simplexml_load_file(JPATH_COMPONENT_ADMINISTRATOR . '/wrapper.xml');
$version = $xml->version;
于 2019-07-29T15:41:28.393 回答