वर्तमान में मेरे Drupal 7 साइट पर एक नोड संदर्भित छवि क्षेत्र को लागू करने की कोशिश कर रहा है, जो इसे बदलने से पहले प्रोग्रामेटिक लॉजिक के आधार पर 'व्यू मोड' को बदल देगा। वर्तमान में फ़ील्ड को उनके प्रदर्शन मोड सेटिंग्स के माध्यम से कई सामग्री प्रकारों पर प्रदान किया जा रहा है, जिनमें से प्रत्येक फ़ील्ड फ़ॉर्मेटर 'रेंडर नोड' का उपयोग कर रहे हैं।
पहला प्रयास
मेरा पहला विचार निम्नलिखित को लागू करना था, एक हुक है एक हुक पर विचार करना:
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;
}
}
स्पष्ट रूप से मेरे मॉड्यूल के नाम के लिए HOOK का आदान-प्रदान करना।
यह वास्तव में बात करता है, तो ऊपर से पहले या मूल कार्य के बाद से निकाल देते थे नहीं था node_reference_field_formatter_view
में node_reference.module
, क्योंकि मैं या तो यह उत्पादन पूरी तरह से उम्मीद है कि ओवरराइड होगा या, प्रतिपादन से पहले अपने मूल्यों को संशोधित करते हैं। एकमात्र समस्या यह है, उपरोक्त हुक केवल प्रति मॉड्यूल आधार पर कार्य करता है - अर्थात यह साइट-वाइड नहीं है, इसलिए मूल रूप से यह मेरे मॉड्यूल में आग नहीं लगाता है।
अब जाहिर है कि मैं एक रेंडर नोड के आउटपुट के लिए अपना खुद का फील्ड फॉर्मेटर लिख सकता हूं। लेकिन ऐसा लगता है कि वहाँ पहले से मौजूद एक कचरे का थोड़ा सा लगता है।
अन्य दृष्टिकोण
मेरे अन्य तरीकों के लिए किया गया है HOOK_preprocess_node
और HOOK_preprocess_field
लेकिन पूर्व कुछ भी नहीं है view_mode
के बारे में जानकारी, और बाद में कम से कम 5 अलग जटिल संरचनाओं कि सब एक के लिए संदर्भ है शामिल view_mode
विभिन्न स्तरों पर संपत्ति - और यह में से प्रत्येक को संशोधित करने के लिए नहीं बल्कि hacky लगता है उनके मान। यहां तक कि जब मैंने कुछ view_mode
गुण बदले हैं तो परिणामी छवि नहीं बदलती है।
सवाल
क्या किसी को फील्ड फॉर्मेटर रेंडरर्स (एक कंट्रीब्यूट मॉड्यूल के) में कदम रखने का एक साफ तरीका पता है और यह प्रति पृष्ठ अनुरोध के आधार पर सेटिंग्स बदल देता है - अर्थात वास्तविक सामग्री प्रकार के स्थायी दृश्य मोड सेटिंग्स को बदलने के लिए नहीं?
view_mode
पर hook_preprocess_node
, मूर्ख मुझे! मुझे आश्चर्य है कि अगर ऐसा कुछ भी hook_field_formatter_view_alter()
D8 में मौजूद है ...
hook_field_formatter_view_alter()
या एक से अधिक वर्षों के लिए शायद देख रहा हूँ , यह दुर्भाग्य से मौजूद नहीं है। एफवाईआईhook_preprocess_node()
निश्चित रूप से इसके लिएview_mode
उपलब्ध है, यह अंदर है$vars['view_mode']
, न$vars['node']->view_mode
कि जिसे आप कोशिश करने के लिए लुभा सकते हैं।