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


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.