আমি বর্তমানে আমার ড্রুপাল site সাইটে একটি নোড রেফারেন্সযুক্ত চিত্র ক্ষেত্রটি বাস্তবায়নের চেষ্টা করছি যা রেন্ডার করার ঠিক আগে প্রোগ্রাম্যাটিকাল যুক্তির উপর নির্ভর করে এটি 'ভিউ মোড' পরিবর্তন করবে। ক্ষেত্রটি বর্তমানে তাদের প্রদর্শন মোড সেটিংসের মাধ্যমে বেশ কয়েকটি সামগ্রীর ধরণে রেন্ডার করা হচ্ছে, যার প্রতিটি ফিল্ড ফর্ম্যাটর 'রেন্ডারড নোড' ব্যবহার করছে।
প্রথম প্রচেষ্টা
আমার প্রথম ধারণাটি হ'ল একটি হুককে হুক হিসাবে বিবেচনা করে নিম্নলিখিতটি বাস্তবায়ন করা ছিল:
function HOOK_field_formatter_view( $entity_type, $entity, $field ... ){
switch ($display['type']) {
case 'node_reference_node':
/* Programatical logic here to modfy field render settings */
break;
}
}
স্পষ্টতই আমার মডিউলটির নামের জন্য হুক এক্সচেঞ্জ করা।
উপরের মূল ফাংশনটির আগে বা পরে আগুন লাগবে কিনা তা আসলেই কিছু যায় আসে node_reference_field_formatter_view
না node_reference.module
কারণ আমি হয় এর ফলাফলকে পুরোপুরি ওভাররাইড করব বা আশা করি, রেন্ডারিংয়ের আগে এর মানগুলি সংশোধন করব। কেবলমাত্র সমস্যাটি হ'ল, উপরের হুকটি কেবলমাত্র একটি মডিউল ভিত্তিতে কাজ করে - যেমন এটি সাইট-প্রশস্ত নয়, তাই মূলত এটি আমার মডিউলটির জন্য আগুন দেয় না।
এখন স্পষ্টতই আমি রেন্ডার নোড আউটপুট করতে আমার নিজের ফিল্ড ফর্ম্যাটরটি লিখতে পারি। এটি ইতিমধ্যে একটি বিদ্যমান যা বিবেচনা করে কিছুটা বর্জ্য মনে হচ্ছে।
অন্যান্য পদ্ধতি
আমার অন্যান্য পদ্ধতিগুলি হয়েছে HOOK_preprocess_node
এবং HOOK_preprocess_field
তবে আগেরটিতে কোনও view_mode
তথ্য নেই, এবং পরবর্তীটিতে কমপক্ষে 5 টি বিভিন্ন জটিল কাঠামো রয়েছে view_mode
যাগুলির সমস্ত স্তরের বিভিন্ন স্তরের একটি সম্পত্তির উল্লেখ রয়েছে - এবং এটির প্রতিটি পরিবর্তন করতে হবে বলে মনে হয় হ্যাকি মান। এমনকি আমি যখন কিছু view_mode
বৈশিষ্ট্য পরিবর্তন করেছি তখন ফলস্বরূপ চিত্রটি বদলাবে না।
প্রশ্ন
ফিল্ড ফর্ম্যাটরটি (একটি অবদানের মডিউল) রেন্ডার করার আগে পদক্ষেপ নেওয়ার এবং প্রতি পৃষ্ঠার অনুরোধের ভিত্তিতে এর সেটিংস পরিবর্তন করার জন্য - বা প্রকৃত সামগ্রীর ধরণের স্থায়ী ভিউ মোড সেটিংস পরিবর্তন না করে কী কেউ পরিষ্কার উপায় জানেন?
view_mode
উপর hook_preprocess_node
, বোকা আমাকে! আমি ভাবছি hook_field_formatter_view_alter()
ডি 8-তে এর মতো কোনও কিছুর উপস্থিতি রয়েছে ...
hook_field_formatter_view_alter()
সম্ভবত এক বছর ধরে একটি বা এর অনুরূপ সন্ধান করছি, দুর্ভাগ্যক্রমে এটির অস্তিত্ব নেই। অবগতির জন্যhook_preprocess_node()
স্পষ্টভাবে নেই আছেview_mode
এটি পাওয়া যায়, এটা এর$vars['view_mode']
না$vars['node']->view_mode
আপনি চেষ্টা করতে প্রলুব্ধ হয়েছে হতে পারে।