Drupal hoe een form element uit te schakelen in een cck form middels form alter
On:
donderdag, June 10, 2010 - 16:31
De standaard manier om form elements te veranderen en ze uit te schakelen werkt niet met cck velden.
<?php
function my_module_form_alter(&$form, &$form_state, $form_id) {
$form['my_element']['#disabled'] = true;
}
?>
De FAPI process handler van het CCK veld zal de #disabled attribute niet omzetten naar zijn children elements.
U heeft deze snippet nodig om het te laten werken.
<?php
/**
* implementing hook_form_alter
*/
function my_module_form_alter(&$form, &$form_state, $form_id) {
if ($form_id == 'some_node_form') {
$form['#after_build'][] = '_my_module_after_build';
}
}
/**
* Custom after_build callback handler.
*/
function _my_module_after_build($form, &$form_state) {
// Use this one if the field is placed inside a fieldgroup.
_my_module_fix_disabled($form['some_group']['field_some_field']);
//When using a field
//_my_module_fix_disabled($form['field_some_field'];
return $form;
}
/**
* Recursively set the disabled attribute of a CCK field
* and all its dependent FAPI elements.
*/
function _my_module_fix_disabled(&$elements) {
foreach (element_children($elements) as $key) {
if (isset($elements[$key]) && $elements[$key]) {
// Recurse through all children elements.
_my_module_fix_disabled($elements[$key]);
}
}
if (!isset($elements['#attributes'])) {
$elements['#attributes'] = array();
}
$elements['#attributes']['disabled'] = 'disabled';
}
?>
BEWERK:
Wat nuttige gerelateerde informatie. Legt uit waarom een hook form alter niet werkt http://drupal.org/node/726282 en hoe de FAPI omgaat met cck velden.
Reactie toevoegen