PHP循环:我错过了什么?

时间:2015-02-03 19:56:15

标签: php foreach

我几天前提交了一个不同的问题。我取得了进步(感谢y'所有),但遇到了更多的障碍。

首先,网址为:http://rowlandwilliams.com/lepeep

代码应该做什么:

1)代码读取图像目录,寻找分配给页面的图像。如果找到图像pagename0.png(例如,catering0.png),它会将该图像打印到屏幕上。

2)如果找到多个图像(例如,menu1.png,menu2.png等),则会打印幻灯片。 (注意这些图像开始递增1而不是0。)

3)当它看不到分配了页面的图像时,它会继续运行。

有(3)菜单页面图像; (5)关于我们的图像; (1)餐饮形象。

代码无效的地方:

1)在“菜单”页面上,它首先打印关闭的DIV标签。然后它再次打印开始然后关闭标签。

2)在About Us页面上,它首先打印关闭DIV,不打印开场DIV。这让我感觉不舒服。

我已经对这件事情进行了数小时和数小时的故障排除,并且无法弄清楚发生了什么。帮助

<div class="page-inner">

<?php

$postname = $post->post_name;
if ($dir = opendir('/home/rowlandwilliams/public_html/lepeep/wp-content/themes/twentythirteen-child/images')) {
    $images = array();
    while (false !== ($file = readdir($dir))) {
        if ($file != "." && $file != "..") {
            $images[] = $file;
            asort($images); // Cause images to appear in ascending order
        }
    }
    closedir($dir);
}

$x = 1; // Set variable to be used in counting post img number
$current_iteration=0; // Set variable for case (below)
$last_iteration=count($images)-1; // Set variable for case last iteration for closing DIV tag

foreach($images as $image) {
    $subimg = substr($image, 0, -4);
    if ($subimg == $postname.$x) { // Check if img name (less .png) matches post name
        if ($x == 1) { // If first pass, add opening DIV tag and set cycler to "active"
        echo '<div class="cycler" id="page-cycler">';
        $actstat = 'class="active"';
    } else {
        $actstat = '';
    }
    $x++;
?>

<img <?php echo $actstat; ?> src="<?php bloginfo('stylesheet_directory'); ?>/images/<?php echo $image; ?>" alt="Le Peep Houston Breakfast & Lunch Restaurant">

<?php } elseif ($subimg == $postname."0") { ?> // If a single image for page, checks to verify it uses "0" in filename
    <div class="cycler" id="page-cycler">
        <img <?php echo $actstat; ?> src="<?php bloginfo('stylesheet_directory'); ?>/images/<?php echo $image; ?>" alt="Le Peep Houston Breakfast & Lunch Restaurant">
<?php } ?>

<?php switch($current_iteration) { ?> // Switch allows for opening and closing statements/HTML
    <?php case 0: ?> // Slot for opening statement, none used however (see semicolon below)

    <?php ; // ?> No statement
    <?php case $last_iteration: ?>
    </div><!-- #page-cycler --> // Closing statement
    <?php break; ?> // End switch
<?php } ?>
<?php $current_iteration++; ?>
<?php } ?>

<?php the_content(); ?> 

</div><!-- #page-inner -->

1 个答案:

答案 0 :(得分:0)

问题的一部分是每个break后需要case语句。否则,它将在打印脚本代码后失败,并在第一次迭代中打印结束语句。 改变

<?php ; // ?> No statement

<?php break; // ?> No statement

可能会删除不需要的结束标记。

在“关于我们”页面上,您只有一个图像,但它的文件名不是以0结尾,而是以1结尾。因此,应该打印开头div的if语句将不会评估为true。 将其更改为

elseif ($subimg == $postname."1")

可能会奏效。