সত্তা প্রাকপ্রসেস ফাংশন কীভাবে সংজ্ঞায়িত করা যায়


10

আমার কাস্টম মডিউলটি একটি কাস্টম সত্তাকে সংজ্ঞায়িত করে, যা সত্তাঅ্যাপিকন্ট্রোলার শ্রেণিকে প্রসারিত করে। আমি এটিকে মূলত কাজ করতে সক্ষম করেছিলাম, যেমন আমার কাস্টম টিপিএল.এফপি ফাইলের মাধ্যমে ক্ষেত্রগুলি ইত্যাদি প্রদর্শন করা। তবে আমি tpl.php ফাইলে কাস্টম ভেরিয়েবল যুক্ত করতে একটি mymodule_preprocess_entityফাংশন ( এখানে প্রস্তাবিত হিসাবে ) তৈরি করতে চাই । তবে এই জাতীয় ফাংশন চলমান নয় (বলা হয় না)।

এছাড়াও, যখন আমি এই সত্তাটি প্রদর্শন করি তখন আমি লক্ষ্য করেছি যে template_preprocess_entity(&$variables)সত্তা.মডিউল থেকে ফাংশনটি চলছে না, হয়ও।

কাস্টম সত্তার জন্য প্রিপ্রোসেস ফাংশনটি কল করার জন্য আর কী সংজ্ঞায়িত করা দরকার?


আপনার ব্যবহার mymodule - পরামর্শ ব্যবহারসমূহ mytheme
Rémy

উত্তর:


9

আমি একটি সাধারণ mymodule_preprocess(&$variables, $hook)ফাংশন তৈরি করেছি এবং এটি দেখিয়েছে যে নির্দিষ্ট ফাংশনটির নাম হওয়া উচিত mymodule_preprocess_myentitymyentityসত্তার সঠিক নাম কোথায় Where

সুতরাং, এই কোডটি আমার পক্ষে কাজ করছে:

function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) { // or maybe check for $hook name
    $function = __FUNCTION__ . '_' . $variables['elements']['#entity_type'];
    if (function_exists($function)) {
      $function($variables, $hook);
    }
  }
}

function mymodule_preprocess_myentity(&$vars) {
  ...
}

2

আরও সাধারণ পদ্ধতি:

/**
 * Implements hook_preprocess().
 */
function mymodule_preprocess(&$variables, $hook) {
  if (isset($variables['elements']['#entity_type'])) {
    $myhook = "preprocess_{$variables['elements']['#entity_type']}_{$variables['elements']['#bundle']}_{$variables['elements']['#view_mode']}";
    $modules = module_implements($myhook);

    foreach ($modules as $module) {
      $function = "{$module}_{$myhook}";
      $function($variables);
    }
  }
}

module_implements()সক্রিয় থিম প্রিপ্রোসেস হুক প্রয়োগ করে কিনা দুর্ভাগ্যক্রমে তা পরীক্ষা করে না।

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