2010-04-01 15 views
5

मैं drupal_add_js() का उपयोग करके शीर्षलेख में जावास्क्रिप्ट फ़ाइल के संदर्भ को सम्मिलित करने का प्रयास कर रहा हूं। मैंने इस लाइन को टेम्पलेट preprocess फ़ंक्शन के अंदर template.php में रखा है। नतीजा यह है कि कोड बिल्कुल काम नहीं कर रहा है: आउटपुट में कोई स्क्रिप्ट लिंक नहीं होना चाहिए जैसा कि होना चाहिए। क्या कोई मुझे बता सकता है कि मैं क्या गलत कर रहा हूं?एक जावास्क्रिप्ट फ़ाइल जोड़ना

function phptemplate_preprocess_page(&$vars) { 
    $url = drupal_get_path("theme","mysite"); 
    drupal_add_js($url."/jquery.js"); 
    drupal_add_js($url."/drupal.js"); 

..... 

उत्तर

-1

drupal_add_js() काम करता है, लेकिन आप इसे गहरी लगा रहे हैं पृष्ठ प्रतिपादन प्रक्रिया में। मेरा सुझाव है कि आप इसे टेम्पलेट.एफ़पी में डाल दें जैसे कि आप कर रहे हैं, लेकिन शुरुआत में, किसी भी फ़ंक्शन के बाहर। हमने अपनी कुछ परियोजनाओं पर यही किया है।

+0

आप सही हैं। एक बार जब मैं इसे फ़ंक्शन से बाहर ले जाता हूं और इसे वैश्विक दायरे में बाहर रखता हूं, तो यह एक आकर्षण की तरह काम करता है। :) मेरे पास एक और सवाल है। यह सिर्फ विशुद्ध रूप से ज्ञान के लिए है। आउटपुट में दो अलग-अलग स्थानों से दो बार उन फ़ाइलों को दोहराएं क्यों? कोई विचार? यहां बताया गया है कि यह कैसा दिखता है - – Andrew

+0

<स्क्रिप्ट टाइप = "टेक्स्ट/जावास्क्रिप्ट" src = "/ drupal/misc/jquery.js? 4"> <स्क्रिप्ट टाइप = "टेक्स्ट/जावास्क्रिप्ट" src = "/ drupal/Misc/drupal .js? 4 "> <स्क्रिप्ट टाइप =" टेक्स्ट/जावास्क्रिप्ट "src ="/drupal/jquery.js? 4 "> <स्क्रिप्ट टाइप =" टेक्स्ट/जावास्क्रिप्ट "src ="/drupal/drupal.js ? 4 "> उपयोगकर्ता द्वारा सुझाए गए अनुसार - स्कॉट, मैंने अपने थीम फ़ोल्डर के तहत उन फ़ाइलों का उपयोग करना बंद कर दिया और इसके बजाय ड्रूपल डिफ़ॉल्ट का उपयोग किया। तो drupal_add_js फ़ंक्शन में कोई पथ उल्लेख नहीं है; दूसरे शब्दों में, बस फ़ाइल का नाम - drupal_add_js ('jquery.js') – Andrew

+0

और, उन 2 फ़ाइलों को स्वचालित रूप से ड्रूपल द्वारा विषय में जोड़ा जाना चाहिए। पृष्ठ.tpl.php –

2
drupal_add_js(path_to_theme().'/js/jquery.cycle.all.js'); 
    $vars['scripts'] = drupal_get_js(); 
+0

तो, क्या इसका मतलब है drupal_add_js फ़ंक्शन स्क्रिप्ट टैग नहीं जोड़ता है? क्योंकि वह ड्रोपल सहायता की मेरी समझ थी। उसने कहा, जैसा आपने सुझाव दिया था मैंने किया था और, क्या हुआ, यह उन फ़ाइलों को जोड़ा गया (drupal.js, jquery.js) दो बार। : भ्रमित: यहां यह देखा गया है - <स्क्रिप्ट टाइप = "टेक्स्ट/जावास्क्रिप्ट" src = "/ drupal/misc/jquery.js? d"> <स्क्रिप्ट टाइप = "टेक्स्ट/जावास्क्रिप्ट" src = "/ drupal /misc/drupal.js?d "> <स्क्रिप्ट टाइप =" टेक्स्ट/जावास्क्रिप्ट "src ="/drupal/jquery.js? d "> <स्क्रिप्ट टाइप =" टेक्स्ट/जावास्क्रिप्ट "src ="/drupal /drupal.js?d "> – Andrew

+0

क्या आपने यह कोड phptemplate_preprocess_page में जोड़ा था? – Nikit

+2

