Будьте осторожны с Views Customfield

это перевод блогпоста с нашего официального сайта - http://pixeljets.com/blog/be-careful-views-custom-field.

В одном проекте на Drupal 6, который мы делали, с завидной периодичностью обнаруживались какие-то загадочные баги. Наши сравнительно сложные страницы, сделанные через views, и использовавшие Views custom field, постоянно ломались. Вывод php поля мог сломаться, например, когда новое CCK поле добавлялось к какому-то типу ноды, или когда при просмотре views пользователь выбирал определенное значение в exposed фильтрах.

Код моих php полей был очень простой, на уровне:

<?php
if ($data->field_node_status_value > 2) {
  echo l("Some action", 'test/url');
}
?>

Я потратил несколько часов на дебаг этой проблемы - и, проверяя sql запросы, сгенерированные вьюсами, я заметил, что алиас поля, возвращаемый вьюсами, может быть разным при определенных условиях. Эта информация помогла мне найти связанные с этой проблемой топик на д.орг: http://drupal.org/node/701798

Для меня оказалось сюрпризом то, что оказывается нельзя полагаться на данные из переменной $data в php поле, предоставляемом модулем views customfield! Views постоянно переименовывают имена полей, которые они дергают из базы

(когда новое поле было добавлено в вывод views, когда новое поле добавлено в ноду, когда используется какой-то exposed фильтр, и так далее), и на такие сырые данные просто нельзя надеяться. merlinofchaos, создатель views, подтверждает, что это не баг, а фича - http://drupal.org/node/361756 .

Я решил все свои проблемы переносом php кода в тплки темы:

<?php
$status = $row->{$view->field['field_node_status_value']->field_alias};
if ($status > 2) {
  echo l("Some action", 'test/url');
}
?>

Самое страшное в этой истории то, что куча народа использует views customfield и совершенно не предполагает, что это рано или поздно приведет к проблемам. Надеюсь, они очнутся и обновят описание своего модуля, если уж пофиксить эту проблему так сложно.

Blog categories: DrupalТемизация Drupal