Как вывести поле с нужным форматтером?

Аватар пользователя drup-user drup-user 2 апреля в 20:47

Всем привет, вывожу поле вот так"

<?php print render($content['field_date']); ?>

Как мне вывести это поле, изменив формат вывода например на текстовый?

Лучший ответ

Аватар пользователя OldWarrior OldWarrior 3 апреля в 20:43
1

Вам, скорее всего, придётся читать и выводить значение поля, а не результат render(). Поскольку render() обычно выводит поле в HTML-обвязке (тут всё зависит от шаблона поля), а это уже не годится для strtotime(). Кстати, типично для render используется объект поля, а не значение поля, достаточно: <?php print render($content['field_date']); ?>. Ну это так, к слову.

Т.е. в вашем случае как-то так (сам не проверял, если что):


<?php print date('d.m.Y'strtotime($node->field_date['und'][0]['value'])); ?>

Комментарии

Аватар пользователя buddy90210 buddy90210 2 апреля в 21:00

Обычно мне, если необходимо вывести данные поля как то иначе, чем то что предлагают стандартные решения - из админки. Я лезу в ноду например:
<?php $field_value $node->['field_name']['und'][0]['value'];?>
А дальше делаешь с данными что хочешь.

Аватар пользователя buddy90210 buddy90210 2 апреля в 21:17

Да ты прав) правильно -
<?php $field_value $node->field_name['und'][0]['value'];?>
Но это для текстового поля, у поля типа DATE другая структура.
Воспользуйся функцией модуля devel
<?php dpm($node->field_date);?>

Аватар пользователя buddy90210 buddy90210 2 апреля в 21:48

$content - это переменная со значением полей для рендера на страницу.
а $node - это объект, нода, которая содержит всю информацию о данной годе.

Аватар пользователя drup-user drup-user 2 апреля в 22:59

А как вывести в нормальном формате? У меня выводит в ISO (16.08.202020 00:00)
Как убрать 00:00?

Аватар пользователя OldWarrior OldWarrior 3 апреля в 17:57

drup-user wrote:
А как вывести в нормальном формате? У меня выводит в ISO (16.08.202020 00:00)
Как убрать 00:00?

Видимо, в ISO сохранена изначально дата в поле.
Путём некоторых манипуляций с strtotime() и date() можно добиться требуемого результата.

Аватар пользователя drup-user drup-user 3 апреля в 18:20

Есть пример как это сделать в строке?

<?php print render($content['field_date']['#object']->field_date['und'][0]['value']); ?>

Аватар пользователя OldWarrior OldWarrior 3 апреля в 20:43
1

Вам, скорее всего, придётся читать и выводить значение поля, а не результат render(). Поскольку render() обычно выводит поле в HTML-обвязке (тут всё зависит от шаблона поля), а это уже не годится для strtotime(). Кстати, типично для render используется объект поля, а не значение поля, достаточно: <?php print render($content['field_date']); ?>. Ну это так, к слову.

Т.е. в вашем случае как-то так (сам не проверял, если что):


<?php print date('d.m.Y'strtotime($node->field_date['und'][0]['value'])); ?>
Аватар пользователя drup-user drup-user 3 апреля в 20:47

OldWarrior wrote: Вам, скорее всего, придётся читать и выводить значение поля, а не результат render(). Поскольку render() обычно выводит поле в HTML-обвязке (тут всё зависит от шаблона поля), а это уже не годится для strtotime(). Кстати, типично для render ис

Спасибо, это решение!

Аватар пользователя OldWarrior OldWarrior 3 апреля в 21:06

Строго говоря, это не то, чтобы костыль, но и не по фэн-шуй. Я привёл решение только как пример реализации. А вообще-то значение поля следует переопределять хотя бы на этапе preprocess-функций, а не в *.tpl.php. Лет десять назад тут на форуме крепких люлей выписывали (в вербальной форме) за код в шаблоне. И, в общем-то,правильно делали.