फील्ड डुप्लीकेशन के लिए हुक


15

मेरे पास एक कस्टम मॉड्यूल है जो एक छवि क्षेत्र के प्रदर्शन को प्रारूपित कर रहा है, जो कई मानों को स्वीकार कर सकता है। मैं जानना चाहता हूं कि क्षेत्र के पहले मूल्य (जैसे "[image1]") को डुप्लिकेट करने के लिए मुझे किस हुक का उपयोग करना चाहिए, और array_unshift()बाकी कार्यों से पहले इसे सरणी की शुरुआत में वापस जोड़ दूंगा ( मुझे लगता है)। क्षेत्र का प्रदर्शन / विषय।

तो क्या था

  • [Image1]
  • [Image2]
  • [छवि 3]

हो जाता है

  • [Image1]
  • [Image1]
  • [Image2]
  • [छवि 3]

मैं फिर उन्हें अलग से थीम देने जा रहा हूं, लेकिन मुझे लगता है कि मेरे पास पहले से ही वह हिस्सा है।

मैं वर्तमान में उपयोग कर रहा हूं hook_field_formatter_view(), और $itemsफ़ंक्शन के शीर्ष पर इसे सरणी की शुरुआत में जोड़ने की कोशिश की है, लेकिन यह काम नहीं कर रहा है। अगर मैं तुरंत इस यह पता चलता है, लेकिन केवल 3 आइटम उत्पादन प्राप्त करने के बाद सरणी; मैं यह मान रहा हूं कि क्षेत्र की संख्या कहीं और निर्धारित होती है।dprint_r()$items


1
यदि आप छवि को कॉपी करना चाहते हैं, तो शायद जावास्क्रिप्ट एक तरीका है?
कोडिया

नहीं मुझे माफ कर दो। मैं परिणामों पर js का उपयोग कर रहा हूं, लेकिन मुझे डेटा के साथ अन्य सामान करने की आवश्यकता है, hook_field_formatter_viewलेकिन यह केवल छवि के अनुसार एक बार चलता है।
जी

मैंने इसे एक डिबगर में देखा और आश्चर्यचकित था कि सरणी को अनदेखा किए जाने पर अतिरिक्त डेल्टास मिला।
एडम एस

आपके प्रश्न के लिए +1, यह एक दिलचस्प विषय है। लेकिन वास्तविक समाधान के बारे में सोचने में हमारी मदद करने के लिए, क्या आप अधिक विशिष्ट हो सकते हैं कि आपका मुख्य उद्देश्य क्या है (इसलिए यही कारण है कि आप पहली छवि डुप्लिकेट चाहते हैं)? जितनी अधिक जानकारी हम जानते हैं, उतने बेहतर उत्तर आपको मिल सकते हैं। :)
Sk8erPeter

मैंने जावास्क्रिप्ट के साथ इस समस्या को हल किया। लेकिन आपके सवाल का जवाब देने के लिए; मैं होवरज़ूम को लागू करने की कोशिश कर रहा था, जो प्रति सेट एक बड़ी छवि का उपयोग करता है और फिर सभी छवियों के थंबनेल उपयोगकर्ता को बड़ी छवि को बदलने की अनुमति देता है।
जी

जवाबों:


1

आप इसके बजाय hook_field_formatter_prepare_view () चाहते हैं । ध्यान दें कि यह हुक किसी एक पर नहीं, बल्कि संस्थाओं के समूह पर काम करता है।

यहां एक काम करने वाला स्निपेट है। कुछ सरणी-फू को दस लाइनों की एक बदसूरत लूप लिखने की समाप्ति नहीं करने की आवश्यकता है, क्योंकि डेल्टा को रैखिक संरक्षित किया जाना चाहिए।

<?php

function MODULE_field_formatter_prepare_view($entity_type, $entities, $field, $instances, $langcode, &$items, $displays) {
  foreach ($entities as $id => $entity) {
    $array = array(0 => $items[$id][0], 1 => $items[$id][0]);
    if (count($items[$id]) > 1) {
      array_splice($array, 2, 0, array_slice($items[$id], 1));
    }
    $items[$id] = $array;
  }
}

0

hook_field_formatter_view()वह जगह है जहां आपका कोड उपयोगकर्ता को दिखाए जाने वाले आउटपुट को बनाता है, और इसलिए यह रिटर्न वैल्यू के रूप में रेंडर करने योग्य सरणी चाहता है। तो बस पहली छवि को दो बार संसाधित करें और इसे एक अलग सीएसएस वर्ग या कुछ दें।

कुछ इस तरह:

$output = array();
if (($field == 'myFieldType') && ($display == 'full')) {
  $output[] = renderFirstImage(reset($items));
  foreach ($items as $item) {
    $output[] = renderImage($item);
  }
}
return $output;

चूंकि hook_field_formatter_view()एक रेंडर करने योग्य सरणी की उम्मीद है, और चूंकि रेंडर करने योग्य सरणियों को रेंडर के रूप में चिह्नित किया जाता है, बस एक ही वस्तु के दो संदर्भ बनाने से एक का प्रतिपादन किया जाएगा, जिसे रेंडर के रूप में चिह्नित किया जाएगा, और फिर अगली बार अनदेखा कर दिया जाएगा।


मुझे क्षमा करें पॉल, लेकिन क्या आपने मेरा प्रश्न पढ़ा है? मैं इसे आइटम सरणी की शुरुआत में जोड़ने में सक्षम था। मुद्दा यह था कि यह अभी भी आउटपुट नहीं हो रहा था।
जी

hook_field_formatter_view () फ़ील्ड मिलती हैं और आपको उन्हें रेंडर करने योग्य सरणियों में बदल देना चाहिए। यदि आप एक ही सरणी के लिए दो संदर्भ बनाते हैं, तो उस आइटम को रेंडर के रूप में चिह्नित किया जाएगा, और फिर से रेंडर नहीं किया जाएगा। इसलिए आपको प्रत्येक आइटम के लिए एक नया रेंडर करने योग्य सरणी बनाना होगा।
पाऊल-एम

क्या इसका जवाब है?
पौल-मी।

नहीं, मैं सरणी में एक अतिरिक्त आइटम जोड़ने में सक्षम हूं। जब मैं इसे दिखाता हूं, तो यह प्रिंट नहीं करता है। मैं सभी उत्तर स्वीकार करता हूं जो सही हैं।
जी

जैसा कि मैंने उल्लेख किया है, रेंडर प्रणाली पहले से ही प्रदान की गई वस्तुओं को चिह्नित करती है। इसका मतलब है कि यदि आप संदर्भ द्वारा दूसरी छवि को पास करते हैं, तो यह पहली बार प्रदान की गई के रूप में चिह्नित हो जाएगी, और फिर दूसरी बार प्रस्तुत नहीं की जाएगी, क्योंकि यह पहले से ही चिह्नित है।
पॉल-एम।
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.