web-dev-qa-db-ja.com

XMLのビューデータエクスポートを介して複数のフィールドコレクションをエクスポートする必要がある

ビューデータのエクスポートを使用して、CSVと手動入力をインポートし、主要な情報をXMLフィード/ファイルにエクスポートするようにサイトを設定しています。フィールドのグループを追加する必要があるときに問題が発生します。ユーザーはこれらのフィールドグループを必要な数だけ追加でき、ネストされたアイテムとして1行の出力に表示されます。

フィールドコレクションを使用すると、出力は無効なXMLを生成するか、すべてのラッパーが取り除かれ、プレーンテキストになります。テーマでカスタムテンプレートファイルを試しましたが、ビューのデータエクスポートでタグが取り除かれています。

必要な出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<file_information xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<asset_data>
    <upn>GBHIS3473610HD30P001</upn>
    <title>My Title</title>
    <version>Sunday 26th January</version>
    <duration>00:00:30:00</duration>
    <tc_in>10:00:00:00</tc_in>
    <tc_out>10:00:30:00</tc_out>
    <aspect_ratio>16:9</aspect_ratio>
    <segment>
        <sequence>1</sequence>
        <tc_in>10.00.00.00</tc_in>
        <tc_out>10.00.30.00</tc_out>
    </segment>
    <segment>
        <sequence>2</sequence>
        <tc_in>DMC</tc_in>
        <tc_out>DMC</tc_out>
    </segment>
    <segment>
        <sequence>3</sequence>
        <tc_in>DMC</tc_in>
        <tc_out>DMC</tc_out>
    </segment>
    <segment>
        <sequence>4</sequence>
        <tc_in>DMC</tc_in>
        <tc_out>DMC</tc_out>
    </segment>
</asset_data>
</file_information>

実際の出力(残りのXMLは問題ありません)

<segment>
  <sequence>
    <section class="field field-name-field-sequence field-type-number-integer field-label-above view-mode-full">
     <h2 class="field-label">sequence:&amp;nbsp;</h2>
     <div class="field-items">
     <div class="field-item even">1</div>
     </div>
    </section>
  </sequence>
  <tc_in>
  <section class="field field-name-field-tc-in field-type-hms-field field-label-above view-mode-full">
     <h2 class="field-label">tc_in:&amp;nbsp;</h2>
     <div class="field-items">
       <div class="field-item even">
         <span class="hms hms-format-h-mm-ss">0:00:00</span>
       </div>
     </div>
   </section>
  </tc_in>
  <tc_out>
    <section class="field field-name-field-tc-out field-type-hms-field field-label-above view-mode-full">
    <h2 class="field-label">tc_out:&amp;nbsp;</h2>
    <div class="field-items">
     <div class="field-item even">
       <span class="hms hms-format-h-mm-ss">0:00:30</span>
     </div>
    </div>
   </section>
  </tc_out> 
  <sequence>
    <section class="field field-name-field-sequence field-type-number-integer field-label-above view-mode-full">
     <h2 class="field-label">sequence:&amp;nbsp;</h2>
     <div class="field-items">
       <div class="field-item even">2</div>
     </div>
    </section>
   </sequence>
   <tc_in>
     <section class="field field-name-field-tc-in field-type-hms-field field-label-above view-mode-full">
     <h2 class="field-label">tc_in:&amp;nbsp;</h2>
     <div class="field-items">
      <div class="field-item even">
        <span class="hms hms-format-h-mm-ss">0:00:00</span>
      </div>
     </div>
    </section>
   </tc_in>
   <tc_out>
     <section class="field field-name-field-tc-out field-type-hms-field field-label-above view-mode-full">
     <h2 class="field-label">tc_out:&amp;nbsp;</h2>
     <div class="field-items">
      <div class="field-item even">
        <span class="hms hms-format-h-mm-ss">0:00:20</span>
      </div>
     </div>
    </section>
  </tc_out>
 </segment>

では、出力をカスタマイズするにはどうすればよいですか、またはフィールドコレクション以外のものを使用する必要がありますか?

私の内容field-collection-item.tpl.php

<sequence><?php print render($content['field_sequence']); ?></sequence>
<tc_in><?php print render($content['field_tc_in']); ?></tc_in>
<tc_out><?php print render($content['field_tc_out']); ?></tc_out>

私の内容views-data-export-xml-body.tpl.php

<?php
   $item_item = 'asset_data';
?>
<?php foreach ($themed_rows as $count => $row): ?>
  <<?php print $item_item; ?>>
<?php foreach ($row as $field => $content): ?>
  <?php if($content != NULL){ ?>
    <?php $content = str_replace("&lt;","<",$content); 
     $content = str_replace("&gt;",">",$content); ?>
     <<?php print $xml_tag[$field]; ?>><?php print_r $content; ?></<?php print $xml_tag[$field]; ?>>
    <?php } ?>
 <?php endforeach; ?>
   </<?php print $item_item; ?>>
 <?php endforeach; ?>
1
Keypad

@Molotが示唆したように、私はfields.tpl.phpをクリーンアップする必要がありましたが、名前にタイプミスがあったため、困惑しました。

これに加えて、views-data-export-xml-body.tpl.phpにいくつかのロジックを追加して、フィールドアイテムの各セットを個別にラップする必要がありました。

(str_replaceを使用して最後の要素の終了タグを検索し、終了および開始ラッパータグを挿入します)

$content = str_replace("/tc_out> <sequence>","/tc_out> </segment>
    <segment> <sequence>",$content);
1
Keypad