drupa.js और jquery.js पहले से ही ड्रूपल कोर द्वारा जोड़े गए हैं। तो उन्हें अपनी थीम में जोड़ना डुप्लिकेट बना रहा है। डिफ़ॉल्ट को हटाने के लिए संभव है, लेकिन एक अच्छा विचार नहीं है। यदि आप विभिन्न संस्करणों का उपयोग कर रहे हैं, तो यह ड्रूपल में कुछ तोड़ने की संभावना है जो कोर के साथ आने वाले संस्करणों पर निर्भर करता है (जो ठीक है अगर आप जानते हैं कि आप क्या तोड़ रहे हैं और उसके साथ ठीक है, लेकिन आपको नहीं पता)। और यदि आप एक ही संस्करण का उपयोग कर रहे हैं, तो उन्हें स्थानांतरित करने का क्या कारण है? –

10

और भी आसान, जावास्क्रिप्ट को सभी पृष्ठों पर लोड करने की आवश्यकता है थीम की .info फ़ाइल में जोड़ा जा सकता है। http://drupal.org/node/171205#scripts देखें।

+1

+1 दिलचस्प ... विषय जानकारी फ़ाइल ड्रूपल 7 की आवश्यकता है, आपके द्वारा पोस्ट किया गया लिंक यह भी कहता है कि ड्रूपल 6 डिफ़ॉल्ट रूप से थीम फ़ोल्डर से सभी .js फ़ाइलों को लोड करता है। यदि आपके पास PHP इनपुट प्रारूप सक्षम है तो drupal_add_js को मॉड्यूल से और यहां तक ​​कि नोड्स से भी कहा जा सकता है ... –

+1

नहीं, यह पूरी तरह से सही नहीं है। एक थीम के लिए .info फ़ाइल ड्रूपल 6 और ड्रूपल 7 दोनों में आवश्यक है। डी 6 केवल 'script.js' नामक फ़ाइल को स्वत: लोड करता है। डी 7 जेएस फाइलों को स्वतः लोड नहीं करता है। जैसा कि आप कहते हैं, drupal_add_js() को नोड से बुलाया जा सकता है, लेकिन इसकी अनुशंसा नहीं की जाती है क्योंकि आप प्रस्तुति के साथ सामग्री मिश्रण कर रहे हैं। – marcvangend

1

आप विषय निर्देशिका में जावास्क्रिप्ट फ़ाइल हैं, तो आप सिर्फ निम्नलिखित विषयों के लिए फ़ाइल

scripts[] = myJavaScriptFile.js 

.info आप इस फ़ाइल को आप अपने विषय और फिर इसे प्रतिक्रियाशील निष्क्रिय करना जोड़ने के बाद जोड़ सकते हैं।

1

जैसा कि अन्य द्वारा इंगित किया गया है, का उपयोग hook_preprocess_page() कार्यान्वयन से नहीं करता है। drupal_add_js() पर एकाधिक कॉल के माध्यम से एकत्र की गई जावास्क्रिप्ट फ़ाइलों के संदर्भ template_preprocess_page() से $scripts चर में संबंधित मार्कअप उत्पन्न करने के लिए उपयोग किए जाते हैं। लेकिन hook_preprocess_page() का थीम का कार्यान्वयन हमेशा template_preprocess_page() के बाद बुलाया जाता है। तो आदेश फ़ाइलें आपके .tpl.php फ़ाइल (फ़ाइलें) में drupal_add_js() के माध्यम से जोड़ा है करने के लिए आपको ओवरराइड करने के लिए पहले से ही $scripts चर सेट की जरूरत है:

function THEME_preprocess_page(&$variables) 
    drupal_add_js(...); 
    $variables['scripts'] = drupal_get_js(); 
} 

लेकिन, आप अपने आप को jquery.js और drupal.js जोड़ने के लिए नहीं होना चाहिए, यह ड्रूपल कोर द्वारा पहले ही स्वचालित रूप से किया जाना चाहिए। यदि आपको इसे स्वयं करने की ज़रूरत है, तो आपकी साइट पर कुछ टूटा हुआ है। आप फ़ाइलों को त्वरित फिक्स के रूप में जोड़ सकते हैं, लेकिन आप इस मुद्दे के मूल कारण को बेहतर तरीके से ढूंढ सकते हैं क्योंकि यह संभवतः अन्य समस्याओं को बनाने की संभावना है जिन्हें आपने अभी तक पहचाना नहीं है (या इसे महसूस किए बिना काम किया है)।

+0

+1, और आप अपने मॉड्यूल के 'hook_init() 'या' hook_preprocess() 'या' hook_preprocess_page() 'कार्यान्वयन (या समान हुक) में जेएस फ़ाइलों को भी जोड़ सकते हैं। – Sk8erPeter

संबंधित मुद्दे