vor/zurück Navigation mit einer view als Sortierung - PHP?
am 30.09.2011 - 11:18 Uhr in
Hi.
Ich habe eine einfache vor/zurück Navigation in meinen Artikeln.
Im Menü habe ich einen link "Texte" der zu einer view (page) "Alle Artikel nach Einstellungsdatum sortiert" weist, also die neuesten 5 Artikelteaser werden unter "Texte" angezeigt.
Alle Artikel haben aber auch ein Feld mit einer Nummer, nach der die Artikel auch nach dieser Nummer sortiert werden können (die Nummer ist die eigentlich Chronologie, also so, wie die Artikel zusammen gehören).
Ein Beispiel: Die Artikel gehören so zusammen (das sind die Nummern aus "field_number"): "0001", "0002" "0003" etc.
Eingestellt werden sie aber z.B. so "0002", "0001", "0003".
Klicke ich jetzt auf "0002" und dann in die Navi "nächster Artikel", komme ich zu "0001", weil der Artikel ja danach erstellt wurde.
ich möchte aber statt dessen zu "0003" gelangen, weil das ja die eigentlich Reihenfolge ist.
Kann man folgendes script dementsprechend anpassen? Also die Daten aus dem Feld "field_number" als Sortierung nutzen?
Hier ist der Code:
<?php
function node_sibling($dir = 'next', $node, $next_node_text=NULL, $prepend_text=NULL, $append_text=NULL, $tid = FALSE){
global $language;
if($tid){
$query = 'SELECT n.nid, n.title FROM {node} n INNER JOIN {term_node} tn ON n.nid=tn.nid WHERE '
. 'n.nid ' . ($dir == 'previous' ? '<' : '>') . ' :nid AND n.type = :type AND n.status=1 AND '
. 'AND tn.tid = :tid AND n.language = :language ORDER BY n.nid ' . ($dir == 'previous' ? 'DESC' : 'ASC');
//use fetchObject to fetch a single row
$row = db_query($query, array(':nid' => $node->nid, ':type' => $node->type, ':tid' => $tid, ':language' => $language->language))->fetchObject();
}else{
$query = 'SELECT n.nid, n.title FROM {node} n WHERE '
. 'n.nid ' . ($dir == 'previous' ? '<' : '>') . ' :nid AND n.type = :type AND n.status=1 AND n.language = :language '
. 'ORDER BY n.nid ' . ($dir == 'previous' ? 'DESC' : 'ASC');
//use fetchObject to fetch a single row
$row = db_query($query, array(':nid' => $node->nid, ':type' => $node->type, ':language' => $language->language))->fetchObject();
}
if($row) {
$text = $next_node_text ? $next_node_text : $row->title;
return $prepend_text . l($text, 'node/'.$row->nid, array('rel' => $dir)) . $append_text;
} else {
return FALSE;
}
}
?>Wahrscheinlich geht das auch einfacher, aber ich habe nichts entsprechendes gefunden... und bin bei php eher ahnungslos...
Ich habe auch schon versucht das über views zu machen, da kann ich ja die Felder als Sortierung nutzen, allerdings sollen ja die Teaser anders sortiert werden...
Vielen Dank für Hife!
- Anmelden oder Registrieren um Kommentare zu schreiben

Hallo, ich weiss jetzt
am 04.10.2011 - 09:53 Uhr
Hallo,
ich weiss jetzt nicht, aus welcher Datenbanktabelle dein Wert für field_number kommt, aber du musst deine query-variable so anpassen, dass du noch einen join auf die Tabelle machst, in der der Wert steht, und dann in der query die Order abändern kannst auf das field_number.
Irgend sowas in die Richtung:
$query = 'SELECT n.nid, n.title FROM {node} n INNER JOIN {term_node} tn ON n.nid=tn.nid INNER JOIN {jeweilige_tabelle} jt on jt.nid = n.nid WHERE '. 'n.nid ' . ($dir == 'previous' ? '<' : '>') . ' :nid AND n.type = :type AND n.status=1 AND '
. 'AND tn.tid = :tid AND n.language = :language ORDER BY jt.field_number ' . ($dir == 'previous' ? 'DESC' : 'ASC');
Für "jeweilige_tabelle" dann die entprechende tabelle in der "field_number" steht einsetzen.
Entsprechend müsstest du dass natürlich im else-Zweig machen.
Ich hoffe, das ist das, was du wolltest.