2008-09-14 6 views
23

क्या Drupal 6. में एक विशिष्ट नोडDrupal में विशिष्ट नोड के लिए सीएसएस या जावास्क्रिप्ट फ़ाइल शामिल करें 6

मैं एक है कि अपनी साइट पर एक पृष्ठ बनाना चाहते हैं के लिए एक सीएसएस या जावास्क्रिप्ट फ़ाइल सहित के लिए सबसे अच्छा तरीका है थोड़ा जावास्क्रिप्ट एप्लिकेशन चल रहा है, इसलिए सीएसएस और जावास्क्रिप्ट उस पृष्ठ के लिए विशिष्ट है और अन्य पेज लोड में शामिल नहीं होना चाहेंगे।

उत्तर

3

अब तक का सबसे अच्छा समाधान PHP इनपुट मोड को सक्षम करना है, और उसके बाद drupal_add_css और drupal_add_js को अपने नोड के शरीर की शुरुआत में एक PHP ब्लॉक में उपयुक्त के रूप में कॉल करें।

+0

मैंने इस तकनीक को ड्रूपल 5 में और अधिक उपयोग किया है। उदाहरण के लिए, इस साइट के सामने वाले पृष्ठ पर "क्लब कैलेंडर" इस ​​तरह कार्यान्वित किया गया था। http://www.chesmontastro.org/ –

+4

यह सबसे आसान समाधान हो सकता है, लेकिन जल्दी से असंभव हो जाता है, क्योंकि डेटाबेस में PHP कोड संग्रहीत करना बहुत मुश्किल है, और संशोधन नियंत्रण लगभग असंभव है। उपरोक्त इनफेरिस समाधान एक बहुत साफ दृष्टिकोण है। – jhedstrom

0

आपके पास उस नोड (node-needsjs.tpl.php) के लिए एक कस्टम टेम्पलेट हो सकता है जो जावास्क्रिप्ट को कॉल करता है। यह नोड बॉडी में PHP का उपयोग करने से थोड़ा क्लीनर है, और भविष्य में सामग्री को आसान बनाता है।

संपादित करें: मुझे नहीं लगता कि मैं ऊपर बहुत स्पष्ट था। आप टेम्पलेट फ़ाइल नोड- (nodeid) .tpl.php नाम देना चाहते हैं। तो अगर यह नोड 1 था, तो फ़ाइल नोड-1.tpl.php

+0

मुझे वास्तव में यह जवाब बेहतर ढंग से सोचना चाहिए था - एक कस्टम टेम्पलेट फ़ाइल का उपयोग करने का एक और लाभ टेम्पलेट का उपयोग करने के लिए टेम्पलेट का उपयोग करने के लिए अन्य नोड्स को टेम्पलेट_preprocess_page फ़ंक्शन टेम्पलेट.php में करने की क्षमता है। – MattBelanger

2

यह चाल चलाना चाहिए - एक त्वरित मॉड्यूल जो hook_nodeapi का उपयोग करता है ताकि नोड को देखा जाने पर JS/CSS डालने के लिए उपयोग किया जा सके।

function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) { 
    // the node ID of the node you want to modify 
    $node_to_modify = 6; 

    // do it! 
    if($op == 'view' && $node->nid == $node_to_modify) { 
    drupal_add_js(drupal_get_path('module', 'mymodule') . '/mymodule.js'); 
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/mymodule.css'); 
    } 
} 

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

14

मैं इसके लिए hook_nodeapi का उपयोग करने के खिलाफ सलाह दूंगा। सीएसएस और जावास्क्रिप्ट जोड़ना लेआउट से संबंधित है इसलिए hook_nodeapi इसके लिए जगह नहीं है: थीमिंग का उपयोग करें। इस तरह, आप उन फ़ाइलों को ओवरराइड कर सकते हैं जब आप एक नई थीम विकसित करने जा रहे हैं। ऐसा करना कि नोडापी दृष्टिकोण के साथ थोड़ा कठिन होगा (आपको फ़ाइलों के लिए जेएस/सीएसएस सूची खोजनी होगी, उन्हें हटा दें और उन्हें स्वयं से बदलें)।

