प्रशासनिक पृष्ठों पर जावास्क्रिप्ट फाइलें जोड़ें


18

मैं मॉड्यूल का उपयोग करके प्रत्येक प्रशासन पृष्ठों में जावास्क्रिप्ट / सीएसएस फाइलें कैसे जोड़ूं?

जवाबों:


25

मॉड्यूल का उपयोग करके, आप दो तरीकों का पालन कर सकते हैं:

पहली विधि आपको अतिरिक्त जावास्क्रिप्ट (या CSS) फ़ाइलों को किसी भी प्रशासन पृष्ठों में जोड़ने की अनुमति देगी, जबकि दूसरी विधि आपको उन फ़ाइलों को केवल पृष्ठों वाले रूपों में जोड़ने की अनुमति देगी।

function mymodule_init() {
  if (arg(0) == 'admin') {
    $path = drupal_get_path('module', 'mymodule');
    drupal_add_js($path . '/mymodule.js');
    drupal_add_css($path . '/mymodule.css');
  }
}
function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if (arg(0) == 'admin') {
    $path = drupal_get_path('module', 'mymodule');  
    $form['#attached']['css'][] = $path . '/mymodule.css';
    $form['#attached']['js'][] = $path . '/mymodule.js';
  }
}

अपने मॉड्यूल के संक्षिप्त नाम के साथ "मायमॉड्यूल" बदलें; जावास्क्रिप्ट और सीएसएस फ़ाइलों के वास्तविक नामों के साथ "mymodule.js" और "mymodule.css" को बदलें।

system_init () में निम्न कोड होते हैं, जो प्रशासनिक पृष्ठों में विशिष्ट फाइलें जोड़ने के लिए होते हैं।

  $path = drupal_get_path('module', 'system');
  // Add the CSS for this module. These aren't in system.info, because they
  // need to be in the CSS_SYSTEM group rather than the CSS_DEFAULT group.
  drupal_add_css($path . '/system.base.css', array('group' => CSS_SYSTEM, 'every_page' => TRUE));

  // Add the system.admin.css file to the administrative pages.
  if (path_is_admin(current_path())) {
    drupal_add_css($path . '/system.admin.css', array('group' => CSS_SYSTEM));
  }

  drupal_add_css($path . '/system.menus.css', array('group' => CSS_SYSTEM, 'every_page' => TRUE));
  drupal_add_css($path . '/system.messages.css', array('group' => CSS_SYSTEM, 'every_page' => TRUE));
  drupal_add_css($path . '/system.theme.css', array('group' => CSS_SYSTEM, 'every_page' => TRUE));

path_is_admin () वह कार्य है जिसे इसके प्रलेखन में वर्णित किया गया है:

निर्धारित करें कि क्या कोई पथ साइट के प्रशासनिक अनुभाग में है।

इस बात पर विचार करें कि कुछ नोड-संबंधित पथ, जैसे कि node/<nid>/edit, प्रशासकीय अनुभाग में शामिल किए जा सकते हैं, जो व्यवस्थापक / उपस्थिति पर पाई गई सेटिंग पर निर्भर करता है।

स्क्रीनशॉट

