0

我正在使用joomla!将一些额外的字段输出到文章中。这些字段是使用 backslider jquery 插件显示的图像列表(最多 10 个)。

这是我使用的有效代码:

<div id="bs0" class="backslider">
    <ul class="bs-slides">
        <?php 
            $img1 = $this->item->extrafields['image_1'];
            $img2 = $this->item->extrafields['image_2'];
            $img3 = $this->item->extrafields['image_3'];
            $img4 = $this->item->extrafields['image_4'];
            $img5 = $this->item->extrafields['image_5'];
            $img6 = $this->item->extrafields['image_6'];
            $img7 = $this->item->extrafields['image_7'];
            $img8 = $this->item->extrafields['image_8'];
            $img9 = $this->item->extrafields['image_9'];
            $img10 = $this->item->extrafields['image_10'];
        ?>
        <?php if($img1) { ?>
        <li><img src="<?php echo $img1; ?>"></li>
        <?php } ?>
        <?php if($img2) { ?>
        <li><img src="<?php echo $img2; ?>"></li>
        <?php } ?>
        <?php if($img3) { ?>
        <li><img src="<?php echo $img3; ?>"></li>
        <?php } ?>
        <?php if($img4) { ?>
        <li><img src="<?php echo $img4; ?>"></li>
        <?php } ?>
        <?php if($img5) { ?>
        <li><img src="<?php echo $img5; ?>"></li>
        <?php } ?>
        <?php if($img6) { ?>
        <li><img src="<?php echo $img6; ?>"></li>
        <?php } ?>
        <?php if($img7) { ?>
        <li><img src="<?php echo $img7; ?>"></li>
        <?php } ?>
        <?php if($img8) { ?>
        <li><img src="<?php echo $img8; ?>"></li>
        <?php } ?>
        <?php if($img9) { ?>
        <li><img src="<?php echo $img9; ?>"></li>
        <?php } ?>
        <?php if($img10) { ?>
        <li><img src="<?php echo $img10; ?>"></li>
        <?php } ?>
    </ul>
</div>

我不是 php 专家,但有没有更好的方法来优化此代码,我想也许将 $img 变量放入数组并使用 foreach 循环输出每个列表项?

一点帮助不会错过:)

4

3 回答 3

3

只需遍历它们并使用索引来引用数组索引:

for ($i = 1; $i <= 10; ++$i) {
    if (!empty($this->item->extrafields["image_$i"])) {
         echo '<li><img src="', htmlspecialchars($this->item->extrafields["image_$i"]), '"></li>';
    }
}

假设有多达 10 个项目要调查。

于 2012-10-19T09:42:05.690 回答
1

下面的解决方案将避免评估字符串,尽可能缓存所有内容,以保持应用程序平稳运行,并保持代码整洁。

<div id="bs0" class="backslider">
    <ul class="bs-slides">
        <?php
        // Generate length of our image array / store known length of array
        $images = 10;

        // Loop through images
        for( $i = 1; $i <= $images; $i++ ) {
            // Store it for optimization sake.
            $field = $this->item->extrafields['image_' . $i];

            // Check it's not empty
            if( !empty( $field ) ) {

                // If not, print to browser
                printf(
                    '<li><img src="%s" alt=""></li>',
                    htmlspecialchars($field)
                );
            }
        }
        ?>
    </ul>
</div>
于 2012-10-19T09:44:54.523 回答
0

我认为这段代码会做同样的事情。

<div id="bs0" class="backslider">
    <ul class="bs-slides">
        <?php 
            for($i = 1; $i <= 10; $i++)
            {
                $img = $this->item->extrafields['image_'.$i]
                  if($img) { ?>
                      <li><img src="<?php echo $img; ?>"></li>
              <?php } 
           }
         ?>
    </ul>
</div>
于 2012-10-19T09:47:29.690 回答