Используя hook_ds_fields_info(), есть ли способ использовать стандартные средства форматирования, чтобы опции для этих средств форматирования были доступны в интерфейсе управления отображением?
Я следовал хорошему учебнику здесь: http://previousnext.com.au/blog/creating-custom-display-suite-fields-or-how-i-learned-stop-worrying-and-use-hookdsfieldsinfo для создания программных таможенных пошлин поле с hook_ds_fields_info().
В моем коде ниже я пытаюсь использовать форматтер text_trimmed, но в пользовательском интерфейсе я не получаю настройки для обрезанного формата.
/**
* Implements hook_ds_fields_info().
*/
function my_module_ds_fields_info($entity_type) {
$fields = array();
$fields['node']['article_footnote'] = array(
'title' => t('Article footnote'),
'field_type' => DS_FIELD_TYPE_FUNCTION,
'function' => 'my_module_ds_field_article_footnote',
'ui_limit' => array('my_content_type|*', '*|search_index'),
'properties' => array(
'formatters' => array(
'text_default' => t('Default'),
'text_plain' => t('Plain text'),
'text_trimmed' => t('Trimmed'),
),
),
);
if (isset($fields[$entity_type])) {
return array($entity_type => $fields[$entity_type]);
}
return;
}
/**
* Render the article footnote field.
*/
function my_module_ds_field_article_footnote($field) {
$content = 'All articles are composed in a permanent state of coffee frenzy.';
return $content;
}
1 ответ
Одна вещь, которую вам не хватало, это отфильтровать ваш текст с помощью check_markup() в вашей функции обратного вызова. Без этого вы просто возвращаете обычную строку.
Также рекомендуется использовать список текстовых форматов по умолчанию, которые настроены в системе, путем вызова filter_formats ().
Вот пересмотренный код, который должен работать. Когда у вас есть этот код, попробуйте переключить формат поля, а затем просмотрите свой узел, чтобы увидеть другие результаты. Я добавил немного HTML в вашу строку, чтобы вы могли видеть различия.
<?php
/**
* Implements hook_ds_fields_info().
*/
function my_module_ds_fields_info($entity_type) {
$fields = array();
// Build a list of input formats.
$formatters = array();
$filter_formats = filter_formats();
foreach ($filter_formats as $format) {
$formatters[$format->format] = $format->name;
}
$fields['node']['article_footnote'] = array(
'title' => t('Article footnote'),
'field_type' => DS_FIELD_TYPE_FUNCTION,
'function' => 'my_module_ds_field_article_footnote',
'ui_limit' => array('my_content_type|*', '*|search_index'),
'properties' => array(
'formatters' => $formatters,
),
);
if (isset($fields[$entity_type])) {
return array($entity_type => $fields[$entity_type]);
}
return;
}
/**
* Render the article footnote field.
*/
function my_module_ds_field_article_footnote($field) {
$content = check_markup('<h1>All articles</h1> are composed in a permanent state of <strong>coffee frenzy</strong>.', $field['formatter']);
return $content;
}
?>