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 に答える