হুক_প্রসেস_পেজ এবং হুক_প্রিপ্রসেস_এইচটিএমএল এর মধ্যে পার্থক্য কী?


13

আমি উভয়ই দেখতে পাচ্ছি hook_preprocess_page()এবং hook_preprocess_html()বাস্তবায়ন করছি hook_preprocess_HOOK()তবে কখন ব্যবহার করব তা বুঝতে পারছি না।

hook_preprocess_page প্রথমে বলা হয়, তবে কে এটি ডাকছে তা বুঝতে আমার সত্যিই সহায়তা হয় না।

debug_print_backtrace()আউটপুটটির দিকে তাকিয়ে , এটি দ্বারা ডাকা হচ্ছে theme(), কিন্তু এটি সত্যিই আমাকে উত্তর পেতে পারে না।

এটি কি কেবল অ্যারে দ্বারা সংজ্ঞায়িত করা হয় drupal_render()?


এটি লগ বার্তায় রয়েছে, তবে আমি এপিআই ডক্সের সাথে সারিবদ্ধ করার জন্য ফাংশনের নামগুলি সম্পাদনা করেছি।
এমপিডোনাদিও

1
template_preprocess_page()এর থেকে পৃথক hook_preprocess_page(), এবং হুক_প্রসেস_হুকের জন্য ডকুমেন্টেশন রয়েছে , একইভাবে হুক_প্রসেস_হুকের জন্য রয়েছে
kiamlaluno

উত্তর:


17

hook_preprocess_pageপৃষ্ঠা. tpl.php টেমপ্লেট ফাইলটি ব্যবহৃত hook_preprocess_htmlহয় এবং প্রিপ্রসেস হুকটি যখন html.tpl.php টেম্পলেট ফাইল ব্যবহার করা হয় তখন তা হ'ল

উভয় preprocess আঙ্গুলসমূহ প্রার্থনা যখন একটি পৃষ্ঠায় সঙ্গে অনুষ্ঠিত হয় theme('page')থেকে সংজ্ঞায়িত পৃষ্ঠা উপাদান সাল থেকে () system_element_info সংজ্ঞায়িত এইচটিএমএল থিম মোড়কের হিসাবে।

  $types['page'] = array(
    '#show_messages' => TRUE,
    '#theme' => 'page',
    '#theme_wrappers' => array('html'),
  );

system_theme () তারপরে html কে নিম্নলিখিত হিসাবে সংজ্ঞায়িত করে।

'html' => array(
  'render element' => 'page',
  'template' => 'html',
),

কখন কার্যকর hook_preprocess_html()করতে হবে, আপনি এটি html.tpl.php ফাইলে ব্যবহৃত ভেরিয়েবলগুলি পরিবর্তন করতে এটি প্রয়োগ করেছেন, যার ডিফল্টরূপে নিম্নলিখিত বিষয়বস্তু রয়েছে।

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML+RDFa 1.0//EN"
  "http://www.w3.org/MarkUp/DTD/xhtml-rdfa-1.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language; ?>" version="XHTML+RDFa 1.0" dir="<?php print $language->dir; ?>"<?php print $rdf_namespaces; ?>>

<head profile="<?php print $grddl_profile; ?>">
  <?php print $head; ?>
  <title><?php print $head_title; ?></title>
  <?php print $styles; ?>
  <?php print $scripts; ?>
</head>
<body class="<?php print $classes; ?>" <?php print $attributes;?>>
  <div id="skip-link">
    <a href="#main-content" class="element-invisible element-focusable"><?php print t('Skip to main content'); ?></a>
  </div>
  <?php print $page_top; ?>
  <?php print $page; ?>
  <?php print $page_bottom; ?>
</body>
</html>

