Disable row in Drupal tableselect
How to make a tableselect row unselectable.
When you use the
tableselect element there may be reasons you want to make a row not selectable:
- Missing properties on the element
- Or any other reason to not make a row selectable
I had to do this recently and thought it should be a easy thing to do, since all form elements seems to support the
A tableselect element looks something like this:
$form['table'] = [ '#type' => 'tableselect', '#multiple' => FALSE, '#header' => [ 'name' => 'Name', 'age' => 'Age', ], '#options' => $options, '#empty' => 'No items available', ];
And then each entry (in
$options) would look like:
$options['anders'] = [ // knowing the key is important for disabling. 'name' => [ '#markup' => 'Anders', ], 'age' => [ '#markup' => 30, ], ];
You would think the way to disable a row is to just add
'#disabled' => TRUE; to the option entry, but no, nothing happens.
To actually disable a row you would need to target the same key outside the
#options array. Like this:
$form['table']['anders']['#disabled'] = TRUE; // Added directly to tableselect element.
In my opinion this is quite confusing.