diff --git a/includes/view.inc b/includes/view.inc index 5771ef3..f1ca683 100644 --- a/includes/view.inc +++ b/includes/view.inc @@ -1964,7 +1964,7 @@ function copy() { function clone_view() { $clone = clone $this; - $keys = array('current_display', 'display_handler', 'build_info', 'built', 'executed', 'attachment_before', 'attachment_after', 'field', 'argument', 'filter', 'sort', 'relationship', 'header', 'footer', 'empty', 'query', 'inited', 'style_plugin', 'plugin_name', 'exposed_data', 'exposed_input', 'exposed_widgets', 'many_to_one_tables', 'feed_icon'); + $keys = array('current_display', 'display_handler', 'build_info', 'built', 'executed', 'attachment_before', 'attachment_after', 'field', 'argument', 'filter', 'sort', 'relationship', 'header', 'footer', 'empty', 'query', 'inited', 'style_plugin', 'plugin_name', 'exposed_data', 'exposed_input', 'exposed_widgets', 'many_to_one_tables', 'feed_icon', 'dom_id'); foreach ($keys as $key) { if (isset($clone->{$key})) { unset($clone->{$key}); @@ -2030,7 +2030,7 @@ function destroy() { unset($this->query); } - $keys = array('current_display', 'display_handler', 'build_info', 'built', 'executed', 'attachment_before', 'attachment_after', 'field', 'argument', 'filter', 'sort', 'relationship', 'header', 'footer', 'empty', 'query', 'result', 'inited', 'style_plugin', 'plugin_name', 'exposed_data', 'exposed_input', 'many_to_one_tables'); + $keys = array('current_display', 'display_handler', 'build_info', 'built', 'executed', 'attachment_before', 'attachment_after', 'field', 'argument', 'filter', 'sort', 'relationship', 'header', 'footer', 'empty', 'query', 'result', 'inited', 'style_plugin', 'plugin_name', 'exposed_data', 'exposed_input', 'many_to_one_tables', 'dom_id'); foreach ($keys as $key) { if (isset($this->$key)) { unset($this->$key); diff --git a/js/ajax_view.js b/js/ajax_view.js index aa10a00..962d954 100644 --- a/js/ajax_view.js +++ b/js/ajax_view.js @@ -57,7 +57,7 @@ Drupal.views.ajaxView = function(settings) { this.settings = settings; // Add the ajax to exposed forms. - this.$exposed_form = $('#views-exposed-form-'+ settings.view_name.replace(/_/g, '-') + '-' + settings.view_display_id.replace(/_/g, '-')); + this.$exposed_form = $('#views-exposed-form-'+ settings.view_name.replace(/_/g, '-') + '-' + settings.view_display_id.replace(/_/g, '-') + '-' + settings.view_dom_id); this.$exposed_form.once(jQuery.proxy(this.attachExposedFormAjax, this)); // Store Drupal.ajax objects here for all pager links. diff --git a/views.module b/views.module index d2b582b..5b5181b 100644 --- a/views.module +++ b/views.module @@ -1997,8 +1997,10 @@ function views_exposed_form($form, &$form_state) { // Let form plugins know this is for exposed widgets. $form_state['exposed'] = TRUE; + + $view->dom_id = !empty($view->dom_id) ? $view->dom_id : md5($view->name . REQUEST_TIME . rand()); // Check if the form was already created - if ($cache = views_exposed_form_cache($view->name, $view->current_display)) { + if ($cache = views_exposed_form_cache($view->name, $view->current_display . '-' . $view->dom_id)) { return $cache; } @@ -2043,7 +2045,7 @@ function views_exposed_form($form, &$form_state) { $form['#action'] = url($view->display_handler->get_url()); $form['#theme'] = views_theme_functions('views_exposed_form', $view, $display); - $form['#id'] = drupal_clean_css_identifier('views_exposed_form-' . check_plain($view->name) . '-' . check_plain($display->id)); + $form['#id'] = drupal_clean_css_identifier('views_exposed_form-' . check_plain($view->name) . '-' . check_plain($display->id) . '-' . check_plain($view->dom_id)); // $form['#attributes']['class'] = array('views-exposed-form'); // If using AJAX, we need the form plugin. @@ -2056,7 +2058,7 @@ function views_exposed_form($form, &$form_state) { $exposed_form_plugin->exposed_form_alter($form, $form_state); // Save the form - views_exposed_form_cache($view->name, $view->current_display, $form); + views_exposed_form_cache($view->name, $view->current_display . '-' . $view->dom_id, $form); return $form; }