যেহেতু আপনি দেখতে পারেন, এটা ঠিক এইচটিএমএল ট্যাগ, পাওয়া যে একটি পাতা কন্টেন্ট মোড়ানো রয়েছে $page। এটির সাহায্যে আপনি <head>ট্যাগের বিষয়বস্তু , পৃষ্ঠার শিরোনাম (যে <title>ট্যাগটিতে ট্যাগ যায় সেগুলি <head>), সিএসএস শৈলী এবং জাভাস্ক্রিপ্ট ফাইলগুলি কোনও পৃষ্ঠায় যুক্ত, শ্রেণি এবং <body>ট্যাগের বৈশিষ্ট্যগুলি পরিবর্তন করতে পারেন ।
Page.tpl.php টেমপ্লেট ফাইলের সাহায্যে আপনি সাইটের নাম, সাইটের স্লোগান, পৃষ্ঠার শিরোনাম এবং পৃষ্ঠার সাথে সম্পর্কিত ফিডগুলি সহ পৃষ্ঠার রেন্ডারিংয়ের আরও অনেক কিছু পরিবর্তন করতে পারেন। তাদের বেশিরভাগের জন্য, আপনার পরিবর্তে ব্যবহার করা উচিত একটি নির্দিষ্ট ড্রুপাল ফাংশন / হুক রয়েছে।

hook_preprocess_HOOKসমস্ত প্রিপ্রোসেস হুকের জন্য ব্যবহৃত জেনেরিক হুকের নাম, একইভাবে hook_form_FORM_ID_alter()হুকের নামটি হুকের নাম পরিবর্তনের হুকের শ্রেণীর জন্য ব্যবহৃত হয়।


উত্তরের সম্পূর্ণতার জন্য ধন্যবাদ। আমি রেলগুলি থেকে দ্রুপালে ব্যাক করছি তাই আমি অন্যের চেয়ে কিছু দিক সহজ খুঁজে পাচ্ছি।
30:48

8

hook_preprocess_pageএবং hook_preprocess_htmlথিম স্তর হুকগুলি যা আপনি ভেরিয়েবলগুলি যুক্ত করতে ব্যবহার করতে পারেন যা আপনার টেম্পলেটগুলিতে ব্যবহার করা যেতে পারে ( page.tpl.phpএবং html.tpl.php)।

hook_preprocess_hookসেই পৃষ্ঠাগুলি এবং এইচটিএমএল ব্যবহারের জন্য হ'ল বড় থিম স্তরটি হ'ল এবং আপনি যে কাস্টমগুলি তৈরি hook_theme()করেছেন সেগুলিও।

উদাহরণস্বরূপ, এখানে ঘোষণাটি দেওয়া হল hook_theme():

function mymodule_theme($existing, $type, $theme, $path) {
  return array(
    'custom_theme_function' => array(
      'variables' => NULL
      'template' => 'custom-theme-template', // available as custom-theme-template.tpl.php
    ),
  );
}

এবং এখানে আপনার প্রাকপ্রসেস ফাংশন রয়েছে:

mytheme_preprocess_page(&$vars) {
    $vars['variable'] = 'string'; // $variable will be available in page.tpl.php
}

mytheme_preprocess_html(&$vars) {
    $vars['variable'] = 'string'; // $variable will be available in html.tpl.php
}

mytheme_preprocess_custom_theme_function(&$vars) {
    $vars['variable'] = 'string';  // $variable will be available in the template you specified in mymodule_theme() (custom-theme-template.tpl.php)
}

অতিরিক্তভাবে hook_preprocess()আপনাকে একাধিক থিম হুকগুলি ক্যাপচার করতে এবং পাশাপাশি এতে ভেরিয়েবল যুক্ত করতে দেয় allows

mymodule_preprocess(&$vars, $hook) {
  if ($hook == 'custom_theme_function') {
    $vars['variable'] = 'string'; // $variable will be available in them template you specified in mymodule_theme() (custom-theme-template.tpl.php)
  }
  if ($hook == 'page') {
    $vars['variable'] = 'string'; // $variable will be available in page.tpl.php
  }
  if ($hook == 'html') {
    $vars['variable'] = 'string'; // $variable will be available in html.tpl.php
  }
}

অতিরিক্ত প্যারামিটার সহ ইঙ্গিত দেওয়ার জন্য আপনাকে ধন্যবাদ। সত্যই আমাকে অনেক সাহায্য করেছে, কারণ "মাইথেমিপ্রেসপ্রসেস_এইচটিএমএল" এর মতো জিনিসগুলি আমার মডিউলগুলির মধ্যে থেকে কখনই ডাকা হয় না।
func0der
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.