1

さて、エンティティとバンドルの語彙がよくわからないので、お詫びしますが、ここに私の問題があります。

私はたくさんのコンテンツタイプを持っています、そしてビューで私は最初にコンテンツタイプで、次に日付でノードをソートしたいと思います

しかし、意味のある並べ替えの価値はありません。コンテンツタイプを「服、動物、飲み物、人」という特注の順序に並べ替えたいのです。つまり、アルファベット順ではありません。

私はグローバルPHPを使用して、これらをオーダーメイドの順序にソートしようとしました-それは正常に機能します。すなわち

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

これはセットアップコードであり、すべての行について、ビューphpを使用して次のように並べ替えることができます。

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

それは機能しますが、日付の並べ替えと組み合わせることができません。とにかく、オーバーヘッドはかなり悪いはずです。

だから、私の質問は、コンテンツタイプに重みフィールドを追加して、バンドルレベル(!?)で、ビュー内のデータをコンテンツタイプごとに並べ替えることができる方法はありますか?オーダーメイドの注文(アルファベット順ではありません)。

ふぅ。助けていただければ幸いです。

4

2 に答える 2

1

MySQLには、特定のリストの順序で並べ替える方法があります。MySQLをいくつかのリストで並べ替えるを参照してください

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-01T15:28:54.270 に答える
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;  

}


}
于 2012-10-22T12:55:44.373 に答える