Jhtml :: स्क्रिप्ट ऑर्डर - jQuery लोड होने तक कैसे स्थगित करें?


11

मैं JHtml::scriptकस्टम-विकसित मॉड्यूल में अपने पृष्ठों में स्क्रिप्ट जोड़ने के लिए उपयोग करता हूं। हालाँकि, ये स्क्रिप्ट J3 में जुड़ने से पहले सिर में अंतःक्षिप्त हैं - उदाहरण के लिए:

<!-- my module js -->
<script src="/modules/mod_tiles/js/jquery.isotope.min.js" type="text/javascript"></script>
<script src="/modules/mod_tiles/js/jquery.hoverintent.min.js" type="text/javascript"></script>
<script src="/modules/mod_tiles/js/mod_tiles.js" type="text/javascript"></script>
<!-- then joomla loads jQuery --->
<script src="/media/jui/js/jquery-noconflict.js" type="text/javascript"></script>
<script src="/media/jui/js/jquery.min.js" type="text/javascript"></script>

मैं Joomla को किसी अन्य स्क्रिप्ट से पहले jQuery लोड करने के लिए कैसे मजबूर कर सकता हूं?

जवाबों:


15

आपको फोन करना चाहिए

JHtml::_('jquery.framework');

अपने अन्य JHtml से पहले :: स्क्रिप्ट। AFAIK यह सुनिश्चित करता है कि jQuery पहले लोड किया गया है।


यह एकमात्र समाधान था जो मेरे लिए काम करता था - mod_tiles.phpपहले लोड करने के लिए इस मजबूर jQuery में रखा गया था। धन्यवाद!
कोडिंगहैंड्स


2

यदि मैं आपके प्रश्न को सही ढंग से पढ़ता हूं, तो आप अपना मॉड्यूल विकसित कर रहे हैं।

इसे आज़माएं, default.php में - मॉड्यूल का दृश्य ("tmpl" में):

JHtml::stylesheet('modules/'.$module->module.'/assets/css/yourfile.css');

JHtml::script('modules/'.$module->module.'/assets/js/yourscript.js');

या यह :

JHtml::_('stylesheet', 'modules/'.$module->module.'/assets/css/anotherfile.css');

JHtml::_('script', 'modules/'.$module->module.'/assets/js/othercript.js');

दोनों ही स्थिति में, आपकी जेएस फाइल (ओं) को jQuery के बाद इंजेक्ट किया जाना चाहिए, बशर्ते कि आपने "एसेट" फ़ोल्डर बनाया हो, और "सीएसएस" और "जेएस" फ़ोल्डर अंदर रखा हो।

दूसरा समाधान जूमला 3.XX एपीआई के अनुसार अधिक है।

आशा है ये मदद करेगा।


एकमात्र बदलाव जो मैंने यहां किया था वह था assetsफ़ोल्डर को जोड़ना - इससे कोई अलग नहीं हुआ, और स्क्रिप्ट अभी भी jQuery से पहले लोड होती हैं। मैं इस तरह के कोड को एक टेम्प्लेट फ़ाइल में डालने की बुद्धिमत्ता के बारे में भी आश्चर्यचकित करता हूं (विशेषकर यदि समान स्क्रिप्ट,
डीआरवाई

हेम, आपकी टिप्पणी अजीब है -> "टेम्पलेट फ़ाइल में इस तरह का कोड डालना"। मैं था, और शायद यह पर्याप्त स्पष्ट नहीं था, आपके द्वारा विकसित एक मॉड्यूल के बारे में बात करना और आइसोटोप.जेएस और अन्य जेएस लिपियों के आधार पर। मुझे बहुत खेद है अगर मैं गलत था और आप वास्तव में mod_tiles नामक तीसरे पक्ष के मॉड्यूल का उपयोग कर रहे हैं। BTW, एक टेम्पलेट में JS स्क्रिप्ट सम्मिलित करने के अन्य तरीके हैं।
ग़ज़ल

क्षमा करें, मेरे कहने का मतलब इतना कठोर नहीं था! बहुत जल्दी उठना चाहिए ... आप बिल्कुल सही हैं, यही मैं कर रहा हूं - यह मेरा मॉड्यूल है। टेम्पलेट फ़ाइल से मेरा मतलब मॉड्यूल default.phpके tmpl(टेम्पलेट) फ़ोल्डर में था। मुझे लगा कि लिपियों को (दृश्य) के mod_tiles.phpबजाय default.php( 'नियंत्रक') में लोड किया जाना चाहिए ।
कोडिंगहैंड्स

इसे tmpl / default.php में रखने से ओवरराइड की अनुमति मिलती है। Mod_tiles.php में इसे ओवरराइड नहीं किया जा सकता है।
sovainfo

2

मैं पिछले हफ्ते इस समस्या में भाग गया था और यह जहाँ मैं JHtml :: स्क्रिप्ट कह रहा था से संबंधित था। क्या आप अपने विचार या दृश्य के खाके में ऐसा कर रहे हैं? यदि आप स्क्रिप्ट को दृश्य में जोड़ने का प्रयास करते हैं (विचार / yourview / view.html.php) तो उन्हें जूमला में डाला जाएगा! स्वयं स्क्रिप्ट्स, लेकिन यदि आप टेम्पलेट में स्क्रिप्ट जोड़ते हैं (विचार / yourview / tmpl /) default.php) उन्हें जूमला की स्क्रिप्ट्स के बाद डाला जाएगा।

