JHtml: स्क्रिप्ट () और $ doc-> ऐडस्क्रिप्ट में क्या अंतर है?


10

मैंने हाल ही में एक मॉड्यूल विकसित किया है <head>जिसमें प्रत्येक पृष्ठ में कुछ जेएस और सीएसएस फाइलों को इंजेक्ट किया जाना आवश्यक है । प्रारंभ में, मैंने उपयोग किया:

$doc =& JFactory::getDocument();
$doc->addScript(JURI::base(true).'/modules/mod_x/js/mod_x.js');

हालाँकि, मैंने देखा कि जब कैशिंग सक्षम किया गया था, तो साइट से एक कैश्ड संस्करण /cacheऔर गैर-कैश्ड संस्करण दोनों को लोड किया गया था /modules/mod_x/js/, जिससे जेएस त्रुटियां हुईं।

जब मैंने इसे बदल दिया:

JHtml::script(Juri::base().'modules/mod_x/js/mod_x.js');

इन त्रुटियों को हल करते हुए, केवल एक बार स्क्रिप्ट को कैश से लोड किया गया था।

मैंने डॉक्स में पढ़ा कि addScriptविधि विधि से अधिक 'निम्न स्तर' की थी JHtml:script, लेकिन यह कहने से परे कि ...

बेशक, आपको मैन्युअल रूप से कुछ चरणों को कोड करने की आवश्यकता होगी [जो कि JHtml: script आपके लिए करता है] जो कि ऊपर [JHtml: script पद्धति] का उपयोग करके स्वचालित रूप से किया जाएगा [यदि आप addScript का उपयोग करते हैं]।

... आगे कोई विवरण नहीं दिया गया है।

तो क्या अंतर है? मुझे लगता है कि JHtml:scriptअंततः addScriptकिसी बिंदु पर एक दस्तावेज़ ऑब्जेक्ट पर कॉल किया जाता है, लेकिन क्या अन्य मध्यस्थ कदम पहले उठाए जाते हैं?


4
मैंने जूमला डॉक्स को फिर से लिखने और इसे अपडेट करने के लिए थोड़ा सा लिखा है - देखें कि क्या यह अधिक समझ में आता है?
जॉर्ज विल्सन

1
@GeorgeWilson हाल ही में जूमला डॉक्स में सुधार हुआ है। धन्यवाद :)
ट्रायहार्डर

स्टाइलशीट के बारे में संबंधित प्रश्न: joomla.stackexchange.com/q/10062/5239
फ्लिम

जवाबों:


8

JHtml::scriptअतिरिक्त तर्क शामिल हैं। एपीआई संदर्भ के लिए http://api.joomla.org/cms-3/classes/JHtml.html#method_script देखें

डिफ़ॉल्ट रूप से यह डिबग सेटिंग और उपयोग किए गए ब्राउज़र का पता लगाएगा और मिलान स्क्रिप्ट को लोड करेगा। उदाहरण के लिए जब डिबग सक्षम होता है तो यह फ़ाइल के एक असम्पीडित संस्करण को लोड करेगा यदि मौजूद है।

वैकल्पिक सेटिंग्स हैं जो टेम्पलेट स्तर और अन्य चीजों पर फ़ाइल को ओवरराइड करने की अनुमति देती हैं।

माइकल बेकर ने JHtml::script()ओवरराइड की अनुमति देने के लिए उपयोग करने के लिए एक अच्छा गाइड लिखा : http://www.babdev.com/blog/139-use-the-media-folder-allow-overridable-media

संदर्भ के लिए रेपो में कार्य: https://github.com/joomla/joomla-cms/blob/staging/lbooks/cms/html/html.php#L659

आधिकारिक डॉक्टर पृष्ठ जो अब जॉर्ज द्वारा अद्यतन किया गया है: http://docs.joomla.org/J3.3:Adding_JavaScript_and_CSS_to_the_page


2
जवाब के लिए धन्यवाद। एपीआई संदर्भ काफी सुव्यवस्थित है - क्या डिटेक्ट_ब्रोसर और डिटे_डबग के प्रभावों की अधिक व्यापक व्याख्या है, और जब आप कहते हैं कि 'वैकल्पिक सेटिंग्स' और 'अन्य चीजें' ये कहीं भी प्रलेखित हैं?
कोडिंगहैंड्स

मैंने माइकल के एक लेख का लिंक जोड़ा है जो ओवरराइड भाग की व्याख्या करता है। डीबग और ब्राउज़र भाग के लिए, मुझे नहीं लगता कि कोई दस्तावेज़ है। आपको उसके लिए कोड पढ़ना होगा।
15

1
इसलिए अगर उदाहरण के लिए एक असम्पीडित और संकुचित js फ़ाइल है और डिबग चालू है, तो यह फ़ाइल नाम-असंपीड़ित लोड करेगा। डीएस और डीबग बंद होने पर सिर्फ फ़ाइल नाम। जेएस। ब्राउज़र के लिए जब डिबग बंद होता है तो यह फ़ाइलनाम-browser.js के लिए दिखता है, फिर फ़ाइल नाम-ब्राउज़र- browserversion.js आदि
जॉर्ज विल्सन

2
यह एक फटा जवाब है - धन्यवाद @Bakual और @GeorgeWilson!
कोडिंगहैंड्स

1
यह मत भूलो कि JHtml किसी स्क्रिप्ट या स्टाइलशीट के MD5sum को कैश-बस्ट में जोड़ सकती है।
फ्लिम

4

दो शब्दों में:

  • JHtml::script() - आपको विशिष्ट स्क्रिप्ट को ओवरराइड करने की अनुमति देता है (सिवाय इसके कि पहले से ही JDocument से जुड़ा हुआ है), कुछ कारकों से निर्भर करता है (देखें @Bakat जवाब);
  • $doc->addScript() - ओवरराइड की जांच किए बिना, सीधे दस्तावेज़ में स्क्रिप्ट संलग्न करें;

यदि आप एक्सटेंशन डेवलपर हैं, तो JHtml::script()स्क्रिप्ट जोड़ने पर अत्यधिक अनुशंसित उपयोग करें । यह आपके उपयोगकर्ताओं के लिए कुछ विशिष्ट स्क्रिप्ट को ओवरराइड करने की अनुमति देगा, जो वे चाहते हैं उससे निर्भर करते हैं।
इसके अलावा सीएसएस के लिए भी इसी तरह की विधि है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.