diff --git a/includes/views/nodequeue.views.inc b/includes/views/nodequeue.views.inc index a7ea7cb..faffee6 100644 --- a/includes/views/nodequeue.views.inc +++ b/includes/views/nodequeue.views.inc @@ -47,6 +47,16 @@ function nodequeue_views_data() { ), ); + // Nodequeue position before null. + $data['nodequeue_nodes']['nodequeue_position'] = array( + 'title' => t('Sort nodes by position before null'), + 'help' => t("Allows you to sort the nodes in according to the position in the nodequeue, + by raising their higher than the node which position is null. It's good for sort nodes by position and date."), + 'sort' => array( + 'handler' => 'nodequeue_handler_sort_by_position_before_null', + ), + ); + // timestamp $data['nodequeue_nodes']['timestamp'] = array( 'title' => t('Added date'), diff --git a/includes/views/nodequeue_handler_sort_by_position_before_null.inc b/includes/views/nodequeue_handler_sort_by_position_before_null.inc new file mode 100755 index 0000000..42a64a7 --- /dev/null +++ b/includes/views/nodequeue_handler_sort_by_position_before_null.inc @@ -0,0 +1,27 @@ +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 99999, + // If DESC set 0 + $order = strtoupper($this->options['order']); + $stub = ($order == 'DESC') ? '0' : '99999'; + + $this->query->orderby[] = array('field' => "IFNULL($as, $stub) ", 'direction' => strtoupper($this->options['order'])); + } +} diff --git a/nodequeue.info b/nodequeue.info index 16da04c..53e128b 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_before_null.inc