我有一个由页面模板中的图像创建的轮播。对于每个页面,模板将尝试遍历for
并根据需要打印出图像。
我面临的问题是我需要几个部分:
1)如果退回的项目超过1个,请打印此或 2)只需打印一下这个项目。
我的代码:
<?php
//Check for slider
$slideCheck = get_post_meta($post->ID, 'slide1', $single = true);
// if there's a slide
if($slideCheck){ ?>
<section id="myCarousel" class="carousel slide" data-ride="carousel">
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class=""></li>
<li data-target="#myCarousel" data-slide-to="1" class="active"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<div class="carousel-inner">
<?php
$max_slides = 10;
for ($i=1; $i<=$max_slides; $i++){
$key = 'slide' . $i;
$slide = get_post_meta($post->ID, $key, $single = true);
$slide_text = get_post_meta($post->ID, $key . '_label', $single = true);
if($slide){
$class = ($key == 'slide1') ? 'active' : '';
?>
<div class="item <?php echo $class; ?>">
<img src="<?php echo $slide; ?>" class="slider-images" />
<div class="carousel-caption">
<h2><?php if($slide_text) { echo $slide_text; } ?></h2>
</div>
</div>
<?php } // end if
} // end for
?>
</div>
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
</section>
<?php } // end if
?>
部分内容如下:
1)它抓住post meta以查看是否有贴在帖子上的幻灯片
2)如果为true,则启动滑块
3)如果#2为真,我需要<section>
部分打印一次
4)但是,如果有超过1张幻灯片,我需要下一个<ol>
部分才能打印
5)如果#2为真,则<div class="carousel-inner">
打印一次
6)然后for循环打印项目
7)接下来是</div>
关闭#5的旋转木马内部
8)以下<a>
代码我需要像上面的<ol>
一样打印,只有当幻灯片超过1张时才需要。
我把它全部搞定了,但我知道必须有一个更清洁的方法来做到这一点。这是我的尝试:
if($slideCheck){ ?>
<section id="myCarousel" class="carousel slide" data-ride="carousel">
<?php
$max_slides = 10;
for ($i=1; $i<=$max_slides; $i++){
$key = 'slide' . $i;
$slide = get_post_meta($post->ID, $key, $single = true);
$slide_text = get_post_meta($post->ID, $key . '_label', $single = true);
if($slide){
$class = ($key == 'slide1') ? 'active' : '';
if($i>1){
?>
<ol class="carousel-indicators">
<li data-target="#myCarousel" data-slide-to="0" class=""></li>
<li data-target="#myCarousel" data-slide-to="1" class="active"></li>
<li data-target="#myCarousel" data-slide-to="2"></li>
</ol>
<?php } //endif $1>1
if($i=1){
?>
<div class="carousel-inner">
<?php } //endif $i=1
?>
<div class="item <?php echo $class; ?>">
<img src="<?php echo $slide; ?>" class="slider-images" />
<div class="carousel-caption">
<h2><?php if($slide_text) { echo $slide_text; } ?></h2>
</div>
</div>
<?php } //endif $1>1
if($i=1){
?>
</div>
<?php } //endif $i=1
if($i=2){
?>
<a class="left carousel-control" href="#myCarousel" role="button" data-slide="prev">
<span class="glyphicon glyphicon-chevron-left" aria-hidden="true"></span>
<span class="sr-only">Previous</span>
</a>
<a class="right carousel-control" href="#myCarousel" role="button" data-slide="next">
<span class="glyphicon glyphicon-chevron-right" aria-hidden="true"></span>
<span class="sr-only">Next</span>
</a>
<?php } // endif
} // end if
} // end for
?>
</section>
<?php } // end if
?>
正如你所看到的,对于一堆if($i>1)
等似乎非常复杂。必须有一个更清晰的方法和更好的方法来编写它。