Drupal 7サイトの基本的なページコンテンツタイプで フィールドコレクション を使用しています。このコンテンツタイプのノードからCSVとしてデータを出力する Data Export モジュールを使用してビューを作成しました。ビューは、各親ノードのすべてのフィールドコレクションデータを1つのセルにダンプするように構成されています。
問題は、フィールドコレクションのフィールド間にセパレータがないことです。したがって、CSVの[フィールドコレクション]セルの内容は次のようになります。
Fruit_1: AppleFruit_2: OrangeFruit_3: Banana
それはそのセルのデータを読むのに耐えられない(セパレータはAppleとOrangeの後にあるべきです...ああ、果物はこの例にすぎず、実際のデータではありません )。
そこにある種のセパレーターをどうやって入れるのですか?派手である必要はありません。カンマとスペースのようなシンプルなものが素敵です!例:
Fruit_1: Apple, Fruit_2: Orange, Fruit_3: Banana
私は Field Collection Views で実験しましたが、運がありません。
解決策は、カスタムモジュールにviews_pre_render
フックを実装することです。
function mymodule_views_pre_render(&$view) {
if ($view->name == 'myview') {
foreach ($view->result as $key => $row) {
$line = array();
foreach ($view->result[$key]->field_field_fruit_collection as $n => $collection) {
$item = current($collection['rendered']['entity']['field_collection_item']);
$line[] = $item['field_fruit'][0]['#markup'] . ' (' . $item['field_color'][0]['#markup'] . ')';
unset($view->result[$key]->field_field_fruit_collection[$n]);
}
$view->result[$key]->field_field_fruit_collection[0]['rendered']['#markup'] = implode(', ', $line);
}
}
}
この例では、コレクションフィールドはfield_fruit_collection
であり、field_fruit
とfield_color
の2つのフィールドで構成されています。エクスポートされたコレクションフィールドの内容は次のようになります。
"Apple (red), Banana (yellow), Kiwi (green)"
ビューのRelationships
設定を使用して、フィールドコレクションを関係として設定すると、そのフィールドを選択して、ノード(または任意のエンティティ)のネイティブフィールドであるかのように、そこから処理を続行できるはずです。