Joomla 3.9.5获取模板作者与许可证信息的技术求助
解决Joomla 3.9.5获取模板作者与许可证信息的问题
你遇到的问题是因为JApplication::getTemplate()方法返回的对象只包含模板的配置参数,并不包含模板的元数据(作者、许可证这类信息是存储在模板的XML安装文件或者数据库的#__extensions表中的)。下面给你两种可行的解决方案:
方法一:直接从数据库查询(最高效)
Joomla的所有扩展(包括模板)的元数据都存在#__extensions表中,我们可以通过模板名称查询对应的记录:
// 获取当前应用实例 $app = JFactory::getApplication(); // 获取当前使用的模板名称 $templateName = $app->getTemplate(); // 初始化数据库查询 $db = JFactory::getDbo(); $query = $db->getQuery(true) ->select('author, license') ->from($db->quoteName('#__extensions')) ->where($db->quoteName('type') . ' = ' . $db->quote('template')) ->where($db->quoteName('element') . ' = ' . $db->quote($templateName)); $db->setQuery($query); $templateMetadata = $db->loadObject(); // 输出结果 if ($templateMetadata) { $getTemplateAuthor = $templateMetadata->author; $getTemplateLicense = $templateMetadata->license; echo '作者:' . $getTemplateAuthor . '<br>'; echo '许可证:' . $getTemplateLicense; } else { echo '未找到模板元数据'; }
方法二:解析模板的XML安装文件
如果数据库中的数据可能不准确,或者你想直接读取模板的原始XML文件,可以用JInstallerHelper来解析:
$app = JFactory::getApplication(); $templateName = $app->getTemplate(); // 模板XML文件的路径 $templateXmlPath = JPATH_SITE . '/templates/' . $templateName . '/' . $templateName . '.xml'; // 检查文件是否存在 if (file_exists($templateXmlPath)) { // 解析XML文件 $xml = JInstallerHelper::parseXMLInstallFile($templateXmlPath); if ($xml) { $getTemplateAuthor = $xml['author']; $getTemplateLicense = $xml['license']; echo '作者:' . $getTemplateAuthor . '<br>'; echo '许可证:' . $getTemplateLicense; } else { echo '无法解析模板XML文件'; } } else { echo '模板XML文件不存在'; }
补充说明
- 两种方法中,数据库查询的效率更高,因为避免了文件IO操作;
- 如果是获取当前活跃模板的信息,用
$app->getTemplate()拿到模板名称是最稳妥的; - 注意替换
#__为你的Joomla数据库前缀(通常Joomla会自动处理,但在直接写SQL时要确保使用$db->quoteName()来避免注入风险)。
内容的提问来源于stack exchange,提问作者thednp
相关产品推荐
相关产品推荐

