1

现在,我不太确定实体和捆绑包周围的词汇,所以很抱歉,但这是我的问题。

我有很多内容类型,在一个视图中,我想先按内容类型对节点进行排序,然后按日期排序

但是没有任何意义的排序价值——我想将内容类型排序为定制的顺序“衣服、动物、饮料、人”——即不按字母顺序排列。

我尝试使用全局 php 将这些排序为定制的顺序 - 它工作正常。IE

$myarray=array("films","shoes","people","animals");

这是设置代码,然后对于每一行,views php 允许您这样排序:

$pos1=array_search($row1->type, $myarray);
$pos2=array_search($row2->type, $myarray);
return $pos1-$pos2;

它有效,但我不能将它与日期排序结合起来,无论如何开销一定很糟糕。

所以,我的问题是,有没有一种方法可以在我认为可能是捆绑级别(!?)的内容类型中添加一个加权字段,以允许我按内容类型对视图中的数据进行排序,在定制订单(非字母顺序)。

呸。任何帮助表示赞赏。

4

2 回答 2

1

在 MySQL 中,有一种按给定列表顺序排序的方法。请参阅MySQL 按某些列表排序

要在 Drupal 中执行此操作,您可以尝试在 a 中添加类似这样的内容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-01T15:28:54.270 回答
0

In case anyone comes across this, nmc's solution is good, but I couldnt get it to work (my fault surely) so I used 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;  

}


}
于 2012-10-22T12:55:44.373 回答