使用php将类添加到li然后在每三个项目之后交替?

时间:2012-06-29 00:33:23

标签: php css addclass

这可能是非常简单的,但我想找出一种方法将类添加到无序列表中,然后在每三个项之后替换该类..

我只是在每三个项目上添加一个课程(这不是我想要的),但这是我的代码:

<?php $i=1; foreach($this->items as $item) : ?>
      <li class="<?php if ($i % 3 == 0) : ?>odd<?php endif; ?>"><a href="<?php echo $linky; ?>">xxx</a></li>
<?php $i++; endforeach; ?>

哪个吐出来:

<li class="">xxx</li>
<li class="">xxx</li>
<li class="odd">xxx</li>
<li class="">xxx</li>
<li class="">xxx</li>
<li class="odd">xxx</li>

但我希望得到的是:

<li class="odd">xxx</li>
<li class="odd">xxx</li>
<li class="odd">xxx</li>
<li class="even">xxx</li>
<li class="even">xxx</li>
<li class="even">xxx</li>

等等..通常我会用jquery做这样的事情,但我必须在这种情况下使用php ..任何帮助都将非常感激:)

6 个答案:

答案 0 :(得分:5)

使用每次$i % 3 == 0

时翻转(否定)的布尔标志
// Start with 0 instead of 1
$i=0;
// Flag starts TRUE
$state = TRUE;
foreach ($this->items as $item) {
  if ($i % 3 === 0) {
    // Flip to opposite state
    $state = !$state;
  }
  ?>
  <li class="<?php if ($state) : ?>odd<?php else: ?>even<?php endif; ?>"><a href="<?php echo $linky; ?>">xxx</a></li> 
  <?php
  $i++;
}

Here is a demonstration。虽然您需要检查输出以查看类更改。

答案 1 :(得分:2)

你使用了错误的操作符。

if ($i % 3 == 0)

表示“如果$ i除以3的余数为0”。

你想要的是

if (floor($i/3) == 0).

试一试,看看它是怎么回事。

编辑:您似乎也错过了“其他”代码。如果你没有这个,它就不会为非'''类写'偶'。

编辑编辑:如果您希望图案继续,请使用:

if ((floor($i/3) % 2) == 0).

答案 2 :(得分:2)

我假设您希望第7项“奇怪”?我写了JavaScript,但应该很容易转换为PHP

Demo

for (var i = 0; ​i < 15; i++) {
    if(i%6 < 3) {
document.write("odd<br>");
    }
    else {
document.write("even<br>")     
    }        
}​

将您的代码更改为:

<?php $i=0; foreach($this->items as $item) : ?>
      <li class="<?php if ($i % 6 < 3) : ?>odd<?php else: ?>even<?php endif; ?>"><a href="<?php echo $linky; ?>">xxx</a></li>
<?php $i++; endforeach; ?>

答案 3 :(得分:1)

另一种方法是使用新的CSS3选择器,允许您定位奇数和偶数子。

以下是一个示例链接。基本上,你的名单就像平常一样。

<ul>
<li></li>
<li></li>
</ul>

然后你可以使用像这样的新选择器,而不是让一个名为odd的类,甚至使用不同的样式......

li:nth-child(even) { background: #fff; }
li:nth-child(odd) { background:#000; }

这将使所有偶数列表项都具有#fff的背景和所有具有#000背景的奇数列表项。

编辑:您可以使用其他几个CSS3选择器,仅使用第一个孩子和第二个孩子来定位前两个之后的偶数和赔率。

答案 4 :(得分:0)

尝试在for循环中为每个循环嵌套a。外循环告诉迭代多少次,内循环告诉奇数和偶数多少次。

答案 5 :(得分:0)

您只打印循环的每三次迭代的原因是您使用模数运算符"%"来测试我是否可以被三($i % 3 == 0)整除。这导致仅当$ i可被3整除时才打印。

解决您的问题:

<?php
$odd = "<li class='odd'>";
$even = "<li class='even'>";
$i = 0;

foreach($this->items as $item)
{
  if($i < 3)
    echo $odd . $item . "</li>";
  else if($i >= 3)
    echo $even . $item . "</li>";
  $i++;
  if($i > 5)
    $i = 0;
}
?>

请注意,由于$ i从0开始,前3个项目将被索引为0 - 2,后续3个项目将被编入索引3 - 5.