ठीक है तो यह वही है जो मैं कल लिख रहा था।
केवल जूमला 2.5 और 3.x के लिए
- जांचें कि क्या
http://
उपसर्ग URL से गायब है। यदि यह है, तो यह इसे जोड़ता है। ध्यान दें कि इस मामले में मैंने ध्यान नहींhttps://
दिया है।
- यह तब जूमला मैनिफ़ेस्ट फ़ाइल प्राप्त करने की कोशिश करता है और जाँचता है कि क्या मौजूद है / पठनीय है।
- यदि यह मौजूद है तो यह
<version>
टैग से मूल्य प्राप्त करता है ।
- यदि XML फ़ाइल पढ़ने योग्य नहीं है, तो मैंने TinyMCE संस्करण प्राप्त करने के लिए एक कमबैक लिखा है। फिर, यह
<version>
टैग से मान पढ़ने की कोशिश करेगा ।
- यहाँ से, मैंने प्रत्येक जूमला संस्करण के रिलीज़ नोट्स से गुजरने में काफी समय बिताया, यह देखने के लिए कि किन संस्करणों में टिनीएमसीई अपडेट है। उन लोगों ने जो किया, मैंने
switch
कोड में खुद को आगे ब्लॉक में जोड़ा । यह दृष्टिकोण उनमें से 2 के अलावा सटीक संस्करण नहीं देगा, लेकिन यह एक औसत देगा। मैं jQuery संस्करण का पता लगाने के बारे में सोच रहा था, लेकिन फिर महसूस किया कि बहुत सारे लोग कोर संस्करण को नवीनतम में अपडेट करते हैं जो तब परिणामों को गलत कर देगा।
- यदि TinyMCE संस्करण नहीं मिल सकता है (तो मूल रूप से एक गैर-जूमला साइट), तो फ़ंक्शन वापस आ जाएगा
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');
मैंने अपनी वेबसाइट पर अन्य उपयोगकर्ताओं के लिए एक टूल के रूप में एक मॉड्यूल बनाया है:
जूमला वर्जन डिटेक्शन टूल
यदि आपने इसे कांटा या पुल अनुरोध सबमिट करना चाहते हैं, तो मैंने एक गितब भंडार भी बनाया है:
जूमला वर्जन जीथब रेपो का पता लगाता है
वैसे भी, जैसा कि आप में से कुछ जानते हैं, मैं बैकएंड डेवलपर नहीं हूं, इसलिए शायद बहुत सारे सुधार हैं जो कोड में किए जा सकते हैं। यदि आपके पास एक और समाधान है या जो मेरे पास वर्तमान में है, उसे अपडेट कर सकते हैं, तो एक नए उत्तर के रूप में पोस्ट करना सुनिश्चित करें।