Задача: надо скрыть от глаз пользователя поле cck (заполняется с помощью js перед отправкой)
Долго ломал голову, пробовал разные способы. В итоге пришел к такому варианту:
{
$name = $element['#field_name'] . "[0][value]";
$id = 'edit-' . str_replace('_', '-', $element['#field_name']) . '-0-value';
$default_value = check_plain($element[0]['#default_value']['value']);
$element[0]['#prefix'] = <<<PREFIX
<input type="hidden" name="$name" id="$id" value="$default_value" />
<!--
PREFIX;
$element[0]['#suffix'] = "\n -->\n";
}
и из hook_form_alter применяю эту функцию к нужным элементам.
В моем случае все это работает правильно, но больше похоже на костыль, чем на правильное решение.
Хотелось бы узнать, как такое правильно делать (что-то вроде [#type]=hidden).
Комментарии
В CCK вообще есть настройка видимости полей, ставьте ему hidden и всё.
Пробовал, не помогает. При создании новой ноды это поле отображается (речь в посте о форме создания).
admin/content/node-type/page/display
уберите права на доступ к полю для нужной роли (cck permissions)
Так тогда поле не отобразится вообще и, насколько я понимаю, при сабмите не обработается автоматом.
варианты:
1) скрыть через css. id поля {display:none}
2) скрыть через тот же javascript
3) темизировать форму редактирования ноды через theme_ТИПКОНТЕНТА_node_form