Download & Extend

Sort Criteria Random causes duplicates

Project:Views
Version:6.x-3.x-dev
Component:Views Data
Category:bug report
Priority:normal
Assigned:Unassigned
Status:closed (fixed)

Issue Summary

Hi all,
I'm trying to create a frontpage on my site so that each individual user sees a personalized homepage based on user role. Because I'm using attachments, I want to randomize the nodes before I sort them. When I remove the 'Sort criteria: Random' the view functions perfectly, except for they are not in the order that I want them in. However, when I 'Sort criteria: Random' is turned on, I get duplicate nodes. This view does use arguments, and the number of duplicates equal the number of times that node would be loaded because of the argument. (If the user is assigned multiple roles, and the page is promoted to the frontpage for those multiple roles, I get duplicate views.)

Quick note, when I try to turn Distinct on, all nodes disappear.

This is the view:

<?php

$view
= new view;
$view->name = 'home_page_new';
$view->description = 'Displays node content selected for particular home pages';
$view->tag = '';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = 2;
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->override_option('relationships', array(
 
'field_homepage_role_rid' => array(
   
'label' => 'Home Page for',
   
'required' => 1,
   
'delta' => '-1',
   
'id' => 'field_homepage_role_rid',
   
'table' => 'node_data_field_homepage_role',
   
'field' => 'field_homepage_role_rid',
   
'override' => array(
     
'button' => 'Override',
    ),
   
'relationship' => 'none',
  ),
));
$handler->override_option('sorts', array(
 
'weight' => array(
   
'order' => 'ASC',
   
'id' => 'weight',
   
'table' => 'node_weight',
   
'field' => 'weight',
   
'relationship' => 'none',
   
'override' => array(
     
'button' => 'Override',
    ),
  ),
 
'type' => array(
   
'order' => 'DESC',
   
'id' => 'type',
   
'table' => 'node',
   
'field' => 'type',
   
'relationship' => 'none',
  ),
));
$handler->override_option('arguments', array(
 
'rid' => array(
   
'default_action' => 'ignore',
   
'style_plugin' => 'default_summary',
   
'style_options' => array(),
   
'wildcard' => 'all',
   
'wildcard_substitution' => 'All',
   
'title' => '',
   
'default_argument_type' => 'fixed',
   
'default_argument' => '',
   
'validate_type' => 'none',
   
'validate_fail' => 'not found',
   
'break_phrase' => 0,
   
'add_table' => 0,
   
'require_value' => 0,
   
'reduce_duplicates' => 1,
   
'id' => 'rid',
   
'table' => 'users_roles',
   
'field' => 'rid',
   
'validate_user_argument_type' => 'uid',
   
'validate_user_roles' => array(
     
'2' => 0,
     
'16' => 0,
     
'11' => 0,
     
'10' => 0,
     
'12' => 0,
     
'14' => 0,
     
'13' => 0,
     
'15' => 0,
    ),
   
'override' => array(
     
'button' => 'Override',
    ),
   
'relationship' => 'none',
   
'default_options_div_prefix' => '',
   
'default_argument_user' => 0,
   
'default_argument_fixed' => '',
   
'default_argument_php' => '',
   
'validate_argument_node_type' => array(
     
'poll' => 0,
     
'faq' => 0,
     
'book' => 0,
     
'contact' => 0,
     
'event' => 0,
     
'gearlist' => 0,
     
'guest' => 0,
     
'health' => 0,
     
'page' => 0,
     
'patrol' => 0,
     
'position' => 0,
     
'profile' => 0,
     
'project' => 0,
     
'story' => 0,
     
'task' => 0,
     
'wiki' => 0,
    ),
   
'validate_argument_node_access' => 0,
   
'validate_argument_nid_type' => 'nid',
   
'validate_argument_vocabulary' => array(
     
'4' => 0,
     
'5' => 0,
     
'6' => 0,
     
'7' => 0,
     
'8' => 0,
     
'14' => 0,
     
'15' => 0,
     
'16' => 0,
    ),
   
'validate_argument_type' => 'tid',
   
'validate_argument_transform' => 0,
   
'validate_user_restrict_roles' => 0,
   
'validate_argument_signup_status' => 'any',
   
'validate_argument_signup_node_access' => 0,
   
'validate_argument_php' => '',
  ),
));
$handler->override_option('filters', array(
 
'status' => array(
   
'operator' => '=',
   
'value' => '1',
   
'group' => '0',
   
'exposed' => FALSE,
   
'expose' => array(
     
'operator' => FALSE,
     
'label' => '',
    ),
   
'id' => 'status',
   
'table' => 'node',
   
'field' => 'status',
   
'relationship' => 'none',
  ),
 
'type' => array(
   
'operator' => 'not in',
   
'value' => array(
     
'poll' => 'poll',
    ),
   
'group' => '0',
   
'exposed' => FALSE,
   
'expose' => array(
     
'operator' => FALSE,
     
'label' => '',
    ),
   
'id' => 'type',
   
'table' => 'node',
   
'field' => 'type',
   
'relationship' => 'none',
  ),
));
$handler->override_option('access', array(
 
'type' => 'none',
));
$handler->override_option('distinct', 0);
$handler->override_option('row_plugin', 'node');
$handler->override_option('row_options', array(
 
'relationship' => 'none',
 
'build_mode' => 'teaser',
 
'links' => 0,
 
'comments' => 0,
));
$handler = $view->new_display('attachment', 'Upcoming Events', 'attachment_1');
$handler->override_option('relationships', array());
$handler->override_option('sorts', array(
 
'field_event_date_time_value' => array(
   
'order' => 'ASC',
   
'delta' => -1,
   
'id' => 'field_event_date_time_value',
   
'table' => 'node_data_field_event_date_time',
   
'field' => 'field_event_date_time_value',
   
'override' => array(
     
'button' => 'Use default',
    ),
   
'relationship' => 'none',
  ),
));
$handler->override_option('arguments', array());
$handler->override_option('filters', array(
 
'status' => array(
   
'operator' => '=',
   
'value' => '1',
   
'group' => '0',
   
'exposed' => FALSE,
   
'expose' => array(
     
'operator' => FALSE,
     
'label' => '',
    ),
   
'id' => 'status',
   
'table' => 'node',
   
'field' => 'status',
   
'relationship' => 'none',
  ),
 
'type' => array(
   
'operator' => 'in',
   
'value' => array(
     
'event' => 'event',
    ),
   
'group' => '0',
   
'exposed' => FALSE,
   
'expose' => array(
     
'operator' => FALSE,
     
'label' => '',
    ),
   
'id' => 'type',
   
'table' => 'node',
   
'field' => 'type',
   
'relationship' => 'none',
   
'override' => array(
     
'button' => 'Use default',
    ),
  ),
 
'date_filter' => array(
   
'operator' => 'between',
   
'value' => array(
     
'value' => NULL,
     
'min' => NULL,
     
'max' => NULL,
     
'default_date' => 'now',
     
'default_to_date' => 'now +21 day',
    ),
   
'group' => '0',
   
'exposed' => FALSE,
   
'expose' => array(
     
'operator' => FALSE,
     
'label' => '',
    ),
   
'date_fields' => array(
     
'node_data_field_event_date_time.field_event_date_time_value' => 'node_data_field_event_date_time.field_event_date_time_value',
    ),
   
'date_method' => 'OR',
   
'granularity' => 'day',
   
'form_type' => 'date_select',
   
'default_date' => 'now',
   
'default_to_date' => 'now +21 day',
   
'year_range' => '-1:+1',
   
'id' => 'date_filter',
   
'table' => 'node',
   
'field' => 'date_filter',
   
'override' => array(
     
'button' => 'Use default',
    ),
   
'relationship' => 'none',
  ),
 
'rid' => array(
   
'operator' => 'or',
   
'value' => array(
     
'10' => '10',
     
'12' => '12',
     
'14' => '14',
     
'13' => '13',
     
'15' => '15',
    ),
   
'group' => '0',
   
'exposed' => FALSE,
   
'expose' => array(
     
'operator' => FALSE,
     
'label' => '',
    ),
   
'id' => 'rid',
   
'table' => 'users_roles',
   
'field' => 'rid',
   
'override' => array(
     
'button' => 'Use default',
    ),
   
'relationship' => 'none',
   
'reduce_duplicates' => 0,
  ),
 
'field_homepage_role_rid' => array(
   
'operator' => 'not',
   
'value' => array(
     
'16' => '16',
     
'11' => '11',
     
'1' => '1',
     
'2' => '2',
     
'10' => '10',
     
'12' => '12',
     
'14' => '14',
     
'13' => '13',
     
'15' => '15',
    ),
   
'group' => '0',
   
'exposed' => FALSE,
   
'expose' => array(
     
'operator' => FALSE,
     
'label' => '',
    ),
   
'id' => 'field_homepage_role_rid',
   
'table' => 'node_data_field_homepage_role',
   
'field' => 'field_homepage_role_rid',
   
'override' => array(
     
'button' => 'Use default',
    ),
   
'relationship' => 'none',
   
'reduce_duplicates' => 1,
  ),
));
$handler->override_option('items_per_page', 3);
$handler->override_option('attachment_position', 'after');
$handler->override_option('inherit_arguments', 0);
$handler->override_option('inherit_exposed_filters', FALSE);
$handler->override_option('displays', array(
 
'default' => 'default',
 
'page_5' => 'page_5',
));
$handler = $view->new_display('page', 'Home', 'page_5');
$handler->override_option('path', 'home');
$handler->override_option('menu', array(
 
'type' => 'none',
 
'title' => '',
 
'description' => '',
 
'weight' => 0,
 
'name' => 'navigation',
));
$handler->override_option('tab_options', array(
 
'type' => 'none',
 
'title' => '',
 
'description' => '',
 
'weight' => 0,
));
?>

