मेरे विषय में निर्मित jQuery यूआई का उपयोग करना


25

मेरी थीम के प्रत्येक पृष्ठ को jquery UI का उपयोग करना होगा। मुझे पता है कि यह ड्रुपल 7 के साथ शामिल है, लेकिन मैं वास्तव में ड्रुपल के तरीके-भी-तकनीकी प्रलेखन को समझ नहीं सकता। यह ऐसा करने का एकमात्र तरीका है। यह टेम्पलेट.फैप फ़ाइल के साथ है। लेकिन जब से मुझे वह फाइल समझ नहीं आ रही है, मैं इसे इस तरह करने से बचने की कोशिश कर रहा हूं।

वहाँ एक और तरीका है, या मैं सिर्फ template.php फ़ाइल की कोशिश करनी चाहिए?


तुम क्या करने की कोशिश कर रहे हो? सभी jquery UI फ़ंक्शन और आपके लिए उपलब्ध नहीं होना चाहिए। हर पृष्ठ पर कस्टम जेएस कोड निष्पादित करें? एक विशिष्ट पृष्ठ पर इसे निष्पादित करें? एक विशिष्ट घटना? जेएस को निष्पादित करने के लिए बहुत सारे तरीके हैं, अर्थात् drupal_add_js
LSU_Jbus

मैं कुछ फ़ील्ड्स पर .atepicker () का उपयोग करने का प्रयास कर रहा हूं, जो मेरी थीम के हर एक पृष्ठ में दिखाई देते हैं। शायद कुछ और सामान बाद में भी।
बेन

यदि कोई जवाब आपकी समस्या हल करता है तो @ इनाम को याद रखें।
googletorp

@googletorp क्षमा करें, मेरा पहला इनाम। बाउंटी को सम्मानित किया।
बेन

मुझे ऐसा लगता है कि बहुत से उत्तर अंतिम चरण को छोड़ देते हैं, कि एक बार आप drupal_add_library ('सिस्टम', 'ui.button') या जो कुछ भी शामिल करते हैं, आपको अपने विषय में एक या दो जावास्क्रिप्ट लाइन जोड़ने की आवश्यकता होती है जो वास्तव में कहा जाता है लगाना।
रयान प्राइस

जवाबों:


36

JS को एक पृष्ठ में जोड़ना वास्तव में उतना कठिन नहीं है, भले ही आपको php का उपयोग करने की आवश्यकता हो।

सामान्य जेएस फाइलों के लिए, आप ऐसा कुछ कर सकते हैं

drupal_add_js($path_to_js)

Drupal ने हालांकि jQuery UI को पुस्तकालयों में पंजीकृत किया है, जिससे कुछ jQuery UI प्लगइन्स के लिए JS और CSS दोनों फाइलों को जोड़ना आसान हो गया है। यह प्रयोग करके किया जा सकता है

drupal_add_library($module, $library);

सभी jQuery यूआई प्लगइन्स सिस्टम मॉड्यूल में मौजूद हैं, इसलिए आप कर सकते हैं

drupal_add_library('system', 'ui');

या

drupal_add_library('system', 'ui.accordion');

इनमें से कुछ प्लगइन्स पर निर्भरता है क्योंकि वे अन्य प्लगइन्स का उपयोग करते हैं। ड्रुपल इसे बहुत चतुराई से संभालता है और इसमें आवश्यक घटक शामिल होंगे।

आप यहाँ jQuery प्लगइन्स की पूरी सूची देख सकते हैं । यह एक PHP सरणी के रूप में स्वरूपित किया गया है, लेकिन आमतौर पर नामकरण सम्मेलन ui.PLUGIN-NAME है।

यदि आपको हर पृष्ठ पर JS जोड़ने की आवश्यकता है तो आप बस एक प्रीप्रोसेस पेज हुक जोड़ सकते हैं और उन्हें वहां जोड़ सकते हैं। यह कुछ इस तरह से दिखाई देगा। टेम्पलेट फ़ाइल में।

function NAME_OF_THEME_preprocess_page(&$variables) {
  drupal_add_library('system', 'ui');
  drupal_add_library('system', 'ui.accordion');
  drupal_add_library('system', 'effects.highlight');
}