सौभाग्य!


यह केवल mod_tiles.php, एक सहायक फ़ाइल और एकल टेम्पलेट (default.php) के साथ एक मॉड्यूल है tmpl। मैंने mod_tiles.php और default.php - jQuery से पहले दोनों लोड में स्क्रिप्ट जोड़ने की कोशिश की।
कोडिंगहैंड्स

0

यह संभवतः उस पद्धति के कारण है जो डेवलपर mod_tilesने स्क्रिप्ट को आयात करने के लिए उपयोग किया है। मुझे लगता है कि वे इस स्थिति में जूमला कोडिंग मानकों पर नहीं टिके हैं।

आपके पास 2 विकल्प हैं (जो मैं सोच सकता हूं) hwre:

  1. यदि स्क्रिप्ट मॉड्यूल के भीतर tmpl फ़ोल्डर में एक फ़ाइल से आयात की जा रही हैं , तो आप एक टेम्पलेट ओवरराइड प्रदर्शन कर सकते हैं और स्क्रिप्ट को आयात किए जाने के तरीके को बदल सकते हैं , उपयोग कर सकते हैं JHtml
  2. आप jQuery Easy को डाउनलोड और इंस्टॉल कर सकते हैं जो कि एक प्लगइन है जो jQuery आयात करता है और इसे अन्य सभी लिपियों के ऊपर रखता है।

उम्मीद है की यह मदद करेगा


मैंने मॉड्यूल विकसित किया - मुझे किस विधि का उपयोग करना चाहिए? मैंने एक प्रश्न ( joomla.stackexchange.com/questions/325/… ) में यह पूछा और JHtml :: स्क्रिप्ट को आगे बढ़ने का तरीका बताया गया।
कोडिंगहैंड्स

0

मैं इस तथ्य के बाद अपने दो-बिट जोड़ना चाहता था। मुझे कुछ स्क्रिप्ट और स्टाइल शीट मिली हैं, जिन्हें हमें हर घटक में देखने के लिए लोड करने की आवश्यकता है, और एक बिंदु चाहता था कि ऐसा हो कि बीमा भी हो जाए कि वे सही अनुक्रम में लोड किए गए हैं।

फ़ाइल में components\myComponent\mycomponent.php:

defined('_JEXEC') or die;

// Include dependancies
jimport('joomla.application.component.controller');

JHtml::stylesheet('http://maxcdn.bootstrapcdn.com/font-awesome/4.2.0/css/font-awesome.min.css', array(), true);
JHtml::stylesheet('components/com_mycomponent/assets/css/mycomponent.css');

JHtml::_('jquery.framework');   // Make sure jQuery is loaded before component JS
JHtml::script( 'components/mycomponent/assets/js/jquery.cookie.js');

// Execute the task.
$controller = JControllerLegacy::getInstance('Mycomponent');
$controller->execute(JFactory::getApplication()->input->get('task'));
$controller->redirect();

-1

मुझे पता है कि यह एक पुराना विषय है लेकिन क्या आप कभी इस की तह तक गए हैं? मैं सिर्फ एक ही समस्या का अनुभव किया है। मैंने CAUSE को पहचान लिया है लेकिन समस्या / समाधान नहीं; मुझे डर है कि यह एक BUG है, लेकिन किसी और के साथ इसे करने की कोशिश कर सकता है।

परिदृश्य: आपने एक मॉड्यूल बनाया है जिसमें एक jQuery आश्रित स्क्रिप्ट शामिल है ताकि आप अपने default.php दृश्य में निम्नलिखित का उपयोग करें:

$doc = JFactory::getDocument();
$doc->addScript("media/mod_accordion/js/accordion.js");

आप तब मॉड्यूल स्थापित करते हैं और इसे एक मॉड्यूल स्थिति देते हैं, जो 'बाएं' कहते हैं। जब आप फ्रंट एंड सोर्स कोड को देखते हैं तो सब कुछ अच्छा लगता है, सभी स्क्रिप्ट्स उन स्क्रिप्ट्स के बाद लोड होती हैं जो इसमें शामिल हैं

JHtml::_('bootstrap.framework');

यदि आप मॉड्यूल को 'स्थिति' देते हैं और किसी लेख में मॉड्यूल को जोड़ने के लिए जूमला लोडपोजिशन सुविधा का उपयोग करते हैं, तो

{loadposition accordion}

उसके बाद accordion.js बूटस्ट्रैप.फ्रेमवर्क फ़ाइलों से पहले जुड़ जाते हैं।

जिस तरह से मैं इसे काम करने के लिए चकमा देने में सक्षम रहा हूं वह यह है कि स्क्रिप्ट को इनलाइन स्क्रिप्ट के रूप में जोड़ना है बजाय सिर में शामिल किए।

संपादित करें: एक ही सीएसएस शामिल करने के लिए चला जाता है; यह सीएसएस घोषणा की सूची के शीर्ष पर जोड़ा जा रहा है (टेम्पलेट और बूटस्ट्रैप सीएसएस फ़ाइलों से पहले)। इसके लिए bss जोड़ना है! Css घोषणाओं के लिए महत्वपूर्ण है।

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