从数组中保存内容以进行新循环

时间:2011-11-16 02:00:55

标签: php wordpress podscms

这是我的第一篇文章,所以我将努力做到尽可能彻底。我也是PHP的新手。

这是一个使用PODS CMS插件的wordpress网站,因此请记住wordpress图像上传器允许访问一个单一图像上传的多种尺寸。这个概念是我有一组称为“团队”的数据,这个组有三个领域 - images,title,bio。我将为每个团队成员生成一个包含无序列表的缩略图列表,然后在另一个包含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>

我当前遇到的问题是我可以获取第一条记录的所有图像网址,但是当涉及第二条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>

1 个答案:

答案 0 :(得分: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;
?>