diff --git a/includes/views/nodequeue.views.inc b/includes/views/nodequeue.views.inc index 14d9043976442d98915d1db247754bacd39f74c7..0b32f6bbfc0491581a633f7bffc5c3d660de3b72 100644 --- a/includes/views/nodequeue.views.inc +++ b/includes/views/nodequeue.views.inc @@ -47,6 +47,27 @@ function nodequeue_views_data() { ), ); + // Nodequeue position and other. + $data['nodequeue_nodes']['position_and_other'] = array( + 'title' => t('Position in nodequeue and other parameter'), + 'help' => t("Allows combining the nodequeue position with another (random) + parameter (created date for example). This handler is useful only if the + nodequeue relationship is NOT required."), + 'field' => array( + 'handler' => 'views_handler_field_numeric', + 'click sortable' => TRUE, + ), + 'sort' => array( + 'handler' => 'nodequeue_handler_sort_by_position_and_other', + ), + 'filter' => array( + 'handler' => 'views_handler_filter_numeric', + ), + 'argument' => array( + 'handler' => 'views_handler_argument_numeric', + ), + ); + // timestamp $data['nodequeue_nodes']['timestamp'] = array( 'title' => t('Added date'), diff --git a/includes/views/nodequeue_handler_sort_by_position_and_other.inc b/includes/views/nodequeue_handler_sort_by_position_and_other.inc new file mode 100644 index 0000000000000000000000000000000000000000..68ad6aaaaf0f945808a140657abdd1b3ae917404 --- /dev/null +++ b/includes/views/nodequeue_handler_sort_by_position_and_other.inc @@ -0,0 +1,33 @@ +ensure_my_table(); + + $field = 'position'; + $as = $table . '_' . $field; + + if ($field) { + $this->query->add_field($table, $field, $as); + } + + // If we sort ASC items with NULL should be last, so set 99999999, + // if DESC set 0. + $order = strtoupper($this->options['order']); + $stub = ($order == 'DESC') ? '0' : '999999999'; + + $this->query->orderby[] = array('field' => "IFNULL($as, $stub) ", 'direction' => $order); + } +} diff --git a/nodequeue.info b/nodequeue.info index 16da04c2d0ffad9cc3c770c704eaee4f5ee286a0..c2599ceae2807c14460e23c3f99242d72c887ee6 100644 --- a/nodequeue.info +++ b/nodequeue.info @@ -16,3 +16,4 @@ files[] = includes/views/nodequeue_handler_field_links.inc files[] = includes/views/nodequeue_handler_field_queue_tab.inc files[] = includes/views/nodequeue_handler_filter_in_queue.inc files[] = includes/views/nodequeue_handler_relationship_nodequeue.inc +files[] = includes/views/nodequeue_handler_sort_by_position_and_other.inc