হুক_প্রিপ্রসেস_পেজ (): একটি দর্শন পৃষ্ঠাটি কীভাবে বলবেন?


10

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

আমি হুক_প্রিপ্রসেস_পৃষ্ঠাটি ব্যবহার করছি, তবে বর্তমান পৃষ্ঠাটি কোনও ভিউ থেকে এসেছে কিনা তা আমি বলতে পারি না:

function mymodule_preprocess_page(&vars)
{
    var_dump($vars); //output: nothings that reference the views!
    if([view page])
    {
        drupal_add_js([...]);
        drupal_add_css([...]);
        // Rebuild scripts 
        $scripts = drupal_get_js();
        $vars['scripts'] = $scripts;
        // Same for css
    }
}

আমি জানি আমি একটি টেম্পলেট ফাইল (পৃষ্ঠা-my_view_page_path.tpl.php) ব্যবহার করতে পারি, তবে জেএস এবং অতিরিক্ত সিএসএস কেবলমাত্র আমার মডিউল সক্ষম থাকলে অবশ্যই অন্তর্ভুক্ত করা উচিত; তাই আমি এই জিনিসগুলি সরাসরি আমার মডিউল কোডের মধ্যে রাখতে চাই ।

ধারনা?


আপনি আপনার মডিউলটিতে টেমপ্লেট ফাইলগুলি ব্যবহার করতে পারেন।
— জেরেমি ফরাসী

@ জেরেমি: কীভাবে লোকেরা ভোট দিতে পারে এবং তর্ক করতে পারে তা ব্যাখ্যা করে আপনার উত্তর যুক্ত করুন।
— স্ট্রে

এটি সরাসরি উত্তরের সাথে সম্পর্কিত ছিল না, কেবল ইঙ্গিত করে যে কোনও টিপিএল ফাইলটি মডিউলে অন্তর্ভুক্ত করা যেতে পারে। একটি ড্যানিয়েল ইঙ্গিত দিচ্ছিল যে এটি করতে পারছে না।
— জেরেমি ফরাসী

ভাল .. আমি পারে থিম page.tpl মধ্যে রয়েছে, তবে আমার লক্ষ্য থিম থেকে সম্পূর্ণভাবে indipendent এই মডিউল রাখা ..
— Strae

জেরেমি ফরাসীর উত্তরের পরামর্শ অনুসারে আপনি আপনার মডিউলের প্রাক-প্রক্রিয়াজাতকরণের ভিউগুলির টেম্পলেটগুলি প্রয়োগ করতে পারেন।
— পিয়েরে বুয়েল

উত্তর:


12

views_get_page_view()পৃষ্ঠা ভিউ বর্তমানে ব্যবহৃত হয় কি, যদি তা খুঁজে বের করে। যদি এটি NULL প্রদান করে, তবে বর্তমান পৃষ্ঠাটি কোনও দর্শন পৃষ্ঠার নয়।

তবে ব্যবহার করা drupal_add_js()এবং drupal_add_css()একটি hook_preprocess_page()হিসাবে প্রত্যাশিতভাবে কাজ করবে না কারণ ভেরিয়েবল $scriptএবং $styleভেরিয়েবল ইতিমধ্যে সেট করে ফেলেছে template_preprocess_page()। ভিউজের টেমপ্লেট প্রিপ্রোসেসিং (জেরেমি ফরাসীর উত্তর দেখুন) আপনার সিএসএস এবং জাভাস্ক্রিপ্ট যুক্ত করার জন্য সম্ভবত আরও ভাল জায়গা।


আমি আপনার জন্য আমার উত্তরটি দ্বিতীয় অনুচ্ছেদে আপডেট করেছি - আমি জানি থিম (থিম_প্রসেস_সেসি *) তে সিএসএস বা জেএস যুক্ত করার পক্ষে একটি ভাল অনুশীলন, তবে আমার প্রয়োজন মডিউল নির্ভরতা t
— স্ট্রে

