Используя 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; 
}
?>
Другие вопросы по тегам