मैंने ठीक वही जोड़ने की कोशिश की जो आपके यहाँ है (लेकिन NAME_OF_THEME के ​​स्थान पर मेरे थीम नाम का उपयोग करके) template.php पर और यह काम नहीं किया। कोई विचार? यह मेरे पास है: function nocturnal_preprocess_page(&$variables) { drupal_add_library('system', 'ui'); drupal_add_library('system', 'ui.datepicker'); }
बेन

@ आपको हर बार जब आप एक नया हुक या प्रीप्रोसेस फ़ंक्शन जोड़ते हैं, तो आपको कैश साफ़ करने की आवश्यकता होती है। कैश साफ़ करने का प्रयास करें। आपको यह जांचने के लिए भी एक तरीके की आवश्यकता है कि यह काम करता है, क्योंकि आप केवल जेएस फाइलें जोड़ रहे हैं जो स्वयं कुछ भी नहीं करेंगे।
googletorp

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

@Ben प्रथम चरण यदि फ़ाइलें शामिल किया गया है (अक्षम जे एस एकत्रीकरण चालू होने पर) स्रोत को देखो और देखने के लिए है
googletorp

3
@ एंजोगलेटोर्प: क्या आप अंतर betweeen पर थोड़ा विस्तार कर सकते हैं drupal_add_library('system', 'ui');और drupal_add_library('system', 'ui.accordion');? क्या पहले वाला सब कुछ हासिल कर रहा है या सिर्फ कोर? क्या मुझे उपयोग किए जाने वाले प्रत्येक प्लगइन के लिए एक पंक्ति की आवश्यकता है?
जरल २

4

क्या आपने date_popup मॉड्यूल आज़माया है? फॉर्म एपीआई के साथ अच्छा काम करता है


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

आपको किसी भी साइट से किसी भी jquery ui सामान को कॉल करने और इसे जोड़ने में सक्षम होना चाहिए, यह ड्रूपल कोर में है। फॉर्म एपीआई के साथ बनाया गया है?
एलएसयू_जेबस

2
टेम्प्लेट फ़ाइलों में फॉर्म क्यों बनाया गया है? यह बहुत शराबी नहीं है ... यदि आप फॉर्म एपीआई का उपयोग नहीं कर रहे हैं तो आप कुछ लाभों को याद कर रहे हैं, जैसे कि सेल्युलर हमलों से अंतर्निहित सुरक्षा। मैं दृढ़ता से आपके प्रपत्रों को टेम्प्लेट फ़ाइलों से बाहर निकालने की सिफारिश करूंगा और एक कस्टम मॉड्यूल लिखूंगा जहां आप फॉर्म एपीआई का उपयोग करके फॉर्म बनाते हैं। कोशिश करें कि वह चरवाहे न बनें। किसी भी घटना में, आप drupal_add_js का उपयोग करके कहीं से भी जावास्क्रिप्ट को संदर्भित कर सकते हैं, कुछ इस तरह की drupal_add_js ('/ misc / ui / jquery.ui.core.min.js', 'file'); और drupal_add_js ('/ misc / ui / jquery.ui.datepicker.js', 'file');
LSU_JBob

3
प्रपत्र API का उपयोग करके कस्टम मॉड्यूल में फ़ॉर्म बनाएं, फिर tpl फ़ाइलों में कॉल रेंडर (drupal_get_form ('form_id')); मैं प्रपत्र एपीआई का वादा करता हूं, शायद कुछ कस्टम जावास्क्रिप्ट के साथ, आपके पास किसी भी जटिल आवश्यकता को संभाल सकता है। मुझे लगता है कि आप केवल इस कार्यक्षमता के सभी को एक tpl फ़ाइल में रटना करने की कोशिश करके चीजों को खुद पर कठिन बना रहे हैं। यह तकनीकी रूप से थीम लेयर है, इसलिए उन में कार्यात्मक बैक-एंड कोड के बड़े हिस्से में प्लॉप करना सबसे अच्छा अभ्यास नहीं है।
LSU_JBob

3
मुझे लगता है कि वह कह रहा है बनाएँ एक मॉड्यूल। कार्यात्मक चीजें, जैसे फॉर्म, मॉड्यूल में हैं। फॉर्म एपीआई आपको किसी भी प्रकार का फॉर्म बनाने की अनुमति देता है जिसकी आप अपने स्वयं के कस्टम मॉड्यूल में कल्पना कर सकते हैं। विषय ज्यादातर मामलों में कार्यक्षमता से स्वतंत्र होना चाहिए। यह आपको सड़क पर अधिक लचीलापन देगा।
जोनाथन रॉनी

