diff --git a/includes/view.inc b/includes/view.inc index fabe3af..c02422c 100644 --- a/includes/view.inc +++ b/includes/view.inc @@ -2005,7 +2005,7 @@ class view extends views_db_object { public 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}); @@ -2070,7 +2070,7 @@ class view extends views_db_object { 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 51fb806..518d681 100644 --- a/js/ajax_view.js +++ b/js/ajax_view.js @@ -61,7 +61,7 @@ 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 302aa03..5e414f9 100644 --- a/views.module +++ b/views.module @@ -2060,8 +2060,9 @@ 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; } @@ -2107,7 +2108,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)); // If using AJAX, we need the form plugin. if ($view->use_ajax) { @@ -2119,7 +2120,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; }