it-swarm-pt.tech

Adicione classe diferente a divs pares e ímpares

Eu tenho um bloco de PHP código que se parece com isso:

$flag = false;
if (empty($links))
{
    echo '<h1>You have no uploaded images</h1><br />';
}

foreach ($links as $link)
{   
    $extension  = substr($link, -3);
    $image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14);  

    ($delete_submit) ? deleteImage('.' . $image_name, $link) : '';

    echo '<div>';
        echo '<table>';

        echo '<tr><td class="fullwidth"><a class="preview_img" href="' . $link . '"><img src="' . $link . '" title="Click to enlarge" width="300" class="thumb" /></a></td></tr>';

        echo '<tr><td><span class="default">Direct:</span>&nbsp;';
        echo '<input type="text" readonly="readonly" class="link-area" onmouseover="this.select();" value="' . $link . '" />'; 
        echo '</td></tr>';

        echo ($flag) ? '<hr /><br>' : '';

        echo '</table>';
        echo '<br>';
    echo '</div>';

    $flag = true;
}

Eu quero o <div> para incluir uma classe diferente com base em se é par ou ímpar. Se for par, obtém a classe X, se é estranho, obtém a classe Y.

Como faço isso no meu caso? Sou totalmente ignorante e não sei como começar!

20
aborted

Inicialize uma variável $count=0; antes do loop. Em seguida, coloque o seguinte no loop: ++$count%2?"odd":"even".

$count = 0;
foreach ($links as $link)
{   
    $extension  = substr($link, -3);
    $image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14);  

    ($delete_submit) ? deleteImage('.' . $image_name, $link) : '';

    echo '<div class="' . (++$count%2 ? "odd" : "even") . '">';
48
Rob W
[...]
$i++;
echo '<div class="'.($i%2 ? 'odd':'even').'>';
[...]
13
konsolenfreddy

antes do foreach, declare um booleano:

$div_flag = false;

no foreach, onde você faz eco da div, adicione isto:

"class=".( $div_flag ? "'odd'" : "'even'" )

no final do foreach (ou em qualquer lugar dele) adicione isso:

$div_flag = !$div_flag;
5
Andrew Jackman

Se você estiver trabalhando em um site de protótipo, sempre poderá implementar uma solução CSS pura:

div:nth-child(even) { /* Apply even class rules here */ }
div:nth-child(odd) { /* Apply odd class rules here */ }

O motivo pelo qual recomendo que você use isso apenas para sites de protótipos é porque a compatibilidade para :nth-childnão suporta IE8 ou inferior .

5
Wex

Se você estiver usando um navegador moderno, poderá usar CSS com algo parecido com isto em sua folha de estilos.

div:nth-child(odd)
{
  background:#ff0000;
}
div:nth-child(even)
{
  background:#0000ff;
}
1
Brian Hoover

Adicione uma variável para o seu loop.

$c = true;
foreach ($links as $link)
{

$extension  = substr($link, -3);
$image_name = ($extension == 'peg') ? substr($link, -15) : substr($link, -14);  

($delete_submit) ? deleteImage('.' . $image_name, $link) : '';

echo '<div'.(($c = !$c)?' class="odd"':'').">
//echo '<div>';
    echo '<table>';

    echo '<tr><td class="fullwidth"><a class="preview_img" href="' . $link . '"><img src="' . $link . '" title="Click to enlarge" width="300" class="thumb" /></a></td></tr>';

    echo '<tr><td><span class="default">Direct:</span>&nbsp;';
    echo '<input type="text" readonly="readonly" class="link-area" onmouseover="this.select();" value="' . $link . '" />'; 
    echo '</td></tr>';

    echo ($flag) ? '<hr /><br>' : '';

    echo '</table>';
    echo '<br>';
echo '</div>';

$flag = true;
}
1
Ovidiu

Sem contadores:

<?php $toggle_class = 'even';?>
<?php foreach ($links as $link):?>
  <?php $toggle_class = ($toggle_class == 'odd' ? 'even' : 'odd');?>
  <div class="<?php echo $toggle_class;?>">
    Your div content...
  </div>
<?php endforeach;?>
0
fat_mike

Tente algo assim

$count = 0;
foreach($links as link) {
  $count++;
  print ($count % 2 == 1) ? "odd" : "even"; 
}
0
useful