Правильно виводимо поля в Drupal 7

Drupal 7 дає можливість працювати з сутностями (Entities), а разом із цим і потужний API для роботи з полями, які можуть бути прикріплені до сутності. Якщо Ви керуєте полями через вкладки «Керування полями» та «Керування відображенням» на сторінці типів матеріалів, Drupal сам піклується про правильну роботу з полями.

Можливо, Ви бачили (або писали) код, який виглядає приблизно так:

Копання в об'єкті ноди було досить поширене в Drupal 6, і «safe_value» начебто допоможе уникнути можливих проблем. Що в цьому поганого? Давайте розглянемо.

  1. По-перше, елемент ['und'] є частиною локалізації поля Drupal 7; прямий доступ до його значення призведе до проблем у будь-якому багатомовному середовищі.
  2. Отримуючи доступ безпосередньо до значення поля, ми втрачаємо можливість темізувати рендер поля та використовувати базову розмітку.
  3. [0] [safe_value] явно звертається до першого значення поля - якщо ви хочете використовувати кожне значення з кількох значень поля - доведеться використовувати цикл.
  4. Деякі поля (наприклад, node references) не мають елемента safe_value, тільки value, які можуть бути легко відображені без відповідної попередньої обробки. Це небезпечно, і не тільки тому, що node references містить небезпечні дані (той же nid), але й тому, що це шкідлива звичка, особливо для нових розробників. Використання значення інших типів полів також може бути дуже небезпечним.

Як зробити правильно? Використовувати field_view_field()!