আমি বর্তমানে আমার ড্রুপাল 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আপনি চেষ্টা করতে প্রলুব্ধ হয়েছে হতে পারে।