Правильно виводимо поля в Drupal 7
Drupal 7 дає можливість працювати з сутностями (Entities), а разом із цим і потужний API для роботи з полями, які можуть бути прикріплені до сутності. Якщо Ви керуєте полями через вкладки «Керування полями» та «Керування відображенням» на сторінці типів матеріалів, Drupal сам піклується про правильну роботу з полями.
Можливо, Ви бачили (або писали) код, який виглядає приблизно так:
Копання в об'єкті ноди було досить поширене в Drupal 6, і «safe_value» начебто допоможе уникнути можливих проблем. Що в цьому поганого? Давайте розглянемо.
- По-перше, елемент ['und'] є частиною локалізації поля Drupal 7; прямий доступ до його значення призведе до проблем у будь-якому багатомовному середовищі.
- Отримуючи доступ безпосередньо до значення поля, ми втрачаємо можливість темізувати рендер поля та використовувати базову розмітку.
- [0] [safe_value] явно звертається до першого значення поля - якщо ви хочете використовувати кожне значення з кількох значень поля - доведеться використовувати цикл.
- Деякі поля (наприклад, node references) не мають елемента safe_value, тільки value, які можуть бути легко відображені без відповідної попередньої обробки. Це небезпечно, і не тільки тому, що node references містить небезпечні дані (той же nid), але й тому, що це шкідлива звичка, особливо для нових розробників. Використання значення інших типів полів також може бути дуже небезпечним.
Як зробити правильно? Використовувати field_view_field()!