Ok, đây là những gì tôi đã viết ngày hôm qua.
Chỉ dành cho Joomla 2.5 và 3.x
- Kiểm tra nếu
http://
thiếu tiền tố từ URL. Nếu có, thì nó thêm nó. Lưu ý rằng trong trường hợp này tôi đã không đưa https://
vào xem xét.
- Sau đó, nó cố gắng lấy tệp kê khai Joomla và kiểm tra xem có tồn tại / có thể đọc được không.
- Nếu nó tồn tại thì nó nhận được giá trị từ
<version>
thẻ.
- Nếu tệp XML không thể đọc được, thì tôi đã viết một bản dự phòng để có phiên bản TinyMCE. Một lần nữa, nó sẽ cố gắng đọc giá trị từ
<version>
thẻ.
- Từ đây trở đi, tôi đã dành khá nhiều thời gian để xem các ghi chú phát hành cho từng phiên bản Joomla để xem phiên bản nào có bản cập nhật TinyMCE. Những người đã làm, tôi đã thêm vào
switch
khối sở hữu thêm trong mã. Cách tiếp cận này sẽ không cung cấp phiên bản chính xác ngoài 2 trong số chúng, nhưng nó sẽ cho mức trung bình. Tôi đã suy nghĩ về việc phát hiện phiên bản jQuery nhưng sau đó nhận ra rằng rất nhiều người cập nhật phiên bản cốt lõi lên phiên bản mới nhất, điều này sẽ khiến kết quả không chính xác.
- Nếu không thể tìm thấy phiên bản TinyMCE (về cơ bản là một trang web không phải Joomla), thì chức năng sẽ trở lại
Unknown
.
Lưu ý: Tập lệnh này sử dụng CURL
để đảm bảo rằng nó được bật trên máy chủ của bạn.
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;
}
}
Sau đó gọi hàm như vậy:
$version = new JoomlaVersions;
echo $version->getJoomlaVersion('http://joomla.org');
Tôi đã tạo một mô-đun trên trang web của mình dưới dạng Công cụ cho những người dùng khác:
Công cụ phát hiện phiên bản Joomla
Tôi cũng đã tạo một kho lưu trữ Github nếu bạn muốn rẽ nhánh hoặc gửi yêu cầu kéo:
Phiên bản Joomla Phát hiện Github Repo
Dù sao, như một số bạn biết, tôi không phải là nhà phát triển phụ trợ nên có thể có rất nhiều cải tiến có thể được thực hiện đối với mã. Nếu bạn có một giải pháp khác hoặc có thể cập nhật những gì tôi hiện đang có, hãy chắc chắn đăng nó dưới dạng một câu trả lời mới.