web-dev-qa-db-ja.com

リンクされたノード/エンティティ参照フィールドによる並べ替え

「Attendee」と呼ばれる1つのコンテンツタイプで数千のコンテンツノードの名前タグを出力するとします。これらの各ノードは、イベント(およびそれぞれの名前タグ)の単一の「参加者」を指定します。これらの出席者も、出席している「友人」のために印刷された名前タグも必要だったとします。それは問題ではありません:これらのfriendsは、独自の名前タグを取得するために同じフィールドを持つ独自のノードを必要とするため、同じコンテンツタイプにそれらを保持し、それらがfriend参加者のシンプルなチェックボックスを使用します。

ビューをレンダリングするとき、出席者のすぐ後にこれらの出席者の友達を表示する必要があります。それらをリンクするために、ノード参照またはエンティティ参照フィールドを使用しました。ビューモジュールで、出席者の直後に出席者の友達を並べ替えるにはどうすればよいですか?

追伸私は技術的にはViews PDF=モジュールを使用していますが、基本的なビュー機能を備えているため、ビューで可能であれば、おそらくこのモジュールで可能になります。

3
WebMW

順序付け用の新しいフィールドを見ることができなかったため(これは奇妙です)、おそらくビュークエリに対してクエリの変更を実行し、いくつかの変更を行う必要があります。

<?php
function mymodule_views_query_alter(&$view, &$query) {
  if ($view->name == 'myviewname') {
    $view->query->somecodetoselectfields
    $view->query->somecodeforleftjoin
    $view->query->orderby[0]['field'] = "FIELDNAME";
    $view->query->orderby[0]['direction'] = "ASC";
  }
}
?>

通常、ビュークエリにタグを追加するだけで、標準のDrupalクエリインターフェイスを使用してタグを変更できます。これは、IMOを使用する方がはるかに簡単です。

<?php
function mymodule_views_query_alter(&$view, &$query) {
  if ($view->name == 'myviewname') {
    $query->tag[] = 'mytag';
  }
}
?>

その後

<?php
function mymodule_query_mytag_alter(QueryAlterableInterface $query) {
  $query->blablabla;
}
?>

を見てみましょう:

https://www.drupal.org/node/310077https://api.drupal.org/api/views/views.api.php/function/hook_views_query_alter/7https://api.drupal.org/api/views/plugins%21views_plugin_query_default.inc/class/views_plugin_query_default/7

ソリューションが十分に単純でない場合はお詫びします。

1
Fidelix