it-swarm-ko.tech

필드 테마 기능에 포맷터 설정을 전달하는 방법은 무엇입니까?

hook_field_info를 구현하여 필드를 만들었습니다. 완벽하게 작동하는 위젯을 만들었으며 포맷터로로드 블록을 쳤습니다.

추가 출력 옵션을 추가하기 위해 hook_field_formatter_settings_form를 구현했지만 필드가 렌더링 될 때 테마 함수에 해당 값을 전달하는 방법을 알아낼 수 없습니다.

여기 내 코드의 단순화 된 버전이 있습니다. 포맷터 및 필드 테마와 관련된 것만은 아닙니다.

function test_field_formatter_info() {
    return array(
        'test' => array(
            'label' => t('Test'),
            'field types' => array('test'),
        ),
    );
}

function test_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $element = array();

  foreach ($items as $delta => $item) {

    $element[$delta] = array(
      '#theme' => 'test',
      '#item' => $item,
      '#myextravalue' => $display['settings']['myextravalue'],
    );
  }

  return $element;  
}

function test_theme() {
  return array(
    'test' => array (
      'variables' => array('item' => NULL, 'myextravalue' => NULL),
    ),
  );
}

function theme_test($variables) {   
    $item = $variables['item'];
    ...
    return $output;
}

위젯, 필드 및 포맷터가 제대로 작동하고 있습니다. 테스트 테마 함수에 hook_field_formatter_settings_form로 정의 된 포맷터 설정을 얻는 방법을 알 수 없습니다.

$variables 변수를 사용하면 item에 대한 배열 만 표시됩니다. myextravalue는 없습니다!

Drupal 7)에 필드/위젯/포매터를 만드는 방법에 대한 정보는 거의 없으며 이것으로 머리카락을 뽑습니다.

4
Camsoft

Formatter_view 구현은 image_field_formatter_view () 와 매우 유사합니다.

그러나 정보 후크에 설정의 기본값이 누락 된 것 같습니다. 필요한지 확실하지 않지만 추가하려고하면 다시 image_field_formatter_info ()

Field_formatter_settings 양식이 올바르게 작동합니까? 요약에 올바르게 표시되고 다시 편집 할 때 값을 유지합니까?

더 많은 정보가 없다면, 당신에게 제공 할 수있는 유일한 조언은 아직 devel.module을 설치하지 않았다면 dpm()을 광범위하게 사용하여 어떤 정보를 얻을 수 있는지 알아 보는 것입니다. 예를 들어 formatter_view () 함수에 $ display 필요한 정보가 포함되어 있습니까?

그렇다면 추가 테마 인수에 대해 아직 모르는 오래된 테마 레지스트리 일 수 있습니다 (예를 들어 나중에 추가 한 경우).

4
Berdir

다른 테마 함수와 마찬가지로 해당 배열 인덱스를 테마 함수에서 사용하는 변수로 정의해야합니다.

예를 들어 다음 코드를 사용하여 theme_table () 함수를 사용할 수 있습니다 (코드는 node_admin_nodes () 에 있음).

$form['nodes'] = array(
  '#theme' => 'table', 
  '#header' => $header, 
  '#rows' => $options, 
  '#empty' => t('No content available.'),
);

theme_table()drupal_common_theme () 에 다음과 같이 정의됩니다.

'table' => array(
  'variables' => array('header' => NULL, 'rows' => NULL, 'attributes' => array(), 'caption' => NULL, 'colgroups' => array(), 'sticky' => TRUE, 'empty' => ''),
),

"#myextravalue"를 사용하려면 "myextravalue"를 테마 함수에서 사용하는 변수 중 하나로 정의해야합니다.

4
kiamlaluno