JS और CSS को नोड / एडिट और अन्य रूपों में जोड़ने का सही तरीका


10

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

लेकिन मैं कैश के साथ कुछ मुद्दे रख रहा हूं। मेरे उदाहरण में मुझे JS & CSS को नोड एडिट फॉर्म में जोड़ना है। मैंने हुक_ब्लॉक_व्यू का उपयोग किया है, लेकिन यह कैश्ड है। इसलिए यदि नोड एडिट फॉर्म में कोई त्रुटि है, तो drupal_add_js और drupal_add_css फ़ंक्शन नहीं कहलाते हैं। ऐसा ही लगता है कि हुक_नोड_प्रेम के लिए सही है।

आप JS & CSS लेयर को कहां से इनपुट करेंगे? और क्या ऐसे नोड हैं जो नोड एडिट फॉर्म में कोई त्रुटि होने पर भी कॉल किए जाते हैं?

जवाबों:


6

यदि आप विशेष रूप से (या सामान्य रूप से किसी भी रूप) में JS और CSS को जोड़ना चाहते हैं, तो ऐसा करने के लिए सबसे अच्छा और सही स्थान है हुक_फॉर्म_ल्टर () और आपके द्वारा उपयोग की जाने वाली संपत्ति #after_build है।

डीओ की यह टिप्पणी आपको बताती है कि वास्तव में क्या करना है - http://drupal.org/node/1253520#comment-488888

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


धन्यवाद, बस मुझे क्या चाहिए। एक अच्छा रूप अब मिल गया है, डिफ़ॉल्ट रूप से वह जितना बेहतर है। ऐसी साइट की वास्तुकला के बारे में कोई राय?
जेन्स

खुशी है कि यह काम किया। जब ऐसा होता है तो आपको उत्तर को 'स्वीकृत' के रूप में चिह्नित करना चाहिए, इसलिए यह प्रश्न अनुत्तरित प्रश्नों की सूची में दिखाई नहीं देता है और आपकी मदद करने वाले व्यक्ति को "कर्म" मिलता है। मैं देख रहा हूं कि आप यहां नए हैं। मैं भी हूं, लेकिन मेरे पास अन्य StackOverflow सेवाओं पर अधिक सक्रिय खाते हैं, और मुझे यह जगह पसंद है।
सुमीत पारी

और ओह .. यह जानते हुए भी कि आपको एक फॉर्म पर JS CSS की आवश्यकता है और साइट की वास्तुकला पर टिप्पणी करने की कोशिश करना किसी अपराध से कम नहीं होगा :-p
सुमीत पारी

जरूर, अभी जवाब दिया।
जेन्स

1
@SumeetPareek मैंने आपके उत्तर को अस्वीकार कर दिया (लेकिन कोई अपराध नहीं है) क्योंकि उपयोग करने #attachedकी सिफारिश लगभग किसी भी मामले में की जाती है। इसके अलावा, drupal_add_js / css को Drupal 8. में
चित्रित

6

आपको यह सुनिश्चित करने के लिए # सट्टा संपत्ति का उपयोग करना चाहिए कि जेएस / सीएसएस हमेशा एक और रेंडर तत्व के साथ ठीक से लोड होता है।


मुझे लगा कि यह वास्तव में कैसे उपयोग करने के एक उदाहरण से लाभ होगा #attached, और शायद आप जिस समस्या से बच रहे हैं, उसके बारे में कुछ अतिरिक्त जानकारी।
माइकल ग्रीमैन

@MichaelGreisman मुझे कहना है कि मैं तुरंत कोड इनलाइन को जोड़ने का मूल्य नहीं देखता। मेरे द्वारा दिए गए लिंक पर इसे बेहतर बनाए रखा जाएगा, जो इसे कैसे करना है, इस पर आधिकारिक दस्तावेज है। मेरा जवाब बताता है कि क्या करना है, लेकिन फॉर्म एपी प्रलेखन कैसे के लिए सही जगह है ।
लेटेरियन

3

मैंने इन उत्तरों और टिप्पणियों को सख्त उदाहरण कोड की आवश्यकता महसूस की, विशेष रूप से @AyeshK और @Letharion के। यह एक टिप्पणी के लिए बहुत लंबा है, इसलिए कृपया उत्तर माफ़ करें। यदि यह आपके लिए उपयोगी है, तो कृपया सुमीत या सुथारियन के जवाब को वोट करें। साथ ही, निम्न उदाहरण स्पष्ट रूप से CSS जोड़ता है, लेकिन जावास्क्रिप्ट जोड़ने के लिए लगभग समान होगा।

@ सुमीत के जवाब का उपयोग करना, लेकिन #attachedइसके बजाय संपत्ति का उपयोग करना drupal_add_css, इस तरह दिखता है:

/* Implements hook_form_FORM_ID_alter() */
function MY_MODULE_form_MY_FORM_ID_alter(&$form, &$form_state, $form_id) {
  $form['#after_build'][] = 'MY_MODULE_some_function_name_after_build';
}

function MY_MODULE_some_function_name_after_build($form, &$form_state) {
  $style_path = drupal_get_path('module','MY_MODULE') . '/css/my_css.css';
  // drupal_add_css('file', $style_path);
  $form['#attached']['css'][] = $style_path;
  return $form;
}

अंत में, इस पद का पदावनत drupal_add_cssपाया जा सकता है । यह कई लोगों के लिए खबर हो सकती है जिनके लिए drupal_add_xxx ठीक काम कर रहा था, जैसा कि यह मेरे लिए था।


#after_buildबिट मेरी जानकारी बकवास का सबसे अच्छा करने के लिए, है, और बस हटा दिया जाना चाहिए। ( #after_buildसमाधान प्रदान करने वाले उत्तर पर एक समान टिप्पणी है ) मुझे लगता है कि यह अपने आप में यह बताता है कि मेरा संक्षिप्त उत्तर क्यों अच्छा है। यदि आप सरल मेरे द्वारा दिए गए लिंक को देखते हैं, तो आपको एक ही कोड मिलेगा, लेकिन अनावश्यक बिट्स के बिना।
सुस्ती

0

Drupal 8 के लिए, मैं आपको इस लेख को देखने की सलाह दूंगा

libraries.yml

something: 
  version: VERSION
  js: 
    js/something.js: {}
  dependencies: 
    - core/jquery

।मापांक

function MODULE_page_attachments(array &$page) {
  $page['#attached']['library'][] = MODULE/something;
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.