4
  1. .Tpl फ़ाइल में अपने हार्ड-कोडित फ़ॉर्म को एक API एपीआई कार्यान्वयन में रिफ्लेक्टर करें। जैसे @LSU_JBob ने कहा, ऐसा कोई कारण नहीं है कि आपको FAPI का उपयोग किए बिना एक फॉर्म तैयार करना चाहिए। मेरा सुझाव है कि आप फॉर्म एपीआई क्विकस्टार्ट गाइड पढ़ें , और फॉर्म एपीआई संदर्भ पृष्ठ को बुकमार्क करें ।
  2. एक बार जब आप अपना फॉर्म बना लेते हैं और आप इसे मान सबमिट करने में सक्षम हो जाते हैं, तो इसे प्रोसेस करते हैं, आदि, डेट कॉन्ट्रिब मॉड्यूल में कोड डाउनलोड और पढ़ सकते हैं । तिथि का उपयोग उस प्रकार के दिनांक पॉपअप को प्रदान करने के लिए किया जाता है जिसे आप बनाना चाहते हैं, लेकिन D6 में CCK और D7 में कोर फ़ील्ड के लिए। हालाँकि, आप फ़ील्ड के साथ काम नहीं कर रहे हैं, डेट मॉड्यूल JQuery UI का उपयोग करता है ताकि आप जो करने की कोशिश कर रहे हैं उसे पूरा कर सकें। इस मॉड्यूल को आपको एक ठोस उदाहरण देना चाहिए।

धन्यवाद। वे लिंक सहायक हैं। मैं वास्तव में PHP में आना पसंद नहीं करता, लेकिन मुझे लगता है कि मैं इस मामले में वही करना चाहता हूं, जो मुझे करना है। मैं शायद इसे समय के लिए tpl फ़ाइल में रखूँगा, क्योंकि मेरे पास इस समय Drupal PHP सीखने का समय नहीं है। हालांकि हर किसी से अच्छी सलाह।
बेन

3

googletorpइसका उत्तर देने के लिए धन्यवाद ।

बस जोड़ने के लिए, अगर चीजें अभी भी यूआई प्लगइन्स को सक्षम करने से संबंधित बहुत स्पष्ट नहीं हैं ।

कृपया ध्यान दें कि जब आप उल्लेख करेंगे: drupal_add_library('system', 'ui');
यह सभी यूआई प्लगइन्स को स्वचालित रूप से सक्षम नहीं करेगा।

आप ड्रुपल 7 में उपलब्ध jquery यूआई प्लगइन्स की सूची यहां पा सकते हैं: /misc/ui/

एक पर्टिकुलर प्लगइन सक्षम करने के लिए, फॉरेक्सप्लिमेंट: jquery.ui.slider.min.jsआपको इस लाइन को जोड़ने की आवश्यकता है:

drupal_add_library('system', 'ui.slider');

आशा है कि यह उपयोगी है।


2

मुझे हाल ही में यह समस्या थी। किसी ने मुझे JQuery UI को हर पृष्ठ पर लोड करने के लिए मजबूर करने के लिए अपना कस्टम मॉड्यूल दिया। आप इसे बस फिर से बना सकते हैं। सबसे पहले, jquery_update इंस्टॉल करें और सुनिश्चित करें कि यह काम कर रहा है। फिर, इस मॉड्यूल को बनाएं और सक्षम करें:

'Jquery_force' नाम के पथ / / से मॉड्यूल में एक फ़ोल्डर बनाएँ।

अंदर, दो फ़ाइलें जोड़ें:

jquery_force.info :

name = JQuery UI Force
description = Forces JQuery UI to always load
dependencies[] = jquery_update
package = User Interface
core = 7.x
files[] = jquery_force.module

jquery_force.module :

<?php
/**
 * @file jquery_force.module
 * TODO: Enter file description here.
 */

/**
 * Implements hook_init().
 */
function jquery_force_init() {
    drupal_add_library('system', 'ui');
}

2

template.phpफ़ाइल में प्रीप्रोसेस हुक जोड़ना मेरे लिए काम नहीं करता था।

मैं बस डाल drupal_add_library('system', 'ui');में template.phpअपने आप में फ़ाइल, काम करता है।

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