1

这是我的第一篇文章,所以我会尽可能地详尽。我对 PHP 也很陌生。

这是一个使用 PODS CMS 插件的 wordpress 站点,因此请记住,wordpress 图片上传器允许访问单个图片上传的多种尺寸。这个概念是我有一组名为“团队”的数据,这个组有三个字段——图像、标题、简历。我将为每个团队成员生成一个包含无序列表的缩略图列表,然后在另一个包含 div 的列表中,我将拥有他的图像、标题和简历的更大版本。我基本上是在制作一个选项卡式内容区域,其中缩略图是选项卡

最终的 HTML 输出将是:

<ul>
<li> <img src="thumbnailurl.jpg"/></li>
<li> <img src="thumbnailurl2.jpg"/></li>
<li> <img src="thumbnailurl3.jpg"/></li>
</ul>
<div class="panes">
<div><h2>Title 1</h2> <p> BIO CONTENT </p></div>
<div><h2>Title 1</h2> <p> BIO CONTENT </p></div>
<div><h2>Title 1</h2> <p> BIO CONTENT </p></div>
</div>

我当前遇到的问题是我可以获取第一条记录的所有图像 url,但是当涉及到第二个 foreach 中的第二条记录时,我需要为新记录重新运行数组,但我想不通出如何。

<?php
  $Record = new Pod('the_team');
  $Record->findRecords($orderby = 't.id DESC'); 
  $mylist=array();

  while ($Record->fetchRecord())
  {
    $image_array = $Record->get_field('photo');
    $title = $Record->get_field('name');
    $desc = $Record->get_field('bio');
    $id = $Record->get_field('id');
    $mylist[] = array('name' => $title, 'desc' => $desc, 'id'=> $id ); 
?>

<ul>
<?php
  foreach($image_array as $i => $image)
  {
    $image_thumb_url = wp_get_attachment_image_src( $image['ID'], 'thumbnail', false );
    $image_thumb_url = $image_thumb_url[0];

    $image_med_url = wp_get_attachment_image_src( $image['ID'], 'medium', false );
    $image_med_url = $image_med_url[0];

    $image_large_url = wp_get_attachment_image_src( $image['ID'], 'large', false );
    $image_large_url = $image_large_url[0];

    $image_full_url = wp_get_attachment_image_src( $image['ID'], 'full', false );
    $image_full_url = $image_full_url[0];
?>
  <li>
    <a href="<?php echo $image_large_url; ?>">
      <img src="<?php echo $image_thumb_url; ?>" />
    </a>
  </li>
<?php } ?>
<?php } ?>
</ul>

<div class="panes">
<?php  
  foreach ($mylist as $person)
  { ?>
    <div class="team-member" id="member<?php echo $person['id']; ?>">
      <h2><?php echo $person['name']; ?></h2>
      <?php echo $person['desc']; ?>
      <a href="<?php echo $person['photo'];  ?>">
        <img src="<?php echo $person['photo'];   ?>" />
      </a>
<?php } ?>
</div>
</div>

Okkkay .. 所以我解决了第一个问题!!!但它带来了第二个。我想我要么需要第二个图像字段,要么只调用数组中的第一个图像和数组中<li>的第二个图像<div>

<?php

$Record = new Pod('the_team');
$Record->findRecords($orderby = 't.id DESC');
$mylist=array();
$cnt = 0;
?>
   <ul class="tabs">
<?php 
while ($Record->fetchRecord()) :
  $mylist[$cnt] = array(
    'name' => $Record->get_field('name'),
    'desc' => $Record->get_field('bio'),
    'id'=> $Record->get_field('id')
  );
  ?>
  <?php
  $image_array = $Record->get_field('photo');
  foreach($image_array as $i => $image) :
    $image_thumb_url = wp_get_attachment_image_src( $image['ID'], 'thumbnail', false );
    $mylist[$cnt]['img_thumb'] = $image_thumb_url[0];

    $image_med_url = wp_get_attachment_image_src( $image['ID'], 'medium', false );
    $mylist[$cnt]['img_med'] = $image_med_url[0];

    $image_large_url = wp_get_attachment_image_src( $image['ID'], 'large', false );
    $mylist[$cnt]['img_large'] = $image_large_url[0];

    $image_full_url = wp_get_attachment_image_src( $image['ID'], 'full', false );
    $mylist[$cnt]['img_full'] = $image_full_url[0];
  ?>
    <li>
      <a href="#">
        <img src="<?php echo $image_thumb_url[0]; ?>" />
      </a>
    </li>
  <?php endforeach; ?>
<?php
  $cnt++;
endwhile;
?>  </ul>

  <div class="panes">
  <?php foreach ($mylist as $person) : ?>
    <div class="team-member" id="member<?php echo $person['id']; ?>"><div id="member-info"><h2>Meet <?php echo $person['name']; ?></h2>
      <?php echo $person['desc']; ?></div>
      <a href="<?php echo $person['img_large'];  ?>" rel="prettyPhoto">
        <img src="<?php echo $person['img_med'];   ?>" style="float:left" />
      </a>
    </div>
  <?php endforeach; ?>
  </div>
4

1 回答 1

0

我想我可以看到你的问题是什么。您的第二个foreach循环不会从循环中受益,while因此如果遵循此路径,您唯一的选择是重新循环获取的数据。我不建议这样做,因为几乎总有一种方法可以将第二个循环所需的代码写入原始循环。

作为一个例子,我重写了你的代码,将第二个foreach循环合并到 while 循环中(否定它的需要)。这样,每条记录都有一个新条目$html$html2。一旦它循环通过,您就有两个变量,您可以连接它们以生成您正在寻找的完整 html。

<?php
$Record = new Pod('the_team');
$Record->findRecords($orderby = 't.id DESC');

// Custom variables 
$html = "<ul>\n";
$html2 = "";
$image_type=array('thumbnail','medium','large','full');

while ($Record->fetchRecord()) {

    $image_array = $Record->get_field('photo');
    $title = $Record->get_field('name');
    $desc = $Record->get_field('bio');
    $id = $Record->get_field('id');

    foreach($image_array as $i => $image) {

        foreach ($image_type as $type) {
            $image_temp =  wp_get_attachment_image_src( $image['ID'], $type , false );
            $image_url[$type] = $image_temp[0];
        } # End of Foreach loop

        // Create List HTML in primary output variable
        $html .= "<li>\n".
        "<a href=\"" . $image_url['large'] ."\">\n".
        "<img src=\"" . $image_url['thumbnail'] ."\" />\n".
        "</a>\n".
        "</li>\n";
    } #End of foreach loop

    // Create User HTML in secondary output variable
    $html2 .= "\t<div class=\"team-member\" id=\"member" . $id . ">\n".
              "<h2>" . $title . "</h2>\n".
              $desc . "\n".
              "<a href=\"" . $photo . ">\n". # $photo is not declared in this code (will error)
              "<img src=\"" . $photo . " />\n". # as above comment
              "</a>\n";
              "</div>\n";
} # End of while loop

// Wrap up the list elements, concat the secondary HTML.
$html .= "</ul>\n\n".
         "<div class=\"panes\">\n".
         $html2 . "\n".
         "</div>\n";

echo $html;
?>
于 2011-11-16T03:59:44.777 回答