And here this query:

SELECT node.nid AS nid,
   node_weight.sticky AS node_weight_sticky,
   node.type AS node_type,
   RAND() AS _random
FROM node node
LEFT JOIN content_field_homepage_role node_data_field_homepage_role ON node.vid = node_data_field_homepage_role.vid
INNER JOIN role role_node_data_field_homepage_role ON node_data_field_homepage_role.field_homepage_role_rid = role_node_data_field_homepage_role.rid
LEFT JOIN node node_weight ON node.nid = node_weight.nid
WHERE (node.status <> 0) AND (node.type not in ('poll'))
   ORDER BY node_weight_sticky DESC, node_type DESC, _random ASC

Comments

#1

Oops, sorry. I forgot to adjust one thing before I copied the sql query. It should be the following. (Exact same as above except for the order in the last line is different.

SELECT node.nid AS nid,
   RAND() AS _random,
   node_weight.sticky AS node_weight_sticky,
   node.type AS node_type
FROM node node
LEFT JOIN content_field_homepage_role node_data_field_homepage_role ON node.vid = node_data_field_homepage_role.vid
INNER JOIN role role_node_data_field_homepage_role ON node_data_field_homepage_role.field_homepage_role_rid = role_node_data_field_homepage_role.rid
LEFT JOIN node node_weight ON node.nid = node_weight.nid
WHERE (node.status <> 0) AND (node.type not in ('poll'))
   ORDER BY _random ASC, node_weight_sticky DESC, node_type DESC

#2

I'm pretty sure this is related too, if not a duplicate of, #384684: Duplicate records when selecting Random Sort Criteria. However, this occurs for a different version, and so I can't use the workaround listed there.

#3

Status:active» postponed (maintainer needs more info)

Is this still the case with a views 2.11 and a current version of drupal core?

#4

Status:postponed (maintainer needs more info)» closed (fixed)

No updates for more than 30 days.

#5

Version:6.x-2.5» 6.x-3.x-dev
Status:closed (fixed)» active

I'm getting this same behavior with the latest 3.x dev. Other sort criteria -> no duplicates. Random sort criteria -> duplicates emerge. Turning distinct results on does remove the duplicates, but they shouldn't be there to begin with, as far as I can tell.

Here's my view:

$view = new view;
$view->name = 'similarterms';
$view->description = 'Similar By Terms';
$view->tag = 'similarterms';
$view->view_php = '';
$view->base_table = 'node';
$view->is_cacheable = FALSE;
$view->api_version = '3.0-alpha1';
$view->disabled = FALSE; /* Edit this to true to make a default view disabled initially */

/* Display: Defaults */
$handler = $view->new_display('default', 'Defaults', 'default');
$handler->display->display_options['title'] = 'Similar By Terms';
$handler->display->display_options['access']['type'] = 'none';
$handler->display->display_options['cache']['type'] = 'none';
$handler->display->display_options['query']['type'] = 'views_query';
$handler->display->display_options['exposed_form']['type'] = 'basic';
$handler->display->display_options['pager']['type'] = 'some';
$handler->display->display_options['pager']['options']['items_per_page'] = '10';
$handler->display->display_options['pager']['options']['offset'] = '0';
$handler->display->display_options['style_plugin'] = 'grid';
$handler->display->display_options['style_options']['columns'] = '2';
$handler->display->display_options['style_options']['fill_single_line'] = 1;
$handler->display->display_options['row_plugin'] = 'fields';
/* Field: Content: Cover Image (field_image_upload) */
$handler->display->display_options['fields']['field_image_upload_fid']['id'] = 'field_image_upload_fid';
$handler->display->display_options['fields']['field_image_upload_fid']['table'] = 'node_data_field_image_upload';
$handler->display->display_options['fields']['field_image_upload_fid']['field'] = 'field_image_upload_fid';
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['trim'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['html'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['hide_empty'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['empty_zero'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['link_to_node'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['label_type'] = 'none';
$handler->display->display_options['fields']['field_image_upload_fid']['format'] = 'thumbnail_80_linked';
/* Field: Similar By Terms: Similarity */
$handler->display->display_options['fields']['similarterms']['id'] = 'similarterms';
$handler->display->display_options['fields']['similarterms']['table'] = 'similarterms';
$handler->display->display_options['fields']['similarterms']['field'] = 'similarterms';
$handler->display->display_options['fields']['similarterms']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['trim'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['similarterms']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['similarterms']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['html'] = 0;
$handler->display->display_options['fields']['similarterms']['hide_empty'] = 0;
$handler->display->display_options['fields']['similarterms']['empty_zero'] = 0;
$handler->display->display_options['fields']['similarterms']['count_type'] = '1';
/* Sort criterion: Global: Random */
$handler->display->display_options['sorts']['random']['id'] = 'random';
$handler->display->display_options['sorts']['random']['table'] = 'views';
$handler->display->display_options['sorts']['random']['field'] = 'random';
/* Argument: Similar By Terms: Nid */
$handler->display->display_options['arguments']['nid']['id'] = 'nid';
$handler->display->display_options['arguments']['nid']['table'] = 'similarterms';
$handler->display->display_options['arguments']['nid']['field'] = 'nid';
$handler->display->display_options['arguments']['nid']['default_action'] = 'default';
$handler->display->display_options['arguments']['nid']['style_plugin'] = 'default_summary';
$handler->display->display_options['arguments']['nid']['default_argument_type'] = 'node';
$handler->display->display_options['arguments']['nid']['validate_type'] = 'node';
$handler->display->display_options['arguments']['nid']['validate_options']['access'] = 0;
$handler->display->display_options['arguments']['nid']['break_phrase'] = 0;
$handler->display->display_options['arguments']['nid']['not'] = 0;
$handler->display->display_options['arguments']['nid']['vocabularies'] = array(
  '1' => 1,
  '2' => 2,
  '5' => 0,
  '7' => 0,
);
$handler->display->display_options['arguments']['nid']['include_args'] = 0;
/* Filter: Node: In moderation */
$handler->display->display_options['filters']['moderate']['id'] = 'moderate';
$handler->display->display_options['filters']['moderate']['table'] = 'node';
$handler->display->display_options['filters']['moderate']['field'] = 'moderate';
$handler->display->display_options['filters']['moderate']['value'] = '0';
$handler->display->display_options['filters']['moderate']['expose']['operator'] = FALSE;
/* Filter: Node: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = '1';
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;

/* Display: Similar Assets Block */
$handler = $view->new_display('block', 'Similar Assets Block', 'similar_assets_block');
$handler->display->display_options['defaults']['title'] = FALSE;
$handler->display->display_options['title'] = 'Similar Assets';
$handler->display->display_options['defaults']['filters'] = FALSE;
/* Filter: Node: In moderation */
$handler->display->display_options['filters']['moderate']['id'] = 'moderate';
$handler->display->display_options['filters']['moderate']['table'] = 'node';
$handler->display->display_options['filters']['moderate']['field'] = 'moderate';
$handler->display->display_options['filters']['moderate']['value'] = '0';
$handler->display->display_options['filters']['moderate']['expose']['operator'] = FALSE;
/* Filter: Node: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = '1';
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter: Node: Type */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
  'asset' => 'asset',
);
$handler->display->display_options['block_caching'] = '4';

/* Display: Similar Templates */
$handler = $view->new_display('block', 'Similar Templates', 'similar_templates');
$handler->display->display_options['defaults']['filters'] = FALSE;
/* Filter: Node: In moderation */
$handler->display->display_options['filters']['moderate']['id'] = 'moderate';
$handler->display->display_options['filters']['moderate']['table'] = 'node';
$handler->display->display_options['filters']['moderate']['field'] = 'moderate';
$handler->display->display_options['filters']['moderate']['value'] = '0';
$handler->display->display_options['filters']['moderate']['expose']['operator'] = FALSE;
/* Filter: Node: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = '1';
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter: Node: Type */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
  'template' => 'template',
);

/* Display: Similar Assets Page */
$handler = $view->new_display('page', 'Similar Assets Page', 'similar_assets_page');
$handler->display->display_options['defaults']['title'] = FALSE;
$handler->display->display_options['title'] = 'Similar Assets Page';
$handler->display->display_options['defaults']['pager'] = FALSE;
$handler->display->display_options['pager']['type'] = 'full';
$handler->display->display_options['pager']['options']['items_per_page'] = '50';
$handler->display->display_options['pager']['options']['offset'] = '0';
$handler->display->display_options['pager']['options']['id'] = '0';
$handler->display->display_options['defaults']['style_plugin'] = FALSE;
$handler->display->display_options['style_plugin'] = 'grid';
$handler->display->display_options['style_options']['columns'] = '5';
$handler->display->display_options['style_options']['fill_single_line'] = 1;
$handler->display->display_options['defaults']['style_options'] = FALSE;
$handler->display->display_options['defaults']['row_plugin'] = FALSE;
$handler->display->display_options['row_plugin'] = 'fields';
$handler->display->display_options['defaults']['row_options'] = FALSE;
$handler->display->display_options['defaults']['fields'] = FALSE;
/* Field: Content: Cover Image (field_image_upload) */
$handler->display->display_options['fields']['field_image_upload_fid']['id'] = 'field_image_upload_fid';
$handler->display->display_options['fields']['field_image_upload_fid']['table'] = 'node_data_field_image_upload';
$handler->display->display_options['fields']['field_image_upload_fid']['field'] = 'field_image_upload_fid';
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['trim'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['alter']['html'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['hide_empty'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['empty_zero'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['link_to_node'] = 0;
$handler->display->display_options['fields']['field_image_upload_fid']['label_type'] = 'none';
$handler->display->display_options['fields']['field_image_upload_fid']['format'] = 'thumbnail_100_linked';
/* Field: Similar By Terms: Similarity */
$handler->display->display_options['fields']['similarterms']['id'] = 'similarterms';
$handler->display->display_options['fields']['similarterms']['table'] = 'similarterms';
$handler->display->display_options['fields']['similarterms']['field'] = 'similarterms';
$handler->display->display_options['fields']['similarterms']['alter']['alter_text'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['make_link'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['absolute'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['trim'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['word_boundary'] = 1;
$handler->display->display_options['fields']['similarterms']['alter']['ellipsis'] = 1;
$handler->display->display_options['fields']['similarterms']['alter']['strip_tags'] = 0;
$handler->display->display_options['fields']['similarterms']['alter']['html'] = 0;
$handler->display->display_options['fields']['similarterms']['hide_empty'] = 0;
$handler->display->display_options['fields']['similarterms']['empty_zero'] = 0;
$handler->display->display_options['fields']['similarterms']['count_type'] = '1';
$handler->display->display_options['defaults']['arguments'] = FALSE;
/* Argument: Similar By Terms: Nid */
$handler->display->display_options['arguments']['nid']['id'] = 'nid';
$handler->display->display_options['arguments']['nid']['table'] = 'similarterms';
$handler->display->display_options['arguments']['nid']['field'] = 'nid';
$handler->display->display_options['arguments']['nid']['style_plugin'] = 'default_summary';
$handler->display->display_options['arguments']['nid']['title'] = 'Similar Assets';
$handler->display->display_options['arguments']['nid']['default_argument_type'] = 'node';
$handler->display->display_options['arguments']['nid']['validate_type'] = 'node';
$handler->display->display_options['arguments']['nid']['validate_options']['access'] = 0;
$handler->display->display_options['arguments']['nid']['validate_fail'] = 'ignore';
$handler->display->display_options['arguments']['nid']['break_phrase'] = 0;
$handler->display->display_options['arguments']['nid']['not'] = 0;
$handler->display->display_options['arguments']['nid']['vocabularies'] = array(
  '1' => 1,
  '2' => 2,
  '5' => 0,
  '7' => 0,
);
$handler->display->display_options['arguments']['nid']['include_args'] = 0;
$handler->display->display_options['path'] = 'node/%/similar-assets';

/* Display: Similar Templates Block */
$handler = $view->new_display('block', 'Similar Templates Block', 'similar_templates_block');
$handler->display->display_options['defaults']['title'] = FALSE;
$handler->display->display_options['title'] = 'Similar Templates';
$handler->display->display_options['defaults']['filters'] = FALSE;
/* Filter: Node: In moderation */
$handler->display->display_options['filters']['moderate']['id'] = 'moderate';
$handler->display->display_options['filters']['moderate']['table'] = 'node';
$handler->display->display_options['filters']['moderate']['field'] = 'moderate';
$handler->display->display_options['filters']['moderate']['value'] = '0';
$handler->display->display_options['filters']['moderate']['expose']['operator'] = FALSE;
/* Filter: Node: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = '1';
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter: Node: Type */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
  'template' => 'template',
);
$handler->display->display_options['block_caching'] = '4';

/* Display: Similar Pages Block */
$handler = $view->new_display('block', 'Similar Pages Block', 'similar_pages_block');
$handler->display->display_options['defaults']['title'] = FALSE;
$handler->display->display_options['title'] = 'Similar Pages';
$handler->display->display_options['defaults']['filters'] = FALSE;
/* Filter: Node: In moderation */
$handler->display->display_options['filters']['moderate']['id'] = 'moderate';
$handler->display->display_options['filters']['moderate']['table'] = 'node';
$handler->display->display_options['filters']['moderate']['field'] = 'moderate';
$handler->display->display_options['filters']['moderate']['value'] = '0';
$handler->display->display_options['filters']['moderate']['expose']['operator'] = FALSE;
/* Filter: Node: Published */
$handler->display->display_options['filters']['status']['id'] = 'status';
$handler->display->display_options['filters']['status']['table'] = 'node';
$handler->display->display_options['filters']['status']['field'] = 'status';
$handler->display->display_options['filters']['status']['value'] = '1';
$handler->display->display_options['filters']['status']['expose']['operator'] = FALSE;
/* Filter: Node: Type */
$handler->display->display_options['filters']['type']['id'] = 'type';
$handler->display->display_options['filters']['type']['table'] = 'node';
$handler->display->display_options['filters']['type']['field'] = 'type';
$handler->display->display_options['filters']['type']['value'] = array(
  'scrapbook_page' => 'scrapbook_page',
);
$handler->display->display_options['block_caching'] = '4';

#6

http://drupal.org/node/384684#comment-3796282

the problem is in views_handler_sort_random.inc, changing it to

<?php
/**
* Handle a random sort.
*/
class views_handler_sort_random extends views_handler_sort {
  function
query() {
   
// the idea is to add integer argument to MySQL RAND() function, which will remain
    // among all the pages for the same view, going back to the first page (no $_REQUEST['page'])
    // will initialize and randomize entire view
   
if (!$_SESSION['views_random_sort_int'] || !$_REQUEST['page']) {
     
$_SESSION['views_random_sort_int'] = rand(1, 1001);
    }
       
    global
$db_type;
    switch (
$db_type) {
      case
'mysql':
      case
'mysqli':
       
$formula = 'RAND('. $_SESSION['views_random_sort_int'] . ')';
        break;
      case
'pgsql':
       
$formula = 'RANDOM()';
        break;
    }
    if (!empty(
$formula)) {
     
$this->query->add_orderby(NULL, NULL, '', $formula);
    }
  }

  function
options_form(&$form, &$form_state) {
   
parent::options_form($form, $form_state);
   
$form['order']['#access'] = FALSE;
  }
}
?>

will fix the problem

#7

    if (!$_SESSION['views_random_sort_int'] || !$_REQUEST['page']) {

This might cause some notices.

In general: It would be cool if you create a patch!

#8

Here is a patch, also what do ypu mean by "This might cause some notices"? I need to pass the same argument between all the pages of the same view (with and without ajax), so I used $_SESSION, of you have another idea or improvement, please advise. Thanks

AttachmentSize
views_handler_sort_random_patch.patch 1.09 KB

#9

Status:active» needs review

So

#10

Status:needs review» needs work

Can you make this behavior configurable?

So add a option via option_definition and create a form via options_form.
It's important that noone get's unexpected changeds

#11

Status:needs work» fixed

Someone already wrote a module for it, see http://drupal.org/project/views_random_seed
Please use this module. Thanks

#12

thanks for pointing to this module, I almost contributed very similar module. Is it normal behavior for random sort criteria to have duplicates on paged view queries? I am asking, because I posted my patch also to views.module development area. Thanks again for your replies. That was my first post to drupal.org :)

#13

Status:fixed» closed (fixed)

Automatically closed -- issue fixed for 2 weeks with no activity.

nobody click here