नोड पथों की सूची जो प्रशासनिक पृष्ठों में शामिल की जा सकती है, उन्हें नोड_डमिन_पैथ्स () से वापस कर दिया गया है ।

  if (variable_get('node_admin_theme')) {
    $paths = array(
      'node/*/edit' => TRUE, 
      'node/*/delete' => TRUE, 
      'node/*/revisions' => TRUE, 
      'node/*/revisions/*/revert' => TRUE, 
      'node/*/revisions/*/delete' => TRUE, 
      'node/add' => TRUE, 
      'node/add/*' => TRUE,
    );
    return $paths;

यदि, किसी भी कारण से, आपको नोड / * जैसे पथ वाले किसी भी पृष्ठ से बचने की आवश्यकता है, तो आपको उन से बचने के लिए विशिष्ट कोड जोड़ने की आवश्यकता है, यदि आप उपयोग कर रहे हैं path_is_admin() । विचार करें कि कोई भी मॉड्यूल उन पृष्ठों को बदल सकता है जिन्हें प्रशासनिक पृष्ठों का हिस्सा माना जाता है।

दोनों ही मामलों में, वैकल्पिक एक पुस्तकालय का उपयोग किया जाएगा, अगर मॉड्यूल हुक निम्नलिखित के समान कोड के साथ हुक (_) को लागू करता है।

function mymodule_library() {
  $path = drupal_get_path('module', 'mymodule');

  $libraries['mymodule.library'] = array(
    'title' => 'MyModule Library', 
    'version' => '1.0', 
    'js' => array(
      $path . '/mymodule.js' => array(),
    ), 
    'css' => array(
      $path . '/mymodule.css' => array(
        'type' => 'file', 
        'media' => 'screen',
      ),
    ),
  );

  return $libraries;
}

इस मामले में, पिछला कार्यान्वयन hook_form_alter()निम्नलिखित बन जाएगा।

function mymodule_form_alter(&$form, &$form_state, $form_id) {
  if (arg(0) == 'admin') {
    $form['#attached']['library'][] = array('mymodule', 'mymodule.library');
  }
}

कॉल करने के बजाय drupal_add_js(), और drupal_add_css(), कोड को कॉल करना चाहिए drupal_add_library('mymodule', 'mymodule.library')

उपयोग करने hook_library()का समर्थक है:

  • पुस्तकालयों के बीच निर्भरता स्वचालित रूप से नियंत्रित की जाती है। यही system_library () के मामले में होता है, जो निम्नलिखित परिभाषाओं का उपयोग करके दो पुस्तकालयों को परिभाषित करता है।

      // Drupal's form library.
      $libraries['drupal.form'] = array(
        'title' => 'Drupal form library', 
        'version' => VERSION, 
        'js' => array(
          'misc/form.js' => array(
            'group' => JS_LIBRARY,
            'weight' => 1,
          ),
        ),
      );
    
      // Drupal's collapsible fieldset.
      $libraries['drupal.collapse'] = array(
        'title' => 'Drupal collapsible fieldset', 
        'version' => VERSION, 
        'js' => array(
          'misc/collapse.js' => array('group' => JS_DEFAULT),
        ), 
        'dependencies' => array(
          // collapse.js relies on drupalGetSummary in form.js
          array('system', 'drupal.form'),
        ),
      );

    कॉल करना drupal_add_library('system', 'drupal.collapse'), misc / पतन। Js और misc / form.js दोनों शामिल होंगे।

  • लाइब्रेरी से जुड़ी सीएसएस फाइलें स्वचालित रूप से जावास्क्रिप्ट फाइलों के साथ लोड की जाएंगी।

  • जब भी पुस्तकालय अधिक जावास्क्रिप्ट, या सीएसएस फ़ाइलों का उपयोग करेगा, पुस्तकालय को शामिल करने के लिए कोड नहीं बदलेगा; यह अभी भी उपयोग किया जाएगा $form['#attached']['library'][] = array('mymodule', 'mymodule.library');, या drupal_add_library('mymodule', 'mymodule.library')

 

जब आप arg () का उपयोग कर सकते हैं तो current_path () का उपयोग करने की कोई आवश्यकता नहीं है । यदि वर्तमान पृष्ठ के लिए पथ व्यवस्थापक / संरचना / ब्लॉक है, तो

  • arg(0) वापस होगा "admin"
  • arg(1) वापस होगा "structure"
  • arg(2) वापस होगा "block"

अपडेट करें

hook_init()Drupal 8. Drupal 8 के लिए विकल्प से अब और नहीं किया जाता है उपयोग कर रहा है hook_form_alter(), hook_page_attachments()या hook_page_attachements_alter()hook_page_build()और hook_page_alter()अब Drupal 8 में उपयोग नहीं किया जाता है।
मैंने जावास्क्रिप्ट लाइब्रेरी का उपयोग करने के बारे में जो कहा है वह अभी भी सही है, भले ही यह #attachedएक पृष्ठ पर एक पुस्तकालय (या जावास्क्रिप्ट फ़ाइल, या सीएसएस फ़ाइल) संलग्न करने के लिए उपयोग करने का सुझाव दिया गया हो । Drupal 8 अब केवल जावास्क्रिप्ट या CSS फाइलों को एक पेज पर संलग्न करने की अनुमति नहीं देता है; आपको हमेशा एक पुस्तकालय संलग्न करने की आवश्यकता होती है, जो जावास्क्रिप्ट और सीएसएस फाइलों का एक सेट है, अंततः केवल जावास्क्रिप्ट या सीएसएस फाइलों से बना है।


अगर मैं ड्रुपल एक्सेस "user_access ('एक्सेस एडमिनिस्ट्रेशन पेज')" चाहूं तो क्या होगा?
१६

1
बदलें arg(0) == 'admin'के साथ user_access('access administration pages')
kiamlaluno

4
यह जांचने का उचित तरीका है कि वर्तमान पृष्ठ एक व्यवस्थापक पृष्ठ है या नहीं path_is_admin। कुछ प्रशासन पृष्ठों के मार्ग 'व्यवस्थापक' से शुरू नहीं होते हैं। उदाहरण के लिए, कॉन्फ़िगरेशन के आधार पर, node/add/<content-type>पृष्ठ कॉन्फ़िगरेशन वाले हो सकते हैं।
पियरे ब्यूएल

बहुत बढ़िया पोस्ट, सुपर पूरी तरह से, इस एक को कवर करने के लिए धन्यवाद, बहुत उपयोगी और सराहना की गई।
DrCord

पियरे Buyle टिप्पणी बहुत उपयोगी है!
मोशे शाह

3

यहाँ JS / CSS को पृष्ठों में जोड़ने के लिए दो दृष्टिकोण हैं।

आप जावास्क्रिप्ट और सीएसएस को सीधे टेम्पलेट फ़ाइल page.tpl.php में जोड़ सकते हैं, क्योंकि टेम्पलेट फाइलें PHP फाइलें हैं, आप arg () का उपयोग करके URL की जांच कर सकते हैं और तदनुसार प्रस्तुत ।

वैकल्पिक रूप से, और बेहतर है क्योंकि यह विषय स्वतंत्र है, एक मॉड्यूल बनाएं जो हुक_इनिट () को लागू करता है , और drupal_add_js () या drupal_add_css () current_path () के आधार पर कॉल करता है

निम्नलिखित कोड की तरह कुछ काम करेगा।

// Runs on every page load.
function mymodule_init() {
  // Check if current path is under "admin"
  if (substr(current_path(), 0, 5) == 'admin') {
    drupal_add_css('path/to/my/css');
    drupal_add_js('path/to/my/js');
  }
}

1

मैंने यहाँ वर्णित चरणों का उपयोग करके एक मॉड्यूल बनाया: http://purewebmedia.biz/article/2014/04/23/adding-your-own-css-admin-theme

मॉड्यूल टेक्स्ट को उस पेज पर छोड़ दिया गया:

    function mymodule_preprocess_html(&$variables) {
// Add conditional stylesheets for admin pages on admin theme.
  if (arg(0)=="admin") {
    // reference your current admin theme  
    $theme_path = drupal_get_path('theme', 'commerce_kickstart_admin');
    // reference your own stylesheet    
    drupal_add_css(drupal_get_path('module', 'mymodule') . '/css/mymodule.css', array('weight' => CSS_THEME));
  }
}

हालाँकि, जब मैं (सभी चीजों में से एक) सभी पृष्ठों के रूप में अच्छी तरह से नोड को संपादित करने के रूप में सबमिट बटन शैली चाहता था कि व्यवस्थापक जाँच दोषपूर्ण था। चूँकि वह मार्ग नोड / संपादन के लिए जाता है और प्रशासन को चेक नहीं करता है जिससे मुझे घंटों तक अपना सिर खुजलाना पड़ता है।

इसलिए मैं इस संस्करण के साथ अपने सरल मॉड्यूल बनाने के लिए आया था जिसे admin_css कहा जाता है।

admin_css.info

name = admin_css
description = Custom css alterations for editor interface
core = 7.x
version = 7.x-1.01

admin_css.module

function admin_css_preprocess_html(&$variables) {
    if (path_is_admin) {
        $theme_path = drupal_get_path('theme', 'seven');
        drupal_add_css(drupal_get_path('module', 'admin_css') . '/css/admin_css.css', array('weight' => 0));
    }
}

क्या जवाब यहाँ करने के लिए अलग है अगर पथ के साथ साइट के प्रशासनिक हिस्से में है की जाँच करने के लिए है path_is_admin उपयोग करने के बजाए आर्ग । Arg का उपयोग करने से मेरी css- फाइल नोड-एडिट और अन्य पेजों पर लोड नहीं होती है।


1

जेएस और सीएसएस को जोड़ने के लिए इसे बुरा अभ्यास माना जाता है hook_init()। इसके बजाय बड़े उपयोग hook_page_build():

/**
 * Implements hook_page_build().
 */
function MYMODULE_page_build(&$page) {

  if (path_is_admin(current_path())) {

    drupal_add_js(drupal_get_path('module', 'MYMODULE') . '/scripts/magic.js');
  }
}

1

मैंने सिर्फ एक और तरीका इस्तेमाल किया है जो फ्रंट-एंड देवताओं के लिए अपील कर सकता है। अपने पसंदीदा व्यवस्थापक विषय को घटाएं और फिर एक सरल जोड़ें:

scripts[] = myscripts.js

अपने theme.info फ़ाइल में आपके व्यवस्थापक पृष्ठों के लिए आवश्यक जावास्क्रिप्ट शामिल है। यदि आप चाहें, तो आप अधिक ओवरराइड जोड़ सकते हैं, क्योंकि यह आपके पसंदीदा व्यवस्थापक थीम के संसाधनों को विरासत में देगा।

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