有没有办法按名称获取组件版本?我尝试了很多例子,但没有找到任何可行的例子。像 JComponentHelper::getParams('com_mycomponent')->get('version')
这样的东西不起作用,因为它从jos_extensions.params
行中检索值。我的组件版本仅在jos_extensions.manifest_cache
行中...
以下内容:
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
显然,这是包装器组件的一个例子,因此请将路径更改为适合您需求的任何路径。
希望这有帮助
如果您正在寻找Joomla站点中所有组件的列表,则可以使用扩展管理器->管理并选择类型过滤器"组件"找到它们。 这将为您提供一个列表,其中包含显示所有组件版本的版本列。这是对你原始问题的回答,无需编码。
基于 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'];
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);
}
要充分利用Joomla API,请使用JComponentHelper,\Joomla\Registry\Registry和JTable类:
$component = JComponentHelper::getComponent('com_myextension');
$extension = JTable::getInstance('extension');
$extension->load($component->id);
$manifest = new JoomlaRegistryRegistry($extension->manifest_cache);
echo $manifest->get('version');
这主要适用于较新的3.x版本的Joomla;可能是3.6+。
Joomla 3.2+:
由于 getXML 已弃用,因此可以按以下方式使用 SimpleXML:
$xml = simplexml_load_file(JPATH_COMPONENT_ADMINISTRATOR . '/wrapper.xml');
$version = $xml->version;
使用此函数根据元素从扩展表中返回版本(我发现它比名称更可靠(,但您可以轻松地用元素代替名称。
我在插件中有这个,该函数只需要元素($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'];
}