ตกลงนี่คือสิ่งที่ฉันเขียนเมื่อวานนี้
สำหรับ 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 Version ตรวจจับ Github Repo
อย่างไรก็ตามอย่างที่บางคนรู้ว่าฉันไม่ใช่นักพัฒนาแบ็กเอนด์ดังนั้นอาจมีการปรับปรุงมากมายที่สามารถทำกับรหัสได้ หากคุณมีวิธีแก้ไขปัญหาอื่นหรือสามารถอัปเดตสิ่งที่ฉันมีอยู่ในปัจจุบันโปรดโพสต์เป็นคำตอบใหม่