Как передать настройки форматирования в функцию темы поля?


Я создал поле, реализовав 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, и я вырываю свои волосы с этим.

Author: Camsoft, 2011-05-09

2 answers

Ваша реализация formatter_view выглядит нормально, очень похоже на image_field_formatter_view().

Однако в вашем информационном крючке, похоже, отсутствуют значения по умолчанию для ваших настроек, я не уверен, требуются ли они или нет, но попробуйте добавить их, снова см. image_field_formatter_info()

Правильно ли работает форма field_formatter_settings? Правильно ли он отображается в сводке и сохраняет значения при повторном редактировании?

Без дополнительных информация, единственный совет, который я могу вам дать, - это установить devel.module, если вы еще этого не сделали, и широко использовать dpm(), чтобы узнать, где вы получаете какую информацию. Например, содержит $отображение необходимой информации в вашей функции formatter_view()?

Если да, то это может быть просто устаревший реестр тем, который еще не знает о вашем дополнительном аргументе темы (например, если вы добавили его позже).

 4
Author: Berdir, 2011-09-25 09:39:56

Как и любые другие функции темы, вам необходимо определить эти индексы массива как переменные, используемые функцией темы.

Например, вы можете использовать функцию 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
Author: kiamlaluno, 2011-05-09 22:42:48