Итак, это то, что я писал вчера.
Только для Joomla 2.5 и 3.x
- Проверьте, отсутствует ли
http://
префикс в URL. Если это так, то он добавляет это. Обратите внимание, что в этом случае я не учел https://
.
- Затем он пытается получить файл манифеста Joomla и проверяет, существует ли / доступен ли для чтения.
- Если он существует, он получает значение из
<version>
тега.
- Если файл XML недоступен для чтения, я написал запасной вариант, чтобы получить версию TinyMCE. Опять же, он будет пытаться прочитать значение из
<version>
тега.
- С этого момента я потратил довольно много времени, просматривая заметки о выпуске для каждой версии Joomla, чтобы увидеть, какие версии имеют обновление TinyMCE. Те, которые сделали, я добавил в
switch
блок далее собственного в коде. Этот подход не даст точную версию, кроме двух из них, но даст среднюю. Я думал об обнаружении версии jQuery, но потом понял, что многие обновляют базовую версию до последней, что делает результаты неточными.
- Если версия TinyMCE не может быть найдена (так что, в основном, это сайт не Joomla), функция вернется
Unknown
.
Примечание: этот скрипт использует, CURL
поэтому убедитесь, что он включен на вашем сервере.
class JoomlaVersions
{
public function getJoomlaVersion($site)
{
// Add http prefix if missing
if (strpos($site,'http://') === false)
{
$site = 'http://'.$site;
}
// Get the number value from the <version> tag in the XML file
$dom = new DOMDocument;
$url = $site . '/administrator/manifests/files/joomla.xml';
libxml_use_internal_errors(true);
$exists = $this->XMLexists($url);
if( $exists )
{
$dom->load($url);
$versions = $dom->getElementsByTagName('version');
foreach ($versions as $version)
{
return $version->nodeValue;
}
}
else
{
$mce = $this->getTinyMCEversion($site);
if($mce)
{
// Base Joomla version on the TinyMCE version
switch ($mce)
{
case '3.5.6':
$joomla = '3.0.0 - 3.1.6';
break;
case '4.0.10':
$joomla = '3.2.0 - 3.2.1';
break;
case '4.0.12':
$joomla = '3.2.2';
break;
case '4.0.18':
$joomla = '3.2.3 - 3.2.4';
break;
case '4.0.22':
$joomla = '3.3.0';
break;
case '4.0.28':
$joomla = '3.3.1 - 3.3.6';
break;
case '4.1.7':
$joomla = '3.4.0';
break;
default:
$joomla = '3.x';
}
return $joomla;
}
else
{
return 'Unknown';
}
}
}
// Get TinyMCE Version
private function getTinyMCEversion($site)
{
$tinymce = $site . '/plugins/editors/tinymce/tinymce.xml';
libxml_use_internal_errors(true);
$exists = $this->XMLexists($tinymce);
if( $exists )
{
$dom->load($tinymce);
$vTag = $dom->getElementsByTagName('version');
foreach ($vTag as $tag)
{
return $tag->nodeValue;
}
}
}
// Check file exists using CURL
private function XMLexists($url)
{
$ch = curl_init($url);
curl_setopt($ch, CURLOPT_NOBODY, true);
curl_exec($ch);
$getinfo = curl_getinfo($ch, CURLINFO_HTTP_CODE);
curl_close($ch);
return $getinfo;
}
}
Затем вызовите функцию так:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
Я создал модуль на своем веб-сайте в качестве инструмента для других пользователей:
Joomla Version Detection Tool
Я также создал Github-репозиторий, если вы хотите его разветвить или отправить запросы на извлечение:
Версия Joomla Detect Github Repo
В любом случае, как некоторые из вас знают, я не бэкэнд-разработчик, поэтому, вероятно, в код можно внести множество улучшений. Если у вас есть другое решение или вы можете обновить то, что у меня есть, обязательно опубликуйте его как новый ответ.