如何从Joomla获得组件版本?

时间:2013-10-10 10:17:44

标签: joomla joomla2.5 joomla-extensions

是否有一些方法可以通过它的名称获取组件版本?我尝试了很多例子,但没有发现任何可行的例子。像JComponentHelper::getParams('com_mycomponent')->get('version')这样的东西不起作用,因为它从jos_extensions.params行检索值。我的组件版本仅在jos_extensions.manifest_cache行...

7 个答案:

答案 0 :(得分:5)

您可以使用以下内容:

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 +:

截至此答案后2周,

getXML已被弃用。相反,请使用SimpleXML


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

希望这有帮助

答案 1 :(得分:1)

如果您要查找Joomla网站中所有组件的列表,可以使用Extension Manager找到它们 - >管理并选择类型过滤器“组件”。这将为您提供一个列表,其中包含显示所有组件版本的“版本”列。 这是没有编码的原始问题的答案。

答案 2 :(得分: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'];
}

答案 3 :(得分:0)

基于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'];

答案 4 :(得分:0)

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); 
}

答案 5 :(得分:0)

要充分利用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+可能。

答案 6 :(得分:0)

Joomla 3.2 +:

由于不赞成使用getXML,因此可以通过以下方式使用SimpleXML:

$xml = simplexml_load_file(JPATH_COMPONENT_ADMINISTRATOR . '/wrapper.xml');
$version = $xml->version;