দেখার জন্য আমি কীভাবে জাভাস্ক্রিপ্ট যুক্ত করব?


26

আমার সাইটে আমার ভিউ রয়েছে যার নির্দিষ্ট শ্রেণির নাম রয়েছে name আমি একটি থিমের টেম্পলেট.এফপি ফাইলের অভ্যন্তরে জানতে চাই, নির্দিষ্ট শ্রেণীর নামের একটি ভিউ অনুরোধকৃত পৃষ্ঠায় পাওয়া যায় কিনা তা আমি কীভাবে জানতে পারি।

এটি আমার পক্ষে খুব গুরুত্বপূর্ণ কারণ নির্দিষ্ট পৃষ্ঠার নামের সাথে যেমন একটি চিত্র ব্যবহার করা হয় (যেমন চিত্র-গ্যালারী) যখন কোনও পৃষ্ঠাতে ব্যবহৃত হয় তখন আমাকে নির্দিষ্ট জাভাস্ক্রিপ্ট এবং সিএসএস অন্তর্ভুক্ত করতে হবে।

উত্তর:


40

আপনি এটি করতে template_preprocess_views_view()হুক ব্যবহার করতে পারেন :

function THEME_preprocess_views_view(&$vars) {
  $view = &$vars['view'];
  // Make sure it's the correct view
  if ($view->name == 'your-view-name') {
    // add needed javascript
    drupal_add_js(drupal_get_path('theme', 'your-theme') . '/your-js.js');
    // add needed stylesheet
    drupal_add_css(drupal_get_path('theme', 'your-theme') . '/your-css.css');
  }
}

নোট করুন যে আপনি ব্যবহারের মাধ্যমে দৃশ্যের নির্দিষ্ট প্রদর্শনটিও পরীক্ষা করতে পারেন:

if ($view->name == 'your-view-name' && $view->current_display == 'your-display-id') {
  // include javascript & css here
}

আপনি যেমন একটি কাস্টম CSS ক্লাস পরীক্ষা করতে সক্ষম হওয়া উচিত:

if ($view->name == 'your-view-name' && $view->display[$view->current_display]->display_options['css_class'] == 'your-css-class') {
   // include javascript & css here
}

অনেক অনেক ধন্যবাদ, তবে এই ফাংশনটি নাম দিয়ে ভিউটি সনাক্ত করে, আমি শ্রেণীর নামটি চিনতে চাই, কারণ এক পৃষ্ঠায় একাধিক মতামত রয়েছে যা একই শ্রেণীর নাম রয়েছে। উদাহরণস্বরূপ 2 টি ভিউ'র 'গ্যালারী-চিত্র' শ্রেণীর নাম এবং 3 ভিউ'র 'লাইট-বাক্স' শ্রেণীর নাম রয়েছে। উদাহরণস্বরূপ আমি জেএস যুক্ত করতে চাই যদি পৃষ্ঠাটিতে 'লাইট-বাক্স' সিএসএস শ্রেণির নামের সাথে একটি ভিউ পাওয়া যায়।
মেহেরদাড201

আপনি শুধু প্রদর্শন পরীক্ষা করতে পারবেন না? if($view->name == 'your-view-name' && $view->display_id == 'your-display-id')
সাইক্লোনকোড

না, কারণ এটি পরিষ্কার নয় যে পৃষ্ঠাতে কতগুলি দর্শন উপলব্ধ। সম্ভবত 10 টি ভিউ খেয়েছে যে তাদের সকলেরই সিএসএস শ্রেণির নাম রয়েছে।
মেহরদাদ201

আমি এই হুক বাস্তবায়ন করেছি এবং সমস্ত ক্যাশে ফ্লাশ করেছি - তবে এটি কল হয়নি। নিশ্চিত কেন। হ্যাঁ আমি নামটি ডাবল-চেক করেছি।
jdildeb

খুব অদ্ভুত লাগছে? আপনি আপনার প্রকৃত থিমের নাম দিয়ে থিমটিকে প্রতিস্থাপন করেছেন? আপনি যতক্ষণ না এটি সঠিকভাবে প্রয়োগ করেন ততক্ষণ এই ঠিক কাজ করা উচিত।
সাইক্লোনকোড

8

পৃষ্ঠায় কোন দর্শন দেওয়া হচ্ছে তা জানতে আপনি ভিউ_জেট_পেজ_ভিউ ফাংশনটি ব্যবহার করতে পারেন। এটি দর্শনের অবজেক্টকে ফেরত দেয়। নোট করুন যে নীচের কোড স্নিপেটে আপনার ভিউ মেশিনের পঠনযোগ্য নামের সাথে তুলনা করা উচিত তবে অবশ্যই আপনি ভিউ_জেট_পেজ_ভিউ দিয়ে ফিরে আসা ভিউ অবজেক্টের উপর ভিত্তি করে নিজের তুলনা লিখতে পারেন

