CSS और JS को अटैचमेंट के साथ जोड़ना


36

मुझे कुछ बाहरी और स्थानीय CSS और जावास्क्रिप्ट फ़ाइलों को एक फॉर्म में जोड़ने की आवश्यकता है, लेकिन मुझे ऐसा करने का सही तरीका नहीं मिल रहा है। क्या मैं जेएस और सीएसएस फाइलों के लिए केवल पथ और URL जोड़ सकता हूं?

मैं मानता हूं $form['#attached']['css'][]और $form['#attached']['js'][]ऐसा करने के लिए सही स्थान हैं, इसलिए वे फॉर्म रीबिल्ड पर फिर से लोड हो जाते हैं। मुझे कुछ याद आ रहा है।

जवाबों:


70

क्या आपने प्रलेखन को देखा है?

CSS और JS संलग्न करें

http://api.drupal.org/api/drupal/developer!topics!forms_api_reference.html/7#attached

$form['#attached']['css'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.css';

$form['#attached']['js'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.js';

बाहरी फाइलें

http://api.drupal.org/api/drupal/includes%21common.inc/function/drupal_process_attached/7

बाहरी 'js' और 'css' फाइलें भी लोड की जा सकती हैं। उदाहरण के लिए:

$build['#attached']['js']['http://code.jquery.com/jquery-1.4.2.min.js'] = array('type' => 'external');

मेरे पास है। क्या आप मुझे बता सकते हैं कि यह बाहरी सीएसएस फाइलों को कैसे संभालना है?
vintorg


2
बस एक नोट - आप <module name>_form_<form id>_alterअपने मॉड्यूल में नामित फ़ंक्शन को जोड़कर जावास्क्रिप्ट को ऊपर निर्दिष्ट रूप में जोड़ सकते हैं। फॉर्म आईडी ढूंढने का वर्णन यहां किया गया है: drupal.stackexchange.com/questions/5802/…
Nux

1
यह उदाहरण थोड़े बुरा है क्योंकि आप मान रहे हैं कि यह फॉर्म पर केवल लगाव होगा!
डबलजोश

6
Doublejosh द्वारा टिप्पणी का अर्थ है: आमतौर पर किसी को इसे बदलने के बजाय सरणी में जोड़ना चाहिए। तो उदाहरण $form['#attached']['css'][] = drupal_get_path('module', 'ajax_example') . '/ajax_example.css';आदि होना चाहिए ..
तानीस

11

यहाँ इनलाइन CSS को फॉर्म में जोड़ने की विधि है ...

$form['#attached']['css'][] = array(
  'data' => '.my-example-element { display: none; }',
  'type' => 'inline',
);

ध्यान दें कि आपको इसे बदलने के बजाय सीएसएस सरणी में जोड़ना चाहिए । मतलब आपको उपयोग करना चाहिए: इसके बजाय अन्य परिवर्धन से बचने के लिए।['css'][] =['css'] =


6

यहाँ ऐसा करने का एक तरीका है। #after_buildसंपत्ति का उपयोग करके एक फ़ंक्शन कॉल करना । बस स्विच फॉर्म में अपनी फॉर्म आईडी भरें।

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  switch ($form_id) {
    case 'my_form':
      $form['#after_build'][] = 'mymodule_after_build';
      break;
  }
}

function mymodule_after_build($form, &$form_state) {
  $path = drupal_get_path('module', 'mymodule');
  drupal_add_js ("$path/mymodule.js");
  return $form; 
}

इसके अलावा आप इस अच्छे ट्यूटोरियल का अनुसरण करके सीएसएस और जेएस को ड्रूपल फॉर्म में जोड़ सकते हैं

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


जबकि यह अभी भी Drupal 7 में काम करता है, यह एक D6 हैक लगता है , इसकी आवश्यकता है क्योंकि #attachedD6 में मौजूद नहीं था
तानीस

आपको drupal_add_jsएक फॉर्म पर उपयोग नहीं करना चाहिए । आप सत्यापन राज्य की समस्या से समाप्त करेंगे।
21

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