2011-12-16 25 views
15

Mam bloku kodu PHP, który wygląda tak:Dodaj inną klasę do parzystych i nieparzystych DIV

$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; 
} 

chcę <div> zawierać inną klasę oparciu jeśli jest parzyste, czy nieparzyste. Jeśli jest równy, dostaje klasę X, jeśli jest dziwna, dostaje klasę Y.

Jak mam to zrobić w moim przypadku? Jestem całkowicie nieświadoma i nie wiem jak zacząć!

Odpowiedz

42

Inicjalizuj zmienną $count=0; przed pętlą. Następnie umieść następujące elementy w pętli: ++$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") . '">'; 
1

Jeśli używasz nowoczesnej przeglądarki, można użyć CSS z czymś takim w swoim arkuszu stylów.

div:nth-child(odd) 
{ 
    background:#ff0000; 
} 
div:nth-child(even) 
{ 
    background:#0000ff; 
} 
+0

+1 za edukowanie mi o nową funkcję. :) –

+0

Jak napisałem w mojej odpowiedzi, należy pamiętać o ograniczonej zgodności przeglądarki tego selektora CSS3. – Wex

5

przed foreach, zadeklarować wartość logiczną:

$div_flag = false; 

w foreach, gdzie echo div dodać to:

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

w końcu foreach (lub gdziekolwiek w tym, naprawdę) dodaj to:

$div_flag = !$div_flag; 
0

Wypróbuj coś takiego:

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

Dodaj zmienną do swojej pętli.

$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; 
} 
4

Jeśli pracujesz w miejscu prototypu, zawsze można wdrożyć czystego roztworu CSS:

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

Powodem I zaleca, aby korzystać z tego tylko dla stron prototyp bo zgodności dla :nth-childdoes not support IE8 or below.

+1

+1 Wiem, że obsługa przeglądarki nie jest całkiem idealna, ale CSS> po stronie serwera dla logiki wyświetlania – rdlowrey

0

Bez liczniki:

<?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;?> 
Powiązane problemy