0

I've got an exposed filter with labels and descriptions in my Views. My design requires that the descriptions be displayed as tooltips on hover. In addition, I want this to be the general rule for all my exposed filters in all my views, so the fields that are exposed to visitors is different in each view (probably 10-12 different views with exposed filters). I've got all that working. However, I've run in to a problem with the character limit of the description field for the exposed filter and thus far, I've not been able to find a way around it. So my question is how and where should I override the character length of the description field for an exposed filter in my View?

I've found to possible places where this character limit is set. However, because it's in the core of the Views module I don't want to just change a setting only to have it overwritten the next time Views is updated.

Here are the two places I've found:

/Applications/MAMP/htdocs/d7_chp/sites/all/modules/views/includes/admin.inc:
  313    $form['name'] = array(
  314      '#type' => 'machine_name',
  315:     '#maxlength' => 128,
  316      '#machine_name' => array(
  317        'exists' => 'views_get_view',

and

/Applications/MAMP/htdocs/d7_chp/sites/all/modules/views/plugins/export_ui/views_ui.class.php:
  431      '#type' => 'machine_name',
  432      '#required' => TRUE,
  433:     '#maxlength' => 128,
  434      '#size' => 128,
  435      '#machine_name' => array(

I've looked at a variety of other options as well as adding additional fields to the content type but these are not options. Other than the fact that adding additional fields would be sloppy, the description field in the exposed filter perfectly fits what we need here and we were able to repurpose the tooltip styling and formatting we've created for other content in this piece so we believe that this is the best solution for our scenario and would prefer not to have to rebuild all the tooltip stuff we've already created for this instance.

6
  • 1
    Did you try hook_form_alter on that exposed form field?
    – Kevin
    Apr 26 '18 at 11:36
  • No - can you tell me more about how and where I would implement that?
    – Rob Orr
    Apr 26 '18 at 12:19
  • In a custom module or theme you can use hook_form_alter to modify any forms in Drupal before they are rendered. You will want to check the form id to make sure you are modifying the right form (views exposed forms). Then you could set the form field(s) to '#maxlength' => 255. However in the code you posted, that isn't for your exposed filter field, that is for something else. api.drupal.org/api/drupal/modules%21system%21system.api.php/…
    – Kevin
    Apr 26 '18 at 13:50
  • Ok - that helped, thanks Kevin. I've got it in a custom module, but it looks like I'm running in to problems because the form_id I'm targeting is views_ui_config_item_form and the description field is edit-options-expose-description. I'm running in to an AJAX error when I'm trying to print_r: An AJAX HTTP error occurred. HTTP Result Code: 200 Debugging information follows. Path: /admin/structure/views/ajax/config-item/myview/page/filter/title StatusText: OK ... Any thoughts on how to get around that error so I can see the variables?
    – Rob Orr
    Apr 26 '18 at 14:25
  • Yeah, for that you should probably have a debugger like xdebug so you can see things without doing prints. But why do you need to modify the config form? Isn't this a user facing change?
    – Kevin
    Apr 26 '18 at 15:00
0

After discussing it with Kevin in the comments above, I settled on a custom module to solve our problem. It's very simple and small module that includes the following:

function views_description_strlen_form_alter(&$form, &$form_state, $form_id) {

if ($form_id == 'views_ui_config_item_form') {
    $form['options']['expose']['description']['#maxlength'] = 1000;
    }
}

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.