Ok jadi ini yang saya tulis kemarin.
Hanya untuk Joomla 2.5 dan 3.x
- Periksa apakah
http://
awalan hilang dari URL. Jika ya, maka ia menambahkannya. Perhatikan bahwa Dalam hal ini saya telah tidak mengambil https://
menjadi pertimbangan.
- Kemudian mencoba untuk mendapatkan file manifes Joomla dan memeriksa apakah ada / dapat dibaca.
- Jika ada maka mendapat nilai dari
<version>
tag.
- Jika file XML tidak dapat dibaca, maka saya telah menulis mundur untuk mendapatkan versi TinyMCE. Sekali lagi, ini akan mencoba membaca nilai dari
<version>
tag.
- Dari sini, saya menghabiskan cukup banyak waktu untuk membaca catatan rilis untuk setiap versi Joomla untuk melihat versi mana yang memiliki pembaruan TinyMCE. Mereka yang melakukannya, saya menambahkan ke
switch
blok lebih lanjut dalam kode. Pendekatan ini tidak akan memberikan versi yang tepat terpisah dari 2 di antaranya, tetapi akan memberikan rata-rata. Saya sedang berpikir tentang mendeteksi versi jQuery tetapi kemudian menyadari bahwa banyak orang memperbarui versi inti ke yang terbaru yang kemudian akan membuat hasilnya tidak akurat.
- Jika versi TinyMCE tidak dapat ditemukan (jadi pada dasarnya situs non-Joomla), maka fungsinya akan kembali
Unknown
.
Catatan: Script ini digunakan CURL
jadi pastikan diaktifkan di server Anda.
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;
}
}
Kemudian panggil fungsi seperti ini:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
Saya telah membuat modul di situs web saya sebagai Alat untuk pengguna lain:
Alat Deteksi Versi Joomla
Saya juga membuat repositori Github jika Anda ingin membayarnya atau mengirimkan permintaan tarikan:
Versi Joomla Mendeteksi Github Repo
Bagaimanapun, seperti beberapa dari Anda tahu, saya bukan pengembang backend jadi mungkin ada banyak perbaikan yang dapat dilakukan pada kode. Jika Anda memiliki solusi lain atau dapat memperbarui apa yang saya miliki saat ini, pastikan untuk mempostingnya sebagai jawaban baru.