Index: includes/jcarousel.views.inc =================================================================== RCS file: /cvs/drupal-contrib/contributions/modules/jcarousel/includes/Attic/jcarousel.views.inc,v retrieving revision 1.1.2.5 diff -u -r1.1.2.5 jcarousel.views.inc --- includes/jcarousel.views.inc 20 Dec 2010 17:56:28 -0000 1.1.2.5 +++ includes/jcarousel.views.inc 6 Feb 2011 04:07:58 -0000 @@ -69,10 +69,9 @@ $view->set_items_per_page($last - $first); $view->set_offset($first); - // TODO: $view->pager doesn't even exist in Views 3, yet it seems to - // fix the Views 3 handling. Find the "official" approach here. - $view->pager['offset'] = $first; - $view->pager['items_per_page'] = $last - $first; + // Redundant but apparently needed. + $view->items_per_page = $last - $first; + $view->offset = $first; } // Reuse the same DOM id so it matches that in Drupal.settings. @@ -115,14 +114,7 @@ } // Get the total number of items in this view. - $count_query = $view->build_info['count_query']; - $replacements = module_invoke_all('views_query_substitutions', $view); - $count_query = str_replace(array_keys($replacements), $replacements, $count_query); - $result = db_query($count_query, $view->build_info['query_args']); - $count = 0; - while ($row = db_fetch_array($result)) { - $count++; - } + $count = count($view->result); // If there is just one item disable the auto-scroll and rotation. if ($count == 1) { @@ -134,27 +126,46 @@ if ($view->use_ajax) { $options['ajax'] = TRUE; - $use_pager = $view->pager['use_pager']; - $view->pager['use_pager'] = TRUE; - $view->build($display_id); - - $options['size'] = $count; - $view->pager['use_pager'] = $use_pager; + // Views 2: + if (isset($view->pager)) { + // Enable and adjust the pager to get the correct page. + $use_pager = $view->pager['use_pager']; + $view->pager['use_pager'] = TRUE; + $view->build($display_id); + $options['size'] = $count; + $view->pager['use_pager'] = $use_pager; + + // Create generic variable names. + $pager_current_page = $view->pager['current_page']; + $pager_items_per_page = $view->pager['items_per_page']; + $pager_offset = $view->pager['offset']; + } + // Views 3: + else { + // Adjusting the query is not necessary. + $view->build($display_id); + $options['size'] = $count; + + // Create generic variable names. + $pager_current_page = $view->current_page; + $pager_items_per_page = $view->items_per_page; + $pager_offset = $view->offset; + } // If starting in the middle of a view, initialize the carousel at that // position. Strangely the carousel must pre-load empty LI items all the way // up until the active item, making this inefficient for large lists. - if ($view->pager['use_pager'] && $view->pager['current_page']) { + if ($pager_current_page) { // TODO: Pagers and carousels do not work well together. jCarousel should // give items the class "jcarousel-item-[offset]", but instead it always // starts with "1", making it impossible to define a prepopulated list // as the middle of an AJAX view. - $options['start'] = ($view->pager['current_page'] * $view->pager['items_per_page']) + ($view->pager['offset'] + 1); - $options['offset'] = ($view->pager['current_page'] * $view->pager['items_per_page']) + ($view->pager['offset'] + 1); + $options['start'] = ($pager_current_page * $pager_items_per_page) + ($pager_offset + 1); + $options['offset'] = ($pager_current_page * $pager_items_per_page) + ($pager_offset + 1); } - elseif ($view->pager['offset']) { - $options['start'] = $view->pager['offset'] + 1; - $options['offset'] = $view->pager['offset'] + 1; + elseif ($pager_offset) { + $options['start'] = $pager_offset + 1; + $options['offset'] = $pager_offset + 1; } } @@ -180,9 +191,12 @@ } $variables['jcarousel_classes'] = implode(' ', $variables['jcarousel_classes_array']); + // Views 2/3 compatibility. + $pager_offset = isset($view->pager['offset']) ? $view->pager['offset'] : $view->offset; + // Give each item a class to identify where in the carousel it belongs. foreach ($variables['rows'] as $id => $row) { - $variables['classes'][$id] = 'jcarousel-item-' . ($id + 1 + $view->pager['offset']); + $variables['classes'][$id] = 'jcarousel-item-' . ($id + 1 + $pager_offset); } }