Nodes mit bestimmter Taxonomie und bestimmtem Node Type auslesen
Eingetragen von djdops (30)
am 25.07.2008 - 11:29 Uhr in
am 25.07.2008 - 11:29 Uhr in
Moin Leute,
ich möchte auf einer Seite (kein View, leider nicht möglich) Nodes eines bestimmten Typs und mit einer bestimmten Taxonomie ausspielen. Vermutlich finde ich die Funktion(en) mit den dies möglich ist einfach nur nicht. Könnt ihr mir da auf die Sprünge helfen?
Beste Grüße
djdops
- Anmelden oder Registrieren um Kommentare zu schreiben
Nodes mit bestimmter Taxonomie und bestimmtem Node Type auslesen
am 26.07.2008 - 12:31 Uhr
ich möchte auf einer Seite (kein View, leider nicht möglich) ...
Glaube ich irgendwie nicht. Kannst du das näher erläutern?
... Nodes eines bestimmten Typs und mit einer bestimmten Taxonomie ausspielen.
Es gibt keine direkte Verbindung zwischen Nodes und Taxonomien. Es gibt eine Verbindung zwischen
--
Klar kannst du dir die
am 26.07.2008 - 12:42 Uhr
Klar kannst du dir die Datenbankquerries selber ausdenken, aber es gibt eine deutlich einfachere Methode: Views (warte...)
Wenn man eine View erstellt kann man mit dem Devel Modul die resultierende Query auslesen und benutzen, bzw. nach eigenen Vorlieben anpassen und für sein Modul/etc. nehmen
Also erstelle eine View mit einer definierten URL
dann geh auf diese Url und du wirst den Local Task "Dev Queries" sehen. Dort siehst du die Datenbankabfrage, viel Spaß damit
--------------
Blog www.freeblogger.org: Deutscher IRC-Channel: irc.freenode.net #drupal.de ... Jabber-me: dwehner@im.calug.deXING
Views und Positionierung
am 28.07.2008 - 09:24 Uhr
Moin traxer,
ich habe bislang noch keine Möglichekeit gefunden einen bestimmten Node in einem View an einer bestimmten Stelle auszuspielen. Und genau das muss ich tun. Ich setze mich allerdings auch noch nicht alzu lange mit Drupal auseinander. Die Architektur ist somit sicherlich auch nicht perfekt. Ich habe z.B. nur ein Vokabular, welches die Struktur der Site darstellt. Somit kann auch jeder Inhaltstyp auf das Vokabular zugreifen.
Du hast aber recht, das ich etwas unklar war.
Ein node eines bestimmten Typs ist einem bestimmten Begriff zugeordnet. Nun habe ich ein Template als Übersichtsseite gebaut, und möchte auf dieser Seite entweder bestimmte Nodes an bestimmten Positionen ausspielen, welche von einem Redakteur ausgewählt, oder aber (an den nicht besetzten Positionen) die neuesten Nodes eines bestimmten Typs mit einem bestimmten Begriff.
Beste Grüße
djdops
Wenn man sich vornimmt nichts zu tun, und das auch schafft, hat man dann etwas getan?
SQL
am 28.07.2008 - 09:31 Uhr
Moin dereine,
an die Möglichkeit ein SQL-Statement zu schreiben habe ich auch gedacht. Allerdings würde ich lieber vorhandene Funktionen verwenden, sofern möglich. Daher ist die Idee mit einem View und dem Devel-Modul sehr gut, ich würde sie jedoch erst nutzen wollen wenn es keinen anderen Weg gibt.
Beste Grüße
djdops
Wenn man sich vornimmt nichts zu tun, und das auch schafft, hat man dann etwas getan?
Verwende Drupals Node- und Taxonomyfunktionen
am 28.07.2008 - 10:56 Uhr
Sehe Dir auf http://api.drupal.org die Funktionen im Zusammenhang mit node, term, vocabulary und taxonomy an.
Die genannten Begriffe im Autocomplete field (oben links) eingeben.
Ich bin mir sicher Du findest eine Moeglichkeit, mittels PHP Code und Drupals Node- und Taxonomyfunktionen, innerhalb eines Nodetype Templates, Nodes eines bestimmten Typs und einer bestimmten Taxonomie anzuzeigen.
-------------
quiptime
Nur tote Fische schwimmen mit dem Strom.
Da geht noch was.
taxonomy_select_nodes()
am 06.08.2008 - 14:20 Uhr
So, nach langem Suchen und Probieren hab ich mir nun die Funktion Taxonomy_select_nodes() angepasst. Ich übergebe einfach einen weiteren Parameter. Dieser enthält ein Array mit den Inhaltstypen, auf die das Ergebniss beschränkt werden soll.
Vielen Dank für eure Hilfe und Vorschläge.
Beste Grüße
djdops
Wenn man sich vornimmt nichts zu tun, und das auch schafft, hat man dann etwas getan?
klingt interessant. kannst
am 18.11.2008 - 12:10 Uhr
klingt interessant.
kannst du den code posten?
danke!
Kein Problem
am 18.11.2008 - 14:09 Uhr
function taxonomy_select_nodes($tids = array(), $operator = 'or', $depth = 0, $pager = TRUE, $order = 'n.sticky DESC, n.created DESC', $exclusion = array(), $num = false, $node_type = array()) {
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_get_term($tid);
$tree = taxonomy_get_tree($term->vid, $tid, -1, $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 = implode(',', array_fill(0, count($args), '%d'));
// Excludes the given node ids.
$exclusion = (count($exclusion) > 0) ? ' AND n.nid NOT IN (' . implode(',', $exclusion) . ')' : '';
// Selects only the node of a given type.
if (is_array($node_type))
{
foreach ($node_type as &$type) { $type = '\'' . $type . '\''; }
$node_type = (count($node_type) > 0) ? ' AND n.type IN (' . implode(',', $node_type) . ')' : '';
}
$sql = 'SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $placeholders .')' . $exclusion . ' ' . $node_type . ' AND n.status = 1 ORDER BY '. $order;
$sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n INNER JOIN {term_node} tn ON n.nid = tn.nid WHERE tn.tid IN ('. $placeholders .')' . $exclusion . ' ' . $node_type . ' AND n.status = 1';
}
else {
$joins = '';
$wheres = '';
$args = array();
foreach ($descendant_tids as $index => $tids) {
$joins .= ' INNER JOIN {term_node} tn'. $index .' ON n.nid = tn'. $index .'.nid';
$placeholders = implode(',', array_fill(0, count($tids), '%d'));
$wheres .= ' AND tn'. $index .'.tid IN ('. $placeholders .')';
$args = array_merge($args, $tids);
}
$sql = 'SELECT DISTINCT(n.nid), n.sticky, n.title, n.created FROM {node} n '. $joins .' WHERE n.status = 1 '. $wheres .' ORDER BY '. $order;
$sql_count = 'SELECT COUNT(DISTINCT(n.nid)) FROM {node} n '. $joins .' WHERE n.status = 1 '. $wheres;
}
$sql = db_rewrite_sql($sql);
$sql_count = db_rewrite_sql($sql_count);
if ($pager) {
$sql_num = ($num !== false) ? $num : variable_get('default_nodes_main', 10);
$result = pager_query($sql, $sql_num, 0, $sql_count, $args);
}
else {
$sql_num = ($num !== false) ? $num : variable_get('feed_default_items', 10);
$result = db_query_range($sql, $args, 0, $sql_num);
}
}
return $result;
}
Wenn man sich vornimmt nichts zu tun, und das auch schafft, hat man dann etwas getan?
danke!
am 18.11.2008 - 14:28 Uhr
danke!