Search code examples
drupaldrupal-7drupal-forms

Drupal 7 - Hide 'remove' button on file field


I have a content type with an image field. Users can create the content and upload an image. I'd like to not allow users to change/remove the image once it was uploaded, but still show the image on the node edit form. So I only need to disable/remove the 'remove' button from the image field. I tried the following (via hook_form_alter), but it didn't work:

$form['field_image']['#disabled'] = TRUE;

The below works, but it hides the image element completely, which is not what I'm after:

$form['field_image']['#access'] = FALSE;

Please help to find a workaround.


Solution

  • You have to use the hook_field_widget_form_alter function and inside there look for the variable details using dpm() and then alter the button using an attribute from the Forms API.

    But I would suggest to make the widget field read only on the edit form and not remove the delete button.

    // Hide remove button from an image field
    function MYMODULE_field_widget_form_alter(&$element, &$form_state, $context) {
      // If this is an image field type
      if ($context['field']['field_name'] == 'MY_FIELD_NAME') {
        // Loop through the element children (there will always be at least one).
        foreach (element_children($element) as $key => $child) {
          // Add the new process function to the element
          $element[$key]['#process'][] = 'MYMODULE_image_field_widget_process';
        }
      }
    }
    
    function MYMODULE_image_field_widget_process($element, &$form_state, $form) {
      //dpm($element);
      // Hide the remove button
      $element['remove_button']['#type'] = 'hidden';
    
      // Return the altered element
      return $element;
    }
    

    Useful issues: