现在,我对实体和捆绑的词汇不太确定,所以道歉,但这是我的问题。
我有很多内容类型,在视图中我想先按内容类型排序节点,然后按日期排序
但没有任何价值可以排序,这是有道理的 - 我想将内容类型分类为定制的顺序'衣服,动物,饮料,人' - 即不按字母顺序排列。
我已经尝试使用全局php将这些排序为一个定制的顺序 - 它工作正常。 即
$myarray=array("films","shoes","people","animals");
这是设置代码,然后对于每一行,视图php允许您进行排序:
$pos1=array_search($row1->type, $myarray);
$pos2=array_search($row2->type, $myarray);
return $pos1-$pos2;
它可以工作,但我不能将它与日期排序结合起来,无论如何,开销一定非常糟糕。
所以,我的问题是,有没有办法可以在内容类型中添加加权字段,我认为可能是捆绑级别(!?),允许我按内容类型对视图中的数据进行排序,按照定制的顺序(非字母顺序)。
呼。任何帮助表示赞赏。
答案 0 :(得分:1)
在MySQL中,有一种按给定列表顺序排序的方法。见MySQL sort by some list
要在Drupal中执行此操作,您可以尝试在hook_views_query_alter
中添加类似的内容:
$query->orderby[0] = "FIELD(node.type, 'films', 'shoes', 'people', 'animal') ASC";
如https://drupal.stackexchange.com/questions/35543/syntax-for-the-various-query-modifiers
中所述答案 1 :(得分:0)
如果有人遇到这个问题,nmc的解决方案很好,但我无法让它工作(我肯定是错)所以我使用了hook_views_pre_render:
function MYMODULE_views_pre_render(&$view){
if($view->name=='entries_for_a_journal') {
$entryitemarray=array();
foreach($view->result as $entryitem){
$entryitemarray[$entryitem->node_type][]=$entryitem;
}
$listoftypes=array('destination','tourplan','packing_list','diary','accomodation','eatinganddrinking','placesofinterest','knowledge','recipe','peopleimet','usefulcontacts');
foreach($listoftypes as $typename){
foreach($entryitemarray[$typename] as $newviewentry){
$newviewresult[]=$newviewentry;
}
}
$view->result=$newviewresult;
}
}