如何为现有字段编写其他字段格式化程序


9

我想为现有的字段类型编写一个新的字段格式化程序。我不想替换任何现有的格式化程序,但提供了一个新选项。

还是我最好使用theme_preprocess_field()进行较小的改动?但这似乎很难维护,我想保持我的内容编辑器选项处于打开状态(并在GUI中)。

有人可以指出一个正确的方法示例吗?

Answers:


13

我个人认为格式化程序是更好的解决方案。

您只需要实现两个钩子:

例如:

function MYMODULE_field_formatter_info() {
  return array(
    'my_formatter' => array(
      'label' => t('My formatter'),
      // The important bit...
      'field types' => array('field_type'),
    ),
  );
}

function MYMODULE_field_formatter_view($entity_type, $entity, $field, $instance, $langcode, $items, $display) {
  $settings = $display['settings'];
  $element = array();

  if ($display['type'] == 'my_formatter') {
    foreach ($items as $delta => $item) {
      $element[$delta] = array('#markup' => $item['value']);
    }
  }

  return $element;
}

要进行更深入的了解,请下载“ 示例”模块并查看field_example-那里有很多代码和文档可助您一臂之力。


您可能还对实现hook_field_formatter_settings_form和hook_field_formatter_settings_summary感兴趣,以便为用户提供一些选项来更改字段的显示方式。
ndvo

2

您可以开发自定义模块或使用“自定义格式程序”模块。

在第一种情况下,你必须写一个实现一些Drupal 7个的钩子模块:hook_field_formatter_info()hook_field_formatter_view()hook_theme()hook_field_formatter_info()用于声明格式化程序类型。该函数返回一个带有格式化程序描述的数组。密钥将是格式化程序的名称,并且将具有一个带有标签和字段类型的数组。之后,您必须执行hook_field_formatter_view()hook_theme()以定义模板。您可以在docs中找到有关Feld Fieldter API的更多详细信息。

在第二种情况下,您可以使用“ 自定义格式化程序”模块,该模块允许为每个字段创建自定义显示格式化程序。通过此模块,您可以使用带有标记的自定义PHP代码或HTML代码创建格式化程序。

我建议第二种方法,因为它非常易于使用和配置。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.