2012-05-17 2 views
0

Я работаю над школьным проектом, чтобы получить rss-каналы из газет и получить их в стиле Masonry. Я могу получить rss-канал для преобразования в html с классом Simplepie, но я хочу дать каждой статье размер столбца от 1 до 5 с помощью счетчика.Для цикла с счетчиком в PHP не работает

Это то, что я получаю в HTML:

<div class="post col1 col2 col3 col4 col5 col1 col2 col3 col4 col5"> <!-- begin post --> 
<h3 class="title"><a href="http://feedproxy.google.com/~r/dso-nieuws-sport/~3/zfFYeKYGagk/detail.aspx">Bergen naar halve finales play-offs basket</a></h3> 

Вместо этого я хочу первую статью, чтобы иметь класс «пост col1», вторую статью «пост col2» и после пяти статей в шестой должен получить "col1" снова и так далее ..

Это мой PHP код:

<?php if ($sportfeed->data): ?> 
<?php $sportitems = $sportfeed->get_items(); ?> 

     <?php foreach($sportitems as $sportitem): ?> 

      <?php $enclosure = $sportitem->get_enclosure(0); ?> 

        <?php if ($enclosure):?> 

        <div class="post 

        <?php $teller = 1; 
          for ($i = 1; $i <= 10 /* aantal artikels in feed */; $i++) { 
          if ($teller == 1) { 

          echo " col1"; 
          ++$teller; 

           } else if ($teller ==2) 
           { 
           echo " col2"; 
           ++$teller; 
           } else if ($teller ==3) 
           { 
           echo " col3"; 
           ++$teller; 
           } else if ($teller ==4) 
           { 
            echo " col4"; 
            ++$teller; 
            } else 
            { echo " col5"; 
            $teller =1; 
            } 

          }?>"> <!-- begin post --> 
        <h3 class="title"><a href="<?php echo $sportitem->get_permalink(); ?>"><?php echo $sportitem->get_title(); ?></a></h3> 
        <img src ="<?php echo $enclosure->get_link(); ?> "class="img_artikel"/> 
        </div> <!-- einde post --> 

        <?php endif; ?> 

     <?php endforeach; ?> 

Большое спасибо! Это значило бы, чтобы мой проект шел.

+0

В чем проблема? Кстати, я никогда раньше не видел нечто вроде '++ $ teller', вы уверены, что это правильно? Стандартом PHP является '$ teller ++' – Sliq

+1

'+ $ teller'. Разница заключается в значении, которое оно возвращает. Если '$ teller' начинается с одного, я верю' echo $ teller ++; 'печатает 1 в то время как' echo ++ $ teller; 'prints 2. – soimon

+0

Нет никакой разницы, когда используется' ++ $ teller' или '$ teller ++' на отдельной линии. Это имеет значение только в том случае, если это часть более крупного выражения, такого как echo или if statements и т. Д. Это все зависит от того, когда он увеличивает число – Recognizer

ответ

0

Попробуйте использовать модуль вместо создания счетчика; $teller = $i % 5 вернет остаток, так что это даст вам число от 0 до 4.

for ($i = 1; $i <= 10 /* aantal artikels in feed */; $i++) { 
    $teller = $i % 5; 

    if ($teller == 0) { 
     echo " col5"; 
    } else { 
     echo " col" . $teller; 
    } 
} 

Должно работать.

0
$teller = 1; 
for ($i = 1; $i <= 10 ; $i++) { 
    if($i%6==0) 
    { 
     $teller=1; 
     echo " col1"; 
    }else{ 
     echo " col".$teller; 
    } 
    $teller++; 
} 
0

Вы используете много <?php и ?> тегов, а вам нужно всего лишь одну пару из них.
Вы также используете endif, endforeach, тогда как } кажется более логичным для меня. Я переформатировать код:

if ($sportfeed->data) 
{ 
    $sportitems = $sportfeed->get_items(); 
    $teller = 1; 
    foreach($sportitems as $sportitem) 
    { 
     $enclosure = $sportitem->get_enclosure(0); 
     if ($enclosure) 
     { 
      echo '<div class="post col' . $teller; 
      $teller = $teller == 5 ? 1 : $teller + 1; 

      echo '"> <!-- begin post --><h3 class="title"><a href="' . $sportitem- >get_permalink(); . '">' . $sportitem->get_title(); . '</a></h3>'; 
      echo '<img src="' . $enclosure->get_link(); . '"class="img_artikel"/></div> <!-- einde post -->'; 
     } 
    } 
} 

Весь цикл for не надо было, если я не понимаю, что вы хотите достичь. Приведенные выше код должен печатать выход, как:

<div class="post col1"> .... </div> 
<div class="post col2"> .... </div> 
<div class="post col3"> .... </div> 
<div class="post col4"> .... </div> 
<div class="post col5"> .... </div> 
<div class="post col1"> .... </div> 
<div class="post col2"> .... </div> 

Надеется, что это помогло :) (я предполагаю, что вы голландский, а кстати, ха-ха)

0
<?php 
if ($sportfeed->data): 
    $sportitems = $sportfeed->get_items(); 
    $i = 1; 
    foreach($sportitems as $sportitem): 
     $enclosure = $sportitem->get_enclosure(0); 
     if ($enclosure): 
      echo '<div class="post'; 
      if ($i % 5 == 0) { 
       echo " col5"; 
      } else { 
       echo " col" . ($i % 5); 
      } 
      echo '"> <!-- begin post -->'; 
?> 
    <h3 class="title"><a href="<?php echo $sportitem->get_permalink(); ?>"><?php echo $sportitem->get_title(); ?></a></h3> 
    <img src ="<?php echo $enclosure->get_link(); ?> "class="img_artikel"/> 
</div> <!-- einde post --> 
     <?php endif; ?> 
     <?php $i++; ?> 
    <?php endforeach; ?> 
<?php endif; ?> 
0

Я думаю, вы почти там но я думаю, что проблема в том, что если teller = 1, тогда вы ввернете его, чтобы он равнялся 2, выполняющему второй блок и т. д., просто попробуйте поместить все это внутри цикла и увеличивать один раз в конце ...

Я думаю, что-то как это будет работать:

<?php $teller = 1;        
for ($i = 1; $i <= 10; $i++) 
{       
    if ($teller == 1) 
    {        
     echo " col1"; 
    } 
    else if ($teller ==2) 
    { 
     echo " col2";         
    } 
    else if ($teller ==3)         
    {         
    echo " col3";   
    } 
    else if ($teller ==4)         
    {          
     echo " col4"; 
       } 
    else          
    { 
    echo " col5"; 
     $teller =1; 
    } 

echo " '>";    
echo"<h3 class='title'> <a href='#'></a></h3>";     
echo"<img src ='#' class='img_artikel'/>";     
echo"</div>"; 
$teller++; 
} 

?>