5

foreach ステートメントを使用してリスト ul>li を表示しようとしています。リストに要素がない場合、その基準をどのように処理できますか。

    <ul>
    <?php foreach($person['CastsMovie'] as $cast): ?>
      <li><?php echo $this->Html->link($cast['Movie']['name'], array('controller' => 'movies', 'action' => 'view', $cast['movie_id'],  'admin' => true), array('escape' => false)); ?> (<?php echo date("Y", strtotime($cast['Movie']['MovieDetail']['release_date'])); ?>)</li>
      <?php endforeach; ?>
    </ul>
4

3 に答える 3

6

かどうかを確認します。

if ( !empty( $person ) ) {
  foreach ( $person as $cast ) {
    echo "<li>$cast</li>";
  }
} else {
  echo "<li>This play has no cast members.</li>";
}
于 2012-04-29T05:48:45.027 に答える
1

実際には、UL をチェックで囲む必要があります。そうしないと、不要な空の「ul」タグが作成されます。

<?php if (!empty($person['CastsMovie'])) { ?>
<ul>
<?php foreach($person['CastsMovie'] as $cast) { ?>
  <li><?php echo $this->Html->link($cast['Movie']['name'], array('controller' => 'movies', 'action' => 'view', $cast['movie_id'],  'admin' => true), array('escape' => false)); ?> (<?php echo date("Y", strtotime($cast['Movie']['MovieDetail']['release_date'])); ?>)</li>
  <?php } ?>
</ul>
<?php } ?>

これは、リスト要素があるかどうかを確認し (あなたの場合は CastsMovies をこの人に)、そうであればリストを表示します (ul + li)。そうでない場合は、完全なリストが省略されます (子の li 要素だけでなく)。

于 2012-04-29T09:58:20.143 に答える
0

まず、使用している「コントローラー」で、テンプレートに適合するようにデータを準備します。

foreach($person['CastsMovie'] as $key => $cast) {
  $cast['html_link'] = $this->Html->link($cast['Movie']['name'], 
                                         array('controller' => 'movies', 
                                               'action' => 'view', 
                                               $cast['movie_id'], 
                                               'admin' => true), 
                                         array('escape' => false)
                               ); 
  $cast['html_date'] = date("Y", strtotime($cast['Movie']['MovieDetail']['release_date']));
  $person['CastsMovie'][$key] = $cast;
}

次に、テンプレートを健全で読みやすいものにします

<?php if($person['CastsMovie']: ?>
<ul>
<?php     foreach($person['CastsMovie'] as $cast): ?>
  <li>
    <?=$cast['html_link']?> (<?=$cast['html_date']?>)
  </li>
<?php     endforeach ?>
</ul>
<?php endif ?>
于 2012-04-29T10:17:58.013 に答える