diff --git a/includes/views/nodequeue.views.inc b/includes/views/nodequeue.views.inc index a7ea7cb..a3a7364 100644 --- a/includes/views/nodequeue.views.inc +++ b/includes/views/nodequeue.views.inc @@ -46,6 +46,16 @@ function nodequeue_views_data() { 'handler' => 'views_handler_argument_numeric', ), ); + // Nodequeue position before null. + $data['nodequeue_nodes']['nodequeue_position'] = array( + 'title' => t('Sort nodes by position in nodequeue and by some other parameter'), + 'help' => t("Allows you to sort the nodes by position in nodequeue and by other + parameter (created date for example). Use this handler when you will add + not required relationship to nodequeue."), + 'sort' => array( + 'handler' => 'nodequeue_handler_sort_by_position_and_some_other', + ), + ); // timestamp $data['nodequeue_nodes']['timestamp'] = array( diff --git a/includes/views/nodequeue_handler_sort_by_position_and_some_other.inc b/includes/views/nodequeue_handler_sort_by_position_and_some_other.inc new file mode 100644 index 0000000..a7b4554 --- /dev/null +++ b/includes/views/nodequeue_handler_sort_by_position_and_some_other.inc @@ -0,0 +1,30 @@ +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 16da04c..d4017a8 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_some_other.inc