2012-10-19 95 views
0

我正在使用joomla!將一些額外的字段輸出到文章中。這些字段是使用backslider jquery插件顯示的圖像列表(最多10個)。優化項目清單的php代碼

這裏是我使用的代碼工作:

<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循環來輸出每個列表項?

一點幫助也不會走了錯過:)

回答

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> 
+0

非常感謝 – Rob

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個項目進行調查。

+1

循環從1開始:) –

+0

絕對正確:)固定! –

+1

如果只上傳9張,會顯示blonk幻燈片嗎?有沒有一種測試方法來顯示列表項目只有當它有一個圖像? – Rob

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>