Ok, więc to właśnie pisałem wczoraj.
Tylko dla Joomla 2.5 i 3.x.
- Sprawdź, czy
http://
w adresie URL nie ma prefiksu. Jeśli tak, to dodaje. Uwaga: w tym przypadku nie wziąłem https://
pod uwagę.
- Następnie próbuje pobrać plik manifestu Joomla i sprawdza, czy istnieje / jest czytelny.
- Jeśli istnieje, pobiera wartość z
<version>
tagu.
- Jeśli pliku XML nie można odczytać, to napisałem awarię, aby uzyskać wersję TinyMCE. Ponownie spróbuje odczytać wartość ze
<version>
znacznika.
- Odtąd spędziłem dość dużo czasu, przeglądając informacje o wydaniu dla każdej wersji Joomla, aby zobaczyć, które wersje mają aktualizację TinyMCE. Te, które zrobiły, dodałem do
switch
bloku dalej posiadanego w kodzie. To podejście nie da dokładnej wersji oprócz 2 z nich, ale da średnią. Myślałem o wykryciu wersji jQuery, ale potem zdałem sobie sprawę, że wiele osób aktualizuje wersję podstawową do najnowszej, co spowodowałoby, że wyniki byłyby niedokładne.
- Jeśli nie można znaleźć wersji TinyMCE (czyli zasadniczo strony innej niż Joomla), funkcja wróci
Unknown
.
Uwaga: ten skrypt używa, CURL
więc upewnij się, że jest włączony na twoim serwerze.
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;
}
}
Następnie wywołaj funkcję tak:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
W swojej witrynie utworzyłem moduł jako narzędzie dla innych użytkowników:
Narzędzie do wykrywania wersji Joomla
Utworzyłem również repozytorium Github, jeśli chcesz je rozwidlić lub przesłać żądania ściągnięcia:
Wersja Joomla Detect Github Repo
W każdym razie, jak niektórzy z was wiedzą, nie jestem programistą zaplecza, więc w kodzie jest prawdopodobnie wiele ulepszeń. Jeśli masz inne rozwiązanie lub możesz zaktualizować to, co obecnie posiadam, opublikuj je jako nową odpowiedź.