Es existiert ein (bekannter http://drupal.org/node/389598) Drupal-Bug in taxonomy_select_nodes(), dadurch wird die anzahl der zurückgelieferten nodes IMMER (auf defaultmässig 10) beschränkt, auch wenn das flag "pager" nicht gesetzt ist. Workaround: ich habe taxonomy_select_nodes() mit einem weiteren parameter "nItems" ausgestattet.
Das problem trat auf, als ich versucht habe, eine "Custom Pager" für die bilder in einer bildergallerie zu schreiben. Dazu habe ich ein "PHP snippet" angelegt welches eine liste von node-ids zu einem bestimmten taxonomie begriff liefert (funktion buildList(), siehe unten).
Update 16.2.2001:
Da meine änderungen (natürlich) beim letzten drupal-update überschrieben wurden, habe ich mich entschlossen meine eigene taxonomy_select_nodes() zu schreiben:
function my_taxonomy_select_nodes($term) { // For each term, generate an array of descendant term IDs to the right depth. $descendant_tids = array(); $tree = taxonomy_get_tree($term->vid, $term->tid, -1, 0); $descendant_tids[] = array_merge(array($term->tid), array_map('_taxonomy_get_tid_from_term', $tree)); $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 FROM {node} n INNER JOIN {term_node} tn ON n.vid = tn.vid WHERE tn.tid IN ('. $placeholders .') AND n.status = 1 ORDER BY n.title'; $sql = db_rewrite_sql($sql); $result = db_query_range($sql, $args, 0, 1000); return $result; }
Das vollständige PHP snippet (Pager node list) für den Custom Pager sieht dann so aus:
function my_taxonomy_select_nodes($term) { // For each term ID, generate an array of descendant term IDs to the right depth. $descendant_tids = array(); $tree = taxonomy_get_tree($term->vid, $term->tid, -1, 0); $descendant_tids[] = array_merge(array($term->tid), array_map('_taxonomy_get_tid_from_term', $tree)); $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 FROM {node} n INNER JOIN {term_node} tn ON n.vid = tn.vid WHERE tn.tid IN ('. $placeholders .') AND n.status = 1 ORDER BY n.title'; $sql = db_rewrite_sql($sql); $result = db_query_range($sql, $args, 0, 1000); return $result; } function buildList() { /* Parent-tax-id (gallerie) zu diesem bild-node feststellen: */ $tid = array_pop( taxonomy_node_get_terms( node_load( arg(1) ) ) )->tid; $term = array_pop( taxonomy_node_get_terms( node_load( arg(1) ) ) ); /* * Alle bilder-nodes zu dieser taxonomie (gallerie) holen: */ /* Funktioniert nicht wegen bug in taxonomy_select_nodes, es werden nur 10 elemente */ /* zurueckgegeben */ /* $result = taxonomy_select_nodes( array( $term->tid ), "or", 0, 0); */ $result = my_taxonomy_select_nodes($term); $nodes = array(); while ($node = db_fetch_object($result)) { /* drupal_set_message("nid:" . $node->nid . ", list: " . print_r($nodes)); */ $nodes[] = $node->nid; }; return $nodes; } return buildList();