function nodeorder_select_nodes in Node Order 7
Same name and namespace in other branches
- 5 nodeorder.module \nodeorder_select_nodes()
- 6 nodeorder.module \nodeorder_select_nodes()
NOTE: This is nearly a direct copy of taxonomy_select_nodes() -- see http://drupal.org/node/25801 if you find this sort of copy and paste upsetting...
Finds all nodes that match selected taxonomy conditions.
Parameters
$tids: An array of term IDs to match.
$operator: How to interpret multiple IDs in the array. Can be "or" or "and".
$depth: How many levels deep to traverse the taxonomy tree. Can be a nonnegative integer or "all".
$pager: Whether the nodes are to be used with a pager (the case on most Drupal pages) or not (in an XML feed, for example).
$order: The order clause for the query that retrieve the nodes.
$count: If $pager is TRUE, the number of nodes per page, or -1 to use the backward-compatible 'default_nodes_main' variable setting. If $pager is FALSE, the total number of nodes to select; or -1 to use the backward-compatible 'feed_default_items' variable setting; or 0 to select all nodes.
Return value
A resource identifier pointing to the query results.
1 call to nodeorder_select_nodes()
- nodeorder_taxonomy_form_vocabulary_submit in ./
nodeorder.module - Submit handler for nodeorder_form_taxonomy_form_vocabulary_alter().
File
- ./
nodeorder.module, line 424 - Nodeorder module.
Code
function nodeorder_select_nodes($tids = array(), $operator = 'or', $depth = 0, $pager = TRUE, $order = 'n.sticky DESC, n.created DESC', $count = -1) {
if (count($tids) > 0) {
// For each term ID, generate an array of descendant term IDs to the right depth.
$descendant_tids = array();
if ($depth === 'all') {
$depth = NULL;
}
foreach ($tids as $index => $tid) {
$term = taxonomy_term_load($tid);
$tree = taxonomy_get_tree($term->vid, $tid, $depth);
$descendant_tids[] = array_merge(array(
$tid,
), array_map('_taxonomy_get_tid_from_term', $tree));
}
if ($operator == 'or') {
$args = call_user_func_array('array_merge', $descendant_tids);
$placeholders = db_placeholders($args, 'int');
$sql = 'SELECT DISTINCT(n.nid), n.sticky, n.title, n.created, tn.weight FROM {node} n INNER JOIN {taxonomy_index} tn ON n.vid = tn.vid WHERE tn.tid IN (' . $placeholders . ') AND n.status = 1 ORDER BY ' . $order;
$sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n INNER JOIN {taxonomy_index} tn ON n.vid = tn.vid WHERE tn.tid IN (' . $placeholders . ') AND n.status = 1';
}
else {
$joins = '';
$wheres = '';
$args = array();
$query = db_select('node', 'n');
$query
->condition('status', 1);
foreach ($descendant_tids as $index => $tids) {
$query
->join('taxonomy_index', "tn{$index}", "n.nid = tn{$index}.nid");
$query
->condition("tn{$index}.tid", $tids, 'IN');
}
$query
->fields('n', array(
'nid',
'sticky',
'title',
'created',
));
// @todo: distinct?
$query
->fields('tn0', array(
'weight',
));
// @todo: ORDER BY ' . $order;
//$sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n ' . $joins . ' WHERE n.status = 1 ' . $wheres;
}
if ($pager) {
if ($count == -1) {
$count = variable_get('default_nodes_main', 10);
}
$result = pager_query($sql, $count, 0, $sql_count, $args);
}
else {
if ($count == -1) {
$count = variable_get('feed_default_items', 10);
}
if ($count == 0) {
// TODO Please convert this statement to the D7 database API syntax.
$result = $query
->execute();
}
else {
// TODO Please convert this statement to the D7 database API syntax.
$result = db_query_range($sql, $args);
}
}
}
return $result;
}