Как отобразить значение поля, включая его формат?

9

Я читаю значение поля и его формат из базы данных. Как бы я отобразил это значение в формате?

SomethingOn
источник

Ответы:

36

Несмотря на то, что вы могли бы потратить много времени на анализ того, как работает Field API, вам действительно следует использовать Field API напрямую для визуализации содержимого поля, а не запрашивать базу данных самостоятельно. Есть много инкапсуляции и абстракции, добавленных к полям, которые пробудят Древних Богов, если их обойти.

Используя Field API, если вы хотите отформатировать поле целиком, с меткой и всеми значениями, вы хотите использовать field_view_field():

$nid = 1;
$node = node_load($nid);
$output = field_view_field('node', $node, 'field_foo');

// $output is a render array, so it needs to be rendered first
print render($output);

Если вы просто хотите отобразить отформатированное значение одного элемента в поле, вам нужно использовать field_view_value(), что немного сложнее:

// Must load field content for entity before using field_view_value()
$fields = field_get_items('node', $node, 'field_foo');

// $index corresponds to the value you want to render. First value = 0.
$index = 0;
$output = field_view_value('node', $node, 'field_foo', $fields[$index]);

print render($output);

Если вы хотите использовать средство форматирования, отличное от значения по умолчанию, указанного для экземпляра поля, передайте его с помощью $displayпараметра в field_view_field()или field_view_value():

$display = array('type' => 'my_formatter');
$output = field_view_field('node', $node, 'field_foo', $display);

источник
$index (Третий параметр field_view_value ()) составляет $ дельты. Для одного поля значения это будет 0. Итак, вы можете использовать $output = field_view_value('node', $node, 'field_foo', $fields[0]);или$output = field_view_value('node', $node, 'field_foo', $fields[$delta]);
johirpro
0

проверяя API, я думаю, что вы ищете это. (Я не проверял код в любом случае)

$the_field = field_view_field($entity_type, $entity, $field_name, $display = array(), $langcode = NULL);

// render the field
drupal_render($the_field);

обновление: повторяющийся ответ, можете просто удалить меня. другой ответ опубликован, пока я пишу этот ответ.

gilzero
источник
0

Если вы используете модуль Custom Formatters , не забудьте добавить префикс «custom_formatters_» перед именем вашего устройства форматирования, например так:

$display = array('type' => 'custom_formatters_my_formatter');
Дмитрий
источник
0

Похоже, вы также можете отредактировать файл шаблона, чтобы настроить, как это выводится семантически:

1) Установите пользовательскую дату и укажите имя машины, например "short_date_only" или как угодно. 2) Настройте параметры отображения для типа контента, чтобы использовать этот формат 3) Переопределите шаблон поля на что-то вроде поля - field_date_custom-content_type.tpl

Даниил
источник