function YOURTHEMENAME_preprocess_page(&$variables) {
    $view = views_get_page_view();
    if($view->name == 'YOURVIEW') {
    //Do what ever you want 
    }

6

ঠিক এই ক্ষেত্রে যদি এই প্রশ্নটি জুড়েই অন্য কারও পক্ষে হোঁচট খাচ্ছে, যেমন আমি জাভাস্ক্রিপ্টকে একটি ড্রুপাল ভিউতে সংযুক্ত করার জন্য করেছি, তেমন অনুসন্ধান করে । ডি 7 এবং ভিউ 3.3 এর ক্ষেত্রে, নিম্নলিখিতগুলি আমার পক্ষে সবচেয়ে ভাল কাজ করেছে:

function HOOK_views_pre_render ( &$view ) { 
  /// check to make sure the view has a classname
  if ( $view->display_handler && !empty($view->display_handler->options['css_class']) ) {
    $cln = $view->display_handler->options['css_class'];
    $cls = 'CLASS GOES HERE';
    /// test that the classname contains our class
    if ( preg_match('/(^|\s+)' . preg_quote($cls) . '(\s+|$)/i', $cln) ) {
      /// build the path to the js, which is local to my module, js/view.js
      $sep = DIRECTORY_SEPARATOR;
      $dir = rtrim(drupal_get_path('module', 'HOOK'), $sep);
      $pth = "{$dir}{$sep}js{$sep}view.js";
      drupal_add_js($pth);
    }
  }
}

থিমের চেয়ে কোডটি আমার মডিউলের মধ্যে রাখতে চেয়েছিলাম বলে এটি উপকারী ছিল - কারণ জাভাস্ক্রিপ্টের আনা বর্ধনের দৃশ্যটির উপস্থিতিগুলির সাথে কোনও সম্পর্ক ছিল না।

দ্রষ্টব্য: অবশ্যই HOOKউভয় স্থানে আপনার মডিউল নামটি দিয়ে প্রতিস্থাপন করা উচিত, এবং CLASS GOES HEREআপনি যে শ্রেণীর সন্ধান করছেন তার সাথে প্রতিস্থাপন করা উচিত।


সুস্পষ্টতার জন্য, প্রাক_প্রসেসের চেয়ে প্রাক_রেন্ডার কেন ভাল ছিল?
নিক

@ নিক ~ কোনও HOOK_views_pre_process( এপিআইড্রপাল.আর.পিআই / ভিউস / ভিউস.এপিপি.পিপি / )) নেই তবে যদি আপনি এটির ওপরে ব্যবহার করার কারণটি না বোঝেন - তবে THEME_preprocess_views_viewএটি যেখানে কেবল তার পছন্দের বাইরে নয় আপনি আপনার কোড পরিবর্তন করতে চান। HOOK_views_pre_renderএকটি মডিউল থেকে জড়িত করা যেতে পারে, যেখানে THEME_preprocess_views_viewআপনার থিম / টেমপ্লেট ফাইলের মধ্যে যাওয়া উচিত। আপনি HOOK_views_post_renderযদি পছন্দ করেন তবে আপনিও ব্যবহার করতে পারেন।
পেব্ল

দুঃখিত, আমি বোঝাতে চেয়েছি THEME_preprocess_views_view, হ্যাঁ ... আমি নিশ্চিত যে আমি hook_preprocess_views_viewআগে মডিউলগুলি করেছিলাম done
নিক

4

আপনি যদি ড্রুপাল 6 বা 7 এ থাকেন তবে আপনি জাভাস্ক্রিপ্ট সম্পদগুলিকে মডিউল প্রসঙ্গে সম্পদ যুক্ত করতেও অন্তর্ভুক্ত করতে পারেন। যার প্রসঙ্গে প্রয়োজন তবে আপনি নিশ্চিত হয়ে যাবেন যে ভিউ যখন রেন্ডার করা হয় তখন এটি সর্বদা অন্তর্ভুক্ত থাকবে।

https://drupal.org/project/context_addassets

মডিউলটির প্রকল্প পৃষ্ঠা থেকে:

আপনি যখন কখনও জাভাস্ক্রিপ্ট বা সিএসএস অন্তর্ভুক্ত করতে চেয়েছিলেন যখন কোনও নির্দিষ্ট দর্শন বা ব্লক রেন্ডার করা হচ্ছে? অথবা আপনি কি কোড লিখে না রেখে কেবল প্রথম পৃষ্ঠার জন্য জাভাস্ক্রিপ্ট বা সিএসএস অন্তর্ভুক্ত করতে চেয়েছেন?

প্রসঙ্গ যুক্ত সম্পদ আপনাকে এটি করতে অনুমতি দেয়। কোনও কোড না লিখেই আপনাকে এগুলি করার অনুমতি দেওয়ার জন্য ইউআই ব্যবহার করা সহজ। কারণ এটি ctools ব্যবহার করে এটি সমস্ত রফতানিযোগ্য।


2

জাভাস্ক্রিপ্ট কোড লিখুন যা দৃশ্যে নির্দিষ্ট শ্রেণীর জন্য jQuery এর হ্যাশক্লাস () ব্যবহার করে অনুসন্ধান করে এবং শর্তটি সন্তুষ্ট হলে আপনার জাভাস্ক্রিপ্ট ফাইল অন্তর্ভুক্ত করে।

আরেকটি উপায় হ'ল আপনার দেখার জন্য একটি টেম্পলেট রাখুন এবং ড্রুপাল_এডিডি_জেএস () ব্যবহার করে সেই টেম্পলেটটির মাধ্যমে জাভাস্ক্রিপ্ট কোড যুক্ত করুন ।


আপনি আমাকে বলতে পারেন, আমি এই কিভাবে করতে পারেন। জাভা স্ক্রিপ্টে শর্তসাপেক্ষ প্রকাশের পরে কীভাবে CSS এবং js ফাইলগুলি অন্তর্ভুক্ত করা যায় সত্য ??
মেহেরদাড201

: Drupal এর 8 জন্য, এই উত্তর কিভাবে একটি কাস্টম দৃশ্য দৃশ্য আউটপুট এই কাজ করতে জন্য টেম্পলেট তৈরি করতে রূপরেখা stackoverflow.com/a/43131240/227926
therobyouknow
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.