将权重字段添加到drupal中的bundle

时间:2012-09-28 15:07:13

标签: drupal sorting bundle drupal-views entities

现在,我对实体和捆绑的词汇不太确定,所以道歉,但这是我的问题。

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

但没有任何价值可以排序,这是有道理的 - 我想将内容类型分类为定制的顺序'衣服,动物,饮料,人' - 即不按字母顺序排列。

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

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

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

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

它可以工作,但我不能将它与日期排序结合起来,无论如何,开销一定非常糟糕。

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

呼。任何帮助表示赞赏。

2 个答案:

答案 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;  

}


}