필드 복제를위한 후크


15

이미지 필드의 표시 형식을 지정하는 사용자 정의 모듈이 있는데 여러 값을 사용할 수 있습니다. 필드의 첫 번째 값 (예 : "[image1]")을 복제하기 위해 어떤 후크를 사용해야하는지 알고 싶습니다 array_unshift(). 나머지 함수를 포맷하기 전에 배열의 시작 부분에 다시 추가 합니다. 필드의 표시 / 테마.

그래서 무엇

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

된다

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

그런 다음 별도로 테마를 지정하려고하지만 이미 그 부분을 파악했다고 생각합니다.

나는 현재을 사용 hook_field_formatter_view()하고 있으며 $items함수 상단의 배열 시작 부분에 추가하려고했지만 작동하지 않는 것 같습니다. 만약 내가 바로 이 그것을 보여주고, 만 3 항목 출력을 얻을 후 배열; 필드 수는 다른 곳에서 결정된다고 가정합니다.dprint_r()$items


1
이미지를 복사하려면 Javascript가 적합합니까?
Codium

아니 미안해. 결과에 js를 사용하고 hook_field_formatter_view있지만 데이터로 다른 작업을 수행해야 하지만 이미지 당 한 번만 실행됩니다.
Chance G

나는 디버거에서 그것을 보았고 배열에 추가 된 델타가 무시되는 것을 발견하는 것에 놀랐습니다.
Adam S

질문에 +1하면 흥미로운 주제입니다. 그러나 실제 솔루션에 대해 생각할 수 있도록 주요 목적이 무엇인지 더 구체적으로 설명 할 수 있습니까 (따라서 첫 번째 이미지를 복제하려는 이유)? 정보가 많을수록 더 나은 답변을 얻을 수 있습니다. :)
Sk8erPeter

자바 스크립트 로이 문제를 해결했습니다. 그러나 당신의 질문에 대답하기 위해; 나는 세트 당 하나의 큰 이미지를 사용하고 사용자가 큰 이미지를 전환 할 수 있도록 모든 이미지의 축소판을 사용하는 호버 확대를 구현하려고했습니다.
Chance G

답변:


1

대신 hook_field_formatter_prepare_view () 를 원합니다 . 이 후크는 단일 엔티티가 아닌 엔티티 그룹에서 작동합니다.

작동하는 스 니펫이 있습니다. 델타는 선형으로 유지되어야하므로 10 개의 행으로 된 못생긴 루프를 작성하지 않으려면 일부 배열-후가 필요합니다.

<?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

hook_field_formatter_view ()는 필드를 가져 와서 렌더링 가능한 배열로 바꿔야합니다. 동일한 배열을 두 번 참조하면 해당 항목이 렌더링 된 것으로 표시되고 다시 렌더링되지 않습니다. 따라서 원하는 각 항목에 대해 새로운 렌더링 가능 배열을 만들어야합니다.
paul-m

이것이 답입니까?
paul-m

아니요. 배열에 추가 항목을 추가 할 수 있습니다. 내가 표시하는 배열을 dpm하면 인쇄되지 않습니다. 나는 모든 정답을 받아들입니다.
Chance G

앞에서 언급했듯이 렌더링 시스템은 항목을 이미 렌더링 된 것으로 표시합니다. 즉, 참조로 두 번째 이미지를 단순히 전달하면 첫 번째로 렌더링 된 것으로 표시되고 이미 표시되었으므로 두 번째로 렌더링되지 않습니다.
paul-m
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.