वैसे भी: आपको जो करना है वह एक नोड प्रीप्रोसेस फ़ंक्शन जोड़ना है जो आपके लिए उन फ़ाइलों को जोड़ता है। आप इसे मॉड्यूल में या कस्टम थीम में कर सकते हैं। एक मॉड्यूल के लिए यह होगा:

function mymodule_preprocess_node(&$variables) { 
    $node = $variables['node']; 
    if (!empty($node) && $node->nid == $the_specific_node_id) { 
    drupal_add_js(drupal_get_path('module', 'mymodule') . "/file.js", "module"); 
    drupal_add_css(drupal_get_path('module', 'mymodule') . "/file.css", "module"); 
    } 
} 

या एक विषय के लिए:

function mytheme_preprocess_node(&$variables) { 
    $node = $variables['node']; 
    if (!empty($node) && $node->nid == $the_specific_node_id) { 
    drupal_add_js(path_to_theme() . "/file.js", "theme"); 
    drupal_add_css(path_to_theme(). "/file.css", "theme"); 
    } 
} 

कैश को साफ़ करने के लिए, पहले मत भूलना।

इन कार्यों को नोड थीम्ड से पहले बुलाया जाता है। जेएस/सीएसएस निर्दिष्ट करने से वहां एक कैस्केड दृष्टिकोण की अनुमति मिलती है: आप मॉड्यूल में सामान्य/मूलभूत सामग्री प्राप्त कर सकते हैं और विषय में उन्नत या विशिष्ट कार्यक्षमता प्रदान कर सकते हैं।

+0

थोड़ा सुधार: जब आप थीम में एक सीएसएस जोड़ते हैं, तो आपको drupal_add_css कॉल के बाद शैलियों चर को अद्यतन करना होगा, उदा। $ चर ['शैलियों'] = drupal_get_css(); – Pianosaurus

5

मैं प्रीप्रोसेस फ़ंक्शंस का उपयोग करता हूं लेकिन इसमें कुछ समस्याएं हैं। $variables['styles'] आमतौर पर से पहले नोड प्रीप्रोसेस फ़ंक्शन कहा जाता है। दूसरे शब्दों में drupal_get_css पहले से ही कॉल किया गया है जो आपको drupal_add_css बेकार कहता है। यह drupal_add_js के लिए जाता है। मैं $variables['styles'] मान को रीसेट करके इसके आसपास काम करता हूं।

function mytheme_preprocess_node(&$variables) { 
    $node = $variables['node']; 
    if (!empty($node) && $node->nid == $the_specific_node_id) { 
    drupal_add_js(path_to_theme() . "/file.js", "theme"); 
    drupal_add_css(path_to_theme(). "/file.css", "theme"); 
    $variables['styles'] = drupal_get_css(); 
    $variables['script'] = drupal_get_js(); 
    } 
} 

यह ज्यादातर मामलों के लिए काम करता प्रतीत होता है।

पीएसथीमिंग समस्या को हल करने के लिए मॉड्यूल बनाने की कभी भी आवश्यकता नहीं है।

चीयर्स।

4

यह एक अच्छा समाधान की तरह लगता है:

http://drupal.org/project/js_injector और http://drupal.org/project/css_injector

यह काम करता है जब आप ऐसा कोई नोड आईडी और कोई पीएचपी इनपुट विकल्प तकनीकी रूप से एक नोड के अलावा कुछ में इनलाइन कोड सम्मिलित करना चाहते हैं उपलब्ध। जैसे मैंने इसे कुछ व्यवस्थापक पृष्ठों में छोटे jQuery tweaks इंजेक्षन करने के लिए इस्तेमाल किया। यह नोड आईडी के बजाय पथ द्वारा काम करता है।

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