প্রশাসনিক পৃষ্ঠায় জাভাস্ক্রিপ্ট ফাইল যুক্ত করুন


18

আমি মডিউল ব্যবহার করে কীভাবে প্রতিটি প্রশাসনের পৃষ্ঠায় জাভাস্ক্রিপ্ট / সিএসএস ফাইল যুক্ত করব?

উত্তর:


25

একটি মডিউল ব্যবহার করে, আপনি দুটি পদ্ধতি অনুসরণ করতে পারেন:

প্রথম পদ্ধতিটি আপনাকে যে কোনও প্রশাসনের পৃষ্ঠায় অতিরিক্ত জাভাস্ক্রিপ্ট (বা সিএসএস) ফাইল যুক্ত করার অনুমতি দেবে, যখন দ্বিতীয় পদ্ধতি আপনাকে কেবলমাত্র ফর্মযুক্ত পৃষ্ঠাগুলিতে এই ফাইলগুলি যুক্ত করার অনুমতি দেবে।

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 () এ নিম্নলিখিত কোড রয়েছে code

  $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অ্যাডমিন / উপস্থিতিতে প্রাপ্ত সেটিংসের উপর নির্ভর করে কিছু নোড-সম্পর্কিত পাথ প্রশাসনিক বিভাগে অন্তর্ভুক্ত করা যেতে পারে।

স্ক্রিনশট

নোড পাথ যে প্রশাসনিক পাতায় অন্তর্ভুক্ত করা যায়নি তালিকা থেকে ফিরিয়ে দেওয়া হয় node_admin_paths ()

  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()হ'ল:

  • লাইব্রেরির মধ্যে নির্ভরতা স্বয়ংক্রিয়ভাবে পরিচালনা করা হয়। সিস্টেম_লাইবারি () এর ক্ষেত্রে এটি ঘটেছিল, যা নিম্নলিখিত সংজ্ঞাগুলি ব্যবহার করে দুটি গ্রন্থাগারকে সংজ্ঞায়িত করে।

      // 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'), বিবিধ / পতন.জে এবং মিস / ফর্ম.জেএস উভয়ই অন্তর্ভুক্ত থাকবে।

  • লাইব্রেরির সাথে সম্পর্কিত সিএসএস ফাইলগুলি জাভাস্ক্রিপ্ট ফাইলগুলি স্বয়ংক্রিয়ভাবে লোড হবে।

  • যখনই গ্রন্থাগারটি আরও জাভাস্ক্রিপ্ট বা সিএসএস ফাইল ব্যবহার করবে তখন গ্রন্থাগারটি অন্তর্ভুক্ত করার কোডটি পরিবর্তন হবে না; এটি এখনও ব্যবহার করা হবে $form['#attached']['library'][] = array('mymodule', 'mymodule.library');, বা drupal_add_library('mymodule', 'mymodule.library')

 

ব্যবহারের কোন প্রয়োজন নেই current_path () আপনি ব্যবহার করতে পারেন যখন ARG () । বর্তমান পৃষ্ঠার জন্য যদি অ্যাডমিন / স্ট্রাকচার / ব্লক হয়, তবে

  • 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()আর ড্রুপাল ৮ তে ব্যবহৃত হয় না
a আমি জাভাস্ক্রিপ্ট লাইব্রেরি ব্যবহার সম্পর্কে যা বলেছিলাম তা এখনও সত্য, এমনকি এটি কোনও পৃষ্ঠাতে #attachedএকটি লাইব্রেরি (বা জাভাস্ক্রিপ্ট ফাইল, বা সিএসএস ফাইল) সংযুক্ত করার জন্য প্রস্তাবিত হলেও । ড্রুপাল 8 আর কোনও পৃষ্ঠায় কেবল জাভাস্ক্রিপ্ট বা সিএসএস ফাইল সংযুক্ত করার অনুমতি দেয় না; আপনার সর্বদা একটি লাইব্রেরি সংযুক্ত করা দরকার যা জাভাস্ক্রিপ্ট এবং সিএসএস ফাইলগুলির একটি সেট, শেষ পর্যন্ত কেবল জাভাস্ক্রিপ্ট বা সিএসএস ফাইল দিয়ে তৈরি।


যদি আমি "ইউজার_অ্যাক্সেস ('প্রশাসনের পৃষ্ঠাগুলি অ্যাক্সেস প্রশাসনের পৃষ্ঠাগুলি')" ড্রুপাল অ্যাক্সেস চান তবে আমি প্রতিটি পৃষ্ঠায় যুক্ত করতে চাইলে কী হবে?
কনফিক

1
arg(0) == 'admin'সঙ্গে প্রতিস্থাপন user_access('access administration pages')
কিমলালুনো

4
বর্তমান পৃষ্ঠাটি কোনও অ্যাডমিন পৃষ্ঠা কিনা তা যাচাই করার সঠিক উপায়টি হ'ল path_is_adminফাংশন। কিছু প্রশাসনের পৃষ্ঠাগুলি 'অ্যাডমিন' দিয়ে শুরু হয় না। উদাহরণস্বরূপ, কনফিগারেশনের উপর নির্ভর করে node/add/<content-type>পৃষ্ঠাগুলি কনফিগারেশনের হতে পারে।
পিয়েরে বুয়েল

দুর্দান্ত পোস্ট, দুর্দান্ত পুস্তক, এটি সত্যিই প্রচ্ছদ করার জন্য ধন্যবাদ, খুব সহায়ক এবং প্রশংসিত।
DrCord

পিয়ের বুয়েলের মন্তব্যটি খুব কার্যকর!
মোশে শাহাম

3

পৃষ্ঠাগুলিতে জেএস / সিএসএস যুক্ত করার জন্য দুটি পদ্ধতি রয়েছে।

আপনি জাভাস্ক্রিপ্ট এবং সিএসএস সরাসরি টেম্পলেট ফাইল পৃষ্ঠা.tpl.php এ যোগ করতে পারেন, যেহেতু টেমপ্লেট ফাইলগুলি পিএইচপি ফাইল, আপনি আরগ () ব্যবহার করে ইউআরএল পরীক্ষা করতে পারেন এবং তদনুসারে উপস্থাপন করতে পারেন ।

অন্যথা, এবং ভাল যেহেতু এটি এর থিম স্বাধীন, একটি মডিউল যে কার্যকরী তৈরি hook_init () , এবং কল 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.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 । আরগ ব্যবহারের ফলে আমার সিএসএস-ফাইলটি নোড-সম্পাদনা এবং অন্যান্য পৃষ্ঠাগুলিতে লোড না হওয়ার কারণ ঘটে।


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

আপনার থিম.info ফাইলটিতে আপনার অ্যাডমিন পৃষ্ঠাগুলির জন্য জাভাস্ক্রিপ্ট থাকা দরকার। আপনি যদি চান তবে আপনি আরও ওভাররাইড যুক্ত করতে পারেন, যেহেতু এটি আপনার পছন্দসই অ্যাডমিন থিমের সংস্থান অর্জন করবে।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.