2008-12-15 9 views
7

मैं एक ड्रूपल साइट में jQuery $ (दस्तावेज़) .ready() निष्पादित करना चाहता हूं। जबकि मुझे पता है कि मैं इसे इंडेक्स पेज में बस रख सकता हूं, यह वास्तव में गन्दा और एक हैक है।jQuery और ड्रूपल पेज लोड

जो मैं जानना चाहता हूं वह यह है कि इसे रखने के लिए सही स्थान कहां है, इसे थीम विशिष्ट होने की भी आवश्यकता होगी क्योंकि मैं सभी विषयों का उपयोग नहीं करना चाहता हूं।

सहायता के लिए अग्रिम धन्यवाद।


मीठी सफलता, सहायता के लिए आप दोनों का धन्यवाद, मेरे पास अभी इस प्रश्न में एक अंतिम संशोधन है। अब जब मुझे यह मिल गया है, तो मुझे दस्तावेज़ को अद्यतन करने के लिए jQuery कोड निष्पादित करने की आवश्यकता है, क्या मैं दस्तावेज़ को संशोधित करने के लिए संदर्भ का उपयोग कर सकता हूं?

उत्तर

2

वॉनसी ने पर्याप्त रूप से "कैसे" भाग का जवाब दिया, इसलिए मैं "कहां" भाग पर ध्यान केंद्रित करूंगा।

यदि स्क्रिप्ट थीम-विशिष्ट है, तो स्क्रिप्ट फ़ाइल डालने का प्राकृतिक स्थान आपकी थीम में है। समस्या यह है कि जब तक ड्रूपल थीम पर जाता है, $scripts वैरिएबल पहले से ही "rendered" (Drupal parlance में) HTML में किया गया है। थीम परत में एक स्क्रिप्ट जोड़ने के लिए, आपको स्क्रिप्ट जोड़ने और $scripts चर का पुनर्निर्माण करने की आवश्यकता है।

मान लिया जाये कि आप Drupal 6 का उपयोग कर रहे है, यह आपके theme_preprocess_page() समारोह में जाना होगा:

drupal_add_js(drupal_get_path('theme', 'theme_name') .'/example.js', 'theme'); 
$variables['scripts'] = drupal_get_js(); 

बस अपने विषय के नाम को प्रतिबिंबित करने के लिए drupal_get_path() का दूसरा तर्क बदलने के लिए, तो स्क्रिप्ट फ़ाइल का नाम बदलने के example.js से जो भी आपने अपनी स्क्रिप्ट का नाम दिया है।

7

ड्रोपल विशेषज्ञ नहीं, लेकिन यह blog entry सुझाव देता है कि, ड्रूपल 6 के रूप में, आपको हमारे jQuery कोड में $(document).ready() फ़ंक्शन को शामिल करने की आवश्यकता नहीं है।

इसके बजाय आप Drupal.behaviors की संपत्ति के रूप में असाइन किए गए फ़ंक्शन के अंदर सभी कोड डाल सकते हैं।

की misc/ directory में Drupal स्थापित, हम न केवल jquery.js फ़ाइल है, लेकिन हम भी drupal.js (और कई अन्य js फ़ाइलें, कार्यक्षमता कुछ पेज या व्यवस्थापक सुविधाओं, जैसे अपलोड करने के लिए विशिष्ट नियंत्रित करने की है। जेएस), जो ड्रूपल में jQuery के सामान्य उपयोग को नियंत्रित करता है।

यह उन गुणों के उद्देश्य के लिए ड्रूपल जावास्क्रिप्ट ऑब्जेक्ट की घोषणा करता है जिन्हें अन्य जेएस फाइलों द्वारा एक्सेस और उपयोग करने की आवश्यकता होती है। उदाहरण के लिए, Drupal.settings प्रॉपर्टी का उपयोग मॉड्यूल सेटिंग्स के सरणी को उस मॉड्यूल के लिए जेएस कोड में पास करने के लिए किया जाता है। आप बस अपनी php कोड में drupal_add_js() कॉल और सुनिश्चित करें कि दूसरा पैरामीटर के रूप में "सेटिंग" में पारित हो जाता है बनाने के द्वारा यह करते हैं, उदाहरण के लिए:

drupal_add_js(array('mymodule' => $array_of_settings), 'setting'); 

अपने js फ़ाइल में, फिर, आप उपयोग कर सकते हैं Drupal.settings.mymodule पर ये सेटिंग्स। इस प्रकार आपने Drupal.settings ऑब्जेक्ट को mymodule प्रॉपर्टी के साथ बढ़ाया है, जो स्वयं ही आपकी सभी सेटिंग्स वाली ऑब्जेक्ट है।

ड्रूपल ऑब्जेक्ट की एक अन्य संपत्ति व्यवहार वस्तु है, यानी Drupal.behaviors, और जब हम चाहते हैं कि हमारे मॉड्यूल नए jQuery व्यवहार को जोड़ना चाहते हैं, तो हम बस इस ऑब्जेक्ट को बढ़ाते हैं। अपने मॉड्यूल के लिए पूरे jQuery कोड इस तरह से संरचित किया जा सकता है:

Drupal.behaviors.myModuleBehavior = function (context) 
{ 
    //do some fancy stuff 
}; 

लेकिन, आप सोच रहे होंगे, जो कुछ करता है एक समारोह की घोषणा है - कैसे यह भी कहा जाता जाता है? खैर, जो कि सभी drupal.js में देखे गए हैं। इसमें $(document).ready फ़ंक्शन है जो Drupal.attachBehaviors फ़ंक्शन को कॉल करता है, जो बदले में Drupal.behaviors ऑब्जेक्ट के माध्यम से चक्रों में से प्रत्येक को कॉल करता है, इन सभी कार्यों को ऊपर के रूप में विभिन्न मॉड्यूल द्वारा घोषित किया जाता है, और दस्तावेज़ के रूप में दस्तावेज़ में गुजरता है।

ऐसा करने का कारण यह है कि यदि आपका jQuery कोड AJAX कॉल करता है जिसके परिणामस्वरूप पृष्ठ में नए DOM तत्व जोड़े जा रहे हैं, तो आप अपने व्यवहार (जैसे सभी एच 3 तत्वों या जो कुछ भी छिपाने के लिए) को जोड़ सकते हैं वह नई सामग्री भी। लेकिन चूंकि यह मौजूद नहीं था जब डोम लोड हो गया था और Drupal.attachBehaviors भाग गया था, इसमें कोई व्यवहार संलग्न नहीं है।उपरोक्त सेट-अप के साथ, आपको केवल Drupal.behaviors.myModuleBehavior(newcontext) पर कॉल करने की आवश्यकता है, जहां newcontext नई, AJAX- वितरित सामग्री होगी, इस प्रकार यह सुनिश्चित करना होगा कि व्यवहार पूरे दस्तावेज़ से फिर से संलग्न न हों। इस कोड का उपयोग करने के तरीके के पूर्ण उदाहरण के लिए यहां देखें

+0

असल में, आपको Drupal.attachBehaviors (newcontext) को कॉल करना चाहिए ताकि सभी पंजीकृत व्यवहार नएcontext तत्व (और उसके बच्चों) को संसाधित कर सकें। –

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