Добре, це те, що я писав вчора.
Тільки для Joomla 2.5 та 3.x
- Перевірте, чи
http://
в URL-адресі відсутній префікс. Якщо є, то додає. Зауважте, що в цьому випадку я не брав https://
до уваги.
- Потім він намагається отримати файл маніфесту Joomla і перевіряє, чи існує / читається.
- Якщо воно існує, то воно отримує значення з
<version>
тегу.
- Якщо файл XML не читається, я написав резервну копію, щоб отримати версію TinyMCE. Знову ж спробуємо прочитати значення з
<version>
тегу.
- З цього моменту я досить довго переглядав нотатки до випуску кожної версії Joomla, щоб побачити, які версії мають оновлення TinyMCE. Ті, що це зробили, я додав до
switch
блоку далі власним кодом. Цей підхід не дасть точної версії, крім 2 з них, але дасть середню. Я думав про виявлення версії 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
Я також створив сховище Github, якщо ви хочете роздрібнити його або надіслати запити на тягнення:
Версія Joomla виявляє Github Repo
У будь-якому випадку, як деякі з вас знають, я не розробник програми, тому, мабуть, є багато вдосконалень, які можна внести до коду. Якщо у вас є інше рішення або ви можете оновити те, що у мене зараз, обов’язково опублікуйте це як нову відповідь.