Как передать настройки форматирования в функцию темы поля?
Я создал поле, реализовав 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, и я вырываю свои волосы с этим.
2 answers
Ваша реализация formatter_view выглядит нормально, очень похоже на image_field_formatter_view().
Однако в вашем информационном крючке, похоже, отсутствуют значения по умолчанию для ваших настроек, я не уверен, требуются ли они или нет, но попробуйте добавить их, снова см. image_field_formatter_info()
Правильно ли работает форма field_formatter_settings? Правильно ли он отображается в сводке и сохраняет значения при повторном редактировании?
Без дополнительных информация, единственный совет, который я могу вам дать, - это установить devel.module, если вы еще этого не сделали, и широко использовать dpm()
, чтобы узнать, где вы получаете какую информацию. Например, содержит $отображение необходимой информации в вашей функции formatter_view()?
Если да, то это может быть просто устаревший реестр тем, который еще не знает о вашем дополнительном аргументе темы (например, если вы добавили его позже).
Как и любые другие функции темы, вам необходимо определить эти индексы массива как переменные, используемые функцией темы.
Например, вы можете использовать функцию 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" как одну из переменных, используемых вашей темой функция.