Нужно сделать поле ССК отключенным, "серым". За это отвечает свойство элемента формы 'disabled'.
С forms api я только начал разбираться. Попытался использовать hook_form_alter, но с полями сск этот фокус не проходит. По ссылке я вопрос оставил, но может кто из наших разбирался с вопросом?
Комментарии
Решено, благодаря ответу в указанном посте:
<?php
function my_form_alter(&$form, $form_state, $form_id) {
if (isset($form['type']) && isset($form['#node']) && $form['type']['#value'] .'_node_form' == $form_id) {
$form['#after_build'][] = 'my_form_process';
}
}
function my_form_process($form, &$form_state) {
my_fix_disabled($form['field_myfiled']);
return $form;
}
function my_fix_disabled(&$elements) {
foreach (element_children($elements) as $key) {
if (isset($elements[$key]) && $elements[$key]) {
// Recurse through all children elements.
my_fix_disabled($elements[$key]);
}
}
if (!isset($elements['#attributes'])) {
$elements['#attributes'] = array();
}
$elements['#attributes']['disabled'] = 'disabled';
}
?>
When after_build handler is invoked, the code in FAPI that deals with $elements['#disabled'] has already been processed (_form_builder_handle_input_element executes() is executed before #after_build handlers are processed, see form_builder() ), so now you need to generate the $element['#attributes']['disabled'] = 'disabled' for the corresponding theme function of the element.
Или по-русски:
Когда вызывается хендлер after_build, код FAPI, обрабатывающий атрибут 'disabled', уже выполнен (вызовы в _form_builder_handle_input_element делаются до обработки #after_build, см. see form_builder() ), поэтому нужно создать $element['#attributes']['disabled'] = 'disabled' для соответствующей функции темизации элемента.
дополню еще от себя
для того чтобы значения disabled полей не обнулялись после сохранениия формы
нужно им проставить первоначальные значения.
Для этого вешаем свой валидатор в самое начало:
<?php
fucntion hook_form_alter(){
$form['#validate'] = array_merge(array('mymodule_form_validate'),$form['#validate']);
} ?>
в фунции перехватываем disabled пустые поля и присваиваем им первоначальные значения
<?php function mymodule_form_validate($form, &$form_state) {
//set values to disabled fields
$arr = $form['taxonomy'][7]['#default_value'];
//поле таксономии
$form_state['values']['taxonomy'][7] = array_combine($arr,$arr);
$form_state['clicked_button']['#post']['taxonomy'][7] = $arr;
//чекбокс простое поле
$form_state['values']['field_links'][0]['value'] = 1;
$form_state['clicked_button']['#post']['field_links']['value']=1;
} ?>
Конечный то код какой
надо прибавить то что отписал fairwind
и мой код.
PS
хотя я без особых проблем прописал атрибут "disabled" в hook_form_alter может можно обойтись и без кода от fairwind