ক্ষেত্র সদৃশ জন্য হুক


15

আমার একটি কাস্টম মডিউল রয়েছে যা একটি চিত্র ক্ষেত্রের প্রদর্শনকে ফর্ম্যাট করে যা একাধিক মান গ্রহণ করতে পারে। আমি ক্ষেত্রের প্রথম মানটি (যেমন "[চিত্র 1]") নকল করতে আমার কী হুক ব্যবহার করা উচিত তা জানতে চাই এবং array_unshift()আমার বাকী ফাংশনগুলির বাক্য বিন্যাসের আগে এটি অ্যারের শুরুতে ফিরে যুক্ত করুন ( আমার অনুমান সহ) ক্ষেত্রের প্রদর্শন / থিম।

তাই কি ছিল

  • [Image1]
  • [Image2]
  • [Image3]

হয়ে

  • [Image1]
  • [Image1]
  • [Image2]
  • [Image3]

আমি তখন সেগুলি আলাদাভাবে থিম করতে যাচ্ছি, তবে আমার মনে হয় আমি ইতিমধ্যে সেই অংশটি বের করে ফেলেছি।

আমি বর্তমানে ব্যবহার করছি এবং ফাংশনের শীর্ষে অ্যারের hook_field_formatter_view()শুরুতে এটি যুক্ত করার চেষ্টা করেছি $items, তবে এটি কাজ করে বলে মনে হয় না। যদি আমি অবিলম্বে এই এটা দেখায়, কিন্তু মাত্র 3 আইটেম আউটপুট পেতে পরে অ্যারে; আমি ধরে নিচ্ছি যে ক্ষেত্রের সংখ্যা অন্য কোথাও নির্ধারিত হয়।dprint_r()$items


1
আপনি যদি কেবল ছবিটি অনুলিপি করতে চান তবে জাভাস্ক্রিপ্টটি কি উপায়?
কোডিয়াম

না আমি দুঃখিত. আমি ফলাফলগুলিতে জেএস ব্যবহার করছি তবে ডেটা সহ আমার অন্যান্য জিনিসগুলি করা দরকার hook_field_formatter_viewতবে এটি প্রতি ছবিতে কেবল একবার চালিত হয়।
চান্স জি

আমি এটি একটি ডিবাগারের দিকে তাকিয়েছিলাম এবং অ্যারে উপেক্ষা করা হচ্ছে এমন অতিরিক্ত ডেল্টা যুক্ত করে অবাক হয়েছি।
অ্যাডাম এস

আপনার প্রশ্নের জন্য +1, এটি একটি আকর্ষণীয় বিষয়। তবে আসল সমাধান সম্পর্কে আমাদের ভাবতে সহায়তা করার জন্য, আপনার মূল উদ্দেশ্যটি কী কী আপনি আরও সুনির্দিষ্ট করে বলতে পারেন (তাই আপনি কেন প্রথম চিত্রটির নকল করতে চান)? আমরা যত বেশি তথ্য জানি, তত ভাল উত্তর আপনি পেতে পারেন। :)
Sk8erPeter

আমি জাভাস্ক্রিপ্ট দিয়ে এই সমস্যার সমাধান করেছি। কিন্তু আপনার প্রশ্নের উত্তর দিতে; আমি হোভারজুম বাস্তবায়নের চেষ্টা করছিলাম, যা ব্যবহারকারীকে বৃহত্তর চিত্রটি স্যুইচ করার অনুমতি দেওয়ার জন্য প্রতি সেট প্রতি একটি বড় চিত্র এবং তারপরে সমস্ত চিত্রের থাম্বনেল ব্যবহার করে।
চান্স জি

উত্তর:


1

আপনি এর পরিবর্তে হুক_ফিল্ড_ফর্ম্টার_প্রিয়তা_দর্শন () চান । এই হুকটি একক নয়, একক সত্তা সত্তা সত্তা পরিচালনা করুন।

এখানে একটি কাজের স্নিপেট। দশটি লাইনের কুৎসিত লুপটি লেখার শেষ না করার জন্য কিছু অ্যারে-ফু প্রয়োজন, যেহেতু ডেল্টাস অবশ্যই রৈখিক সংরক্ষণ করতে হবে।

<?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()একটি উপস্থাপনযোগ্য অ্যারে প্রত্যাশা করে, এবং যেহেতু রেন্ডারযোগ্য অ্যারেগুলি রেন্ডার করা হয় তখন এটি রেন্ডার হিসাবে চিহ্নিত করা হয়, কেবল একই বস্তুর সাথে দুটি উল্লেখ করার ফলে একজনকে রেন্ডার করা হবে, রেন্ডার হিসাবে চিহ্নিত করা হবে এবং পরবর্তী সময়ে পরবর্তী সময়ে উপেক্ষা করা হবে।


আমি দুঃখিত পল কিন্তু আপনি কি আমার প্রশ্নটি পড়েছেন? আমি আইটেম অ্যারের শুরুতে এটি যুক্ত করতে সক্ষম হয়েছি। বিষয়টি হ'ল এটি এখনও আউটপুট হচ্ছে না।
চান্স জি

হুক_ফিল্ড_ফর্ম্যাটটার_ভিউ () ক্ষেত্রগুলি পায় এবং আপনাকে অবশ্যই এগুলি রেন্ডারযোগ্য অ্যারেতে পরিণত করতে হবে। আপনি যদি একই অ্যারেটিতে কেবল দুটি রেফারেন্স করেন তবে সেই আইটেমটি রেন্ডার হিসাবে চিহ্নিত হবে, এবং পুনরায় রেন্ডার হবে না। সুতরাং আপনার প্রতিটি আইটেমের জন্য আপনাকে নতুন উপস্থাপনযোগ্য অ্যারে তৈরি করতে হবে।
পল-মি

এই কি উত্তর?
পল-মি

না, আমি অ্যারেতে একটি অতিরিক্ত আইটেম যুক্ত করতে সক্ষম। আমি যখন অ্যারে এটি দেখি তখন এটি প্রিন্ট করে না। আমি সঠিক যে সমস্ত উত্তর গ্রহণ করি।
চান্স জি

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