2013-12-18 126 views
0

我有这样的HTML代码:PHP而()包装项目

<div class="row elem2"> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 
<div class="row elem4"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 
<div class="row elem3"> 
    <div class="item"></div> 
    <div class="item"></div> 
    <div class="item"></div> 
</div> 

,我正在寻找一种方式来实现它在我的PHP而(WordPress的)。 的同时是

while (have_posts()) : the_post(); 
    echo '<div class="item"></div>'; 
endwhile; 

我已经尝试了很多东西,但没有奏效。我需要每2项划分,并把它们放在一个包装<div class="row elem2">后,未来4项<div class="row elem4">后,未来3项<div class="row elem3">

我做了很多的搜索,但我甚至不知道该怎么搜索。

+0

如何在循环的每次迭代中增加一个计数器?你检查第二,第六和第九个元素。一旦它达到9,你就将它设回0.然后你可以很容易地插入'

' and '
'。尝试实施它,并告诉我们你得到什么,以防万一你没有得到它的工作。 –

回答

1

有点粗糙,但这里有一个解决方案

$i = 0; // Number of items made so far in the row 
$mode = 0; // Current row type enumerated by $elem 
$elem = array(2,4,3); // Enumeration of the desired row sizes 
while (have_posts()) : the_post(); 
    // Make a new row when there's no items yet 
    if ($i == 0) echo '<div class="row elem'. $elem[$mode] .'">'; 
    echo '<div class="item"></div>'; 
    $i++; 
    // Once the items in the current row has reached the row's maximum size 
    if ($i % $elem[$mode] == 0): 
     echo '</div>'; 
     $i = 0; // Reset items made for the row back to 0 
     $mode = ($mode + 1) % 3; // Increment mode and wrap if necessary 
    endif; 
endwhile; 
if ($i > 0) echo '</div>'; // Finish the last row if it wasn't finished 

这就是modulos是为建!

+0

工程就像一个魅力!谢谢! 我几乎可以得到更多类似意大利面代码的代码,但仍需要考虑如何解决:如果最后一个“elem2”,“elem3”,“elem4”分别具有1,2或3个元素:( – dev

+0

我在想使用'next()'来遍历'$ elem'变量,但是我不确定它是否会在到达结尾时返回到第一个元素。如果这个答案适用于您,请将它标记为已接受:) – sjagr

+0

我做了标记,再次感谢。我有点新手在这里:) – dev