web-dev-qa-db-ja.com

ビューデータエクスポート(CSV)によるフィールドコレクションデータのフォーマット

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 で実験しましたが、運がありません。

4
Sam

解決策は、カスタムモジュールに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_fruitfield_colorの2つのフィールドで構成されています。エクスポートされたコレクションフィールドの内容は次のようになります。

"Apple (red), Banana (yellow), Kiwi (green)"
2
jcharaoui

ビューのRelationships設定を使用して、フィールドコレクションを関係として設定すると、そのフィールドを選択して、ノード(または任意のエンティティ)のネイティブフィールドであるかのように、そこから処理を続行できるはずです。

1
dominic