Гачок для копіювання поля


15

У мене є власний модуль, який форматує відображення поля зображення, яке може приймати кілька значень. Мені хотілося б знати, який гачок я повинен використовувати, щоб дублювати перше значення поля (наприклад, "[image1]"), і додати його до початку масиву ( array_unshift()напевне) перед тим, як решта моїх функцій відформатувати формат відображення / тема поля.

Так що було

  • [image1]
  • [image2]
  • [image3]

стає

  • [image1]
  • [image1]
  • [image2]
  • [image3]

Тоді я збираюсь розглянути їх окремо, але, думаю, цю частину вже зрозумів.

Зараз я використовую hook_field_formatter_view()і намагався просто додати його до початку $itemsмасиву у верхній частині функції, але це, схоже, не спрацювало. Якби я відразу масив після цього він показує, але тільки 3 речі отримати вихід; Я припускаю, що кількість полів визначається в іншому місці.dprint_r()$items


1
Якщо ви хочете просто скопіювати зображення, можливо, Javascript - це спосіб?
Кодіум

Ні, пробачте. Я використовую js для результатів, але мені потрібно робити інші дані для даних, hook_field_formatter_viewале це працює лише один раз на зображення.
Шанс G

Я подивився на це в налагоджувальній машині і здивувався, коли виявив додаткові дельти, додані до масиву, який ігнорується.
Адам S

+1 для вашого запитання, це цікава тема. Але, щоб допомогти нам подумати над реальним рішенням, чи можете ви бути більш конкретними, яке ваше основне призначення (тому причина, чому ви хочете дублювати перше зображення)? Чим більше інформації ми знаємо, тим кращі відповіді ви могли б отримати. :)
Sk8erPeter

Я вирішив цю проблему за допомогою JavaScript. Але відповісти на ваше запитання; Я намагався реалізувати hoverzoom, який використовує одне велике зображення на набір, а потім мініатюри всіх зображень, щоб дозволити користувачу перемикати велике зображення.
Шанс G

Відповіді:


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()це те, де ваш код робить вихід, який відображається користувачеві, і тому він бажає масив, що передається, як повернене значення. Тому просто обробіть перше зображення двічі і надайте йому інший клас css чи щось таке.

Щось на зразок:

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

Оскільки hook_field_formatter_view()очікується, що масив, який буде передано, і оскільки масиви, що передаються, позначаються як рендеровані, коли вони надані, просто внесення двох посилань на один і той же об'єкт призведе до того, що одне буде надано, позначено як надане, а потім наступного разу буде проігноровано.


Вибачте Пол, але ви прочитали моє запитання? Я зміг додати його до початку масиву елементів. Проблема полягала в тому, що вона все ще не виводиться.
Шанс G

hoke_field_formatter_view () отримує поля, і ви повинні перетворити їх у масиви, що передаються Якщо ви просто зробите два посилання на один і той же масив, цей елемент буде позначений як наданий, а не повторний. Таким чином, ви повинні створити новий масив для відтворення для кожного елемента, який ви хочете.
paul-m

Це відповідь?
paul-m

Ні. Я можу додати додатковий елемент до масиву. Коли я dpm масив, який він показує, він просто не друкується. Я приймаю всі правильні відповіді.
Шанс G

Як я вже згадував, система візуалізації позначає елементи як уже надані. Це означає, що якщо ви просто передасте друге зображення за посиланням, воно буде позначене як виведене в перший раз, а потім НЕ виведене вдруге, оскільки воно вже позначене.
paul-m
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.