现在,我不太确定关于实体和包的词汇表,所以很抱歉,但这是我的问题。
我有很多内容类型,在视图中,我希望首先按内容类型对节点进行排序,然后按日期进行排序
但排序没有意义--我想按定制的顺序对内容类型进行排序:“衣服、动物、饮料、人物”--即不按字母顺序排序。
我已经尝试过使用global php将它们排序成一个定制的顺序--它工作得很好。即
$myarray=array("films","shoes","people","animals");这是设置代码,然后对于每一行,views php允许你这样排序:
$pos1=array_search($row1->type, $myarray);
$pos2=array_search($row2->type, $myarray);
return $pos1-$pos2;它可以工作,但我不能将它与日期排序结合在一起,而且无论如何开销肯定是相当糟糕的。
所以,我的问题是,有没有一种方法可以在我认为可能是捆绑包级别(!?)的内容类型中添加一个权重字段。允许我按内容类型在视图中按定制顺序(非字母顺序)对数据进行排序。
呼。感谢您的帮助。
发布于 2012-10-01 23:28:54
在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中所述
发布于 2012-10-22 20:55:44
如果有人遇到这种情况,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;
}
}https://stackoverflow.com/questions/12642617
复制相似问题