দুর্দান্ত, ভিউ_জেট_পেজ_ভিউ ক্যাশে থেকে ইতিমধ্যে লোড হওয়া ভিউটি পেয়েছে তাই এর কোনও কার্যকারিতা প্রভাবিত হওয়া উচিত নয়। আইএমএইচও এটি গ্রহণযোগ্য উত্তর হওয়া উচিত।
— মার্চভ্যান্ডেন্ড

@ স্ট্রে আমার পরামর্শটি এর HOOK_preprocess_views_view(&$variables)পরিবর্তে অন্য কোনও ভিউ'র টেমপ্লেট প্রিপ্রসেস হুক ব্যবহার করা ছিল HOOK_preprocess_page(&$variables)। আপনি এই মতামত পেতে $variablesএবং ব্যবহার করতে পারেন drupal_add_js()এবং drupal_add_css()নিরাপদে।
— পিয়েরে বুয়েল

11

এখানে দেখার জন্য প্রাক প্রসেসরগুলিতে একটি দীর্ঘ থ্রেড রয়েছে । এই মন্তব্যটি আমার কাছে খুব সহজ দেখাচ্ছে।

function mymodule_theme_registry_alter(&$theme_registry) {
  //dpm($theme_registry);
  $theme_registry['views_view__YOUR_VIEW_NAME_HERE']['preprocess functions'][] = 'mymodule_preprocess_func';
}

// now go on and play with your new preprocess function
function mymodule_preprocess_func(&$vars) {
  // etc
}

আমি সম্মত হই যে পুরো পৃষ্ঠার পরিবর্তে ভিউয়ের আউটপুট প্রাক-প্রসেসিং করা সম্ভবত আরও সঠিক পদ্ধতির।
— গ্যারেট অ্যালব্রাইট

8

আপনি যদি কোনও হুক_প্রিপ্রসেস_পেজে () থাকেন তবে সংজ্ঞা অনুসারে আপনার দৃষ্টিতে একটি পৃষ্ঠা প্রদর্শন এবং একটি মেনু পথ রয়েছে যা অবশ্যই অনন্য হতে পারে - তাই আপনি এটি করতে পারেন:

function mymodule_preprocess_page(&vars)
{
    var_dump($vars); //output: nothings that reference the views!
    if($_GET['q'] == 'my/view/path')
    {
        drupal_add_js([...]);
        drupal_add_css([...]);
    }
}

যদি আপনার এই পৃষ্ঠায় যুক্তিগুলি সরবরাহ করা হচ্ছে, সুতরাং আপনার কিছু অংশ প্রয়োজন $_GET['q'], তবে দ্রুপালের arg()ফাংশনটির পরিবর্তে এটি করুন :

if(arg(0) == 'my' && arg(1) == 'view' && arg(2) == 'path')

http://api.drupal.org/api/drupal/includes--bootstrap.inc/function/arg


আমি $ _GET ['q'] পরীক্ষা করার পরামর্শ দেব না। ব্যবহার করুন menu_get_item () বা menu_get_object () পরিবর্তে। আপনি যদি বর্তমান পৃষ্ঠাটি পরিদর্শন করছেন তবে কোনও যুক্তির প্রয়োজন নেই এবং তারা উভয়ই তাদের ফলাফলগুলি ক্যাশে করে।
— মিকি পি

একটি হুক_প্রিপ্রসেস_পেজে () এবং drupal_add_css () ব্যবহার করে প্রত্যাশার মতো কাজ করবে না কারণ ভেরিয়েবল $ স্ক্রিপ্ট এবং $ স্টাইলের ভেরিয়েবলগুলি ইতিমধ্যে টেমপ্লেট_প্রেসপ্রসেস_পেজ () দ্বারা সেট করা আছে। ব্যবহারকারীর ভিউ_জেট_পেজ_ভিউ () বর্তমান পৃষ্ঠার জন্য ভিউ পুনরুদ্ধার করতে (যদি থাকে)।
— পিয়েরে বুয়েল

3

আমার জন্য এটি কাজ করে:

function MYMODULE_preprocess_page(&$vars) {
  $view = (array)views_get_page_view();
  if (!empty($view)) {
    // do stuff
  }
}

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