Views a specifické třídění
Vložil/a Surda, 6 Srpen, 2012 - 15:11
Kategorie:
Jak na to?
Týká se verze:
Drupal 6.x
Ahoj, můžete mi prosím poradit?
Potřebuji v plném zobrazení uzlu (např.: node/50) zobrazit blok se seznamem uzlů (včetně aktuálně zobrazeného) stejného typu jako je zobrazený uzel (to není problém), ale seznam musí být setříděný následovně:- na prvním místě aktuálně zobrazený uzel (Nid: 50)
- a dále zbytek tříděný podle data vytvoření (node_created DESC)
Marně se snažím najít řešení přímo ve views, nebo i změnou dotazu v hook_views_query_alter()
Edit: Musí to být jeden dotaz v rámci jednoho displeje.
Dík za radu. Šurda
ten jeden bych tam frknul
Dík
Dík, ale musí to být jeden dotaz v rámci jednoho displeje. To jsem neuvedl.
Data budou zobrazena jako ikony na mapě (gmap).
Na mapě budou použity dvě různě barevné ikony (markers). Aktuálně zobrazený uzel bude na mapě zobrazený třeba červenou ikonou zbytek uzlů modrou ikonou. Proto musí být jako první (respektive v určeném pořadí). Potom je možné přiřadit jednotlivým uzlům správné ikony. Třeba první uzel bude červená další tři zelené a zbytek modré.
Takto v SQL: SELECT
Takto v SQL:
SELECT IF(node.nid=21,1,0) AS mysort, node.nid AS nid, node.title AS node_title FROM node node WHERE (( (node.status = ‚1‘) AND (node.type IN (‚article‘)) )) ORDER BY mysort DESC, node_title ASC21 je vybrane node nid. Takze staci toto dostat do query.
Funguje, perfektní, děkuji
Pro ostatní kdyby někdo potřeboval.
function mymodule_views_query_alter(&$view, &$query) {if ($view->name == ‚view_name‘ && $view->current_display == ‚display_name‘) {
/*
$nid vezme z URL nebo z $view
$arg = arg();
$nid = ($arg[0] == ‚node‘ && is_numeric($arg[1])) ? (int) $arg[1] : 0;
nebo přímo z view, pokud je v argumentech
$nid = ($view->args[xx]) ? (int) $view->args[xx] : 0;
*/
$nid = ($view->args[1]) ? (int) $view->args[1] : 0;
$query->fields[‚super_mega_ultra_sort_from_havran‘][‚field‘] = „IF(node.nid=“ . $nid . „,1,0)“;
$query->fields[‚super_mega_ultra_sort_from_havran‘][‚alias‘] = „super_mega_ultra_sort_from_havran“;
$query->orderby[0] = „super_mega_ultra_sort_from_havran DESC“;
$query->orderby[1] = „node_created DESC“;
}
}
Edit: aby kód fungoval správně, musí být ve views přidáno třídění podle node_created DESC
Poslat nový komentář