2013-04-27 2 views
0

Я следил за хорошим учебником здесь: http://previousnext.com.au/blog/creating-custom-display-suite-fields-or-how-i-learned-stop-worrying-and-use-hookdsfieldsinfo для создания программно-таможенного поля с помощью hook_ds_fields_info().Использование 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; 
} 

ответ

0

Цельные вы пропали без вести, чтобы фильтровать текст через 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; 
} 
?>