Самый простой способ чередовать цвета строк в PHP / HTML? - PullRequest
26 голосов
/ 30 декабря 2008

Вот мой пример PHP. Может кто-нибудь найти более короткий / простой способ сделать это?

<? foreach($posts as $post){?>
    <div class="<?=($c++%2==1)?‘odd’:NULL?>">
        <?=$post?>
    </div>
<? }?>

<style>
    .odd{background-color:red;}
</style>

Примеры на других языках также было бы интересно посмотреть.

Ответы [ 19 ]

1 голос
/ 18 января 2013
    <?php   ($i%2==1) ? $bgc='#999999' : $bgc='#FFFFFF'; ?>
    '<div bgcolor=" bgcolor='.$bgc.'">';
1 голос
/ 27 июня 2010
function row_color($cnt,$even,$odd) { 
echo ($cnt%2) ? "<tr bgcolor=\"$odd\">" : "<tr bgcolor=\"$even\">"; 
} 

Как использовать:

$cnt=0;
while ($row = mysql_fetch_array ($result)) {
row_color($cnt++,"e0e0e0","FFFFFF");
}
1 голос
/ 26 августа 2012

Вы можете использовать область $ GLOBAL для хранения текущего выбранного состояния класса, см. Ниже функцию table_row_toggle (). Да, я знаю, что неправильно злоупотреблять областью действия $ GLOBAL, но мы здесь, чтобы исправить проблемы, не так ли? :)

Вызов функции переключения строк таблицы в HTML:

<tr <? table_row_toggle(); ?>>

Функция в PHP:

/* function to toggle row colors in tables */
function table_row_toggle() {
    /* check if $trclass is defined in caller */
    if(array_key_exists('trclass', $GLOBALS)) {
        $trclass = $GLOBALS['trclass'];
    }   

    /* toggle between row1 and row2 */
    if(!isset($trclass) || $trclass == 'row2') {
        $trclass = 'row1';
    } else {
        $trclass = 'row2';
    }   

    /* set $trclass in caller */
    $GLOBALS['trclass'] = $trclass;

    /* write the desired class to the caller */
    echo ' class="' . $trclass . '"';
}
1 голос
/ 30 декабря 2008

Он достаточно короткий, но я бы, вероятно, обернул его в какую-нибудь вспомогательную функцию с ясным именем. Таким образом, становится более очевидным, что происходит, и вам не придется повторять эту логику во всех шаблонах, где вам это нужно.

1 голос
/ 30 декабря 2008

На стороне нет, чтобы переключаться между двумя значениями a и b , хороший способ сделать это в цикле это:

x = a;
while ( true ) {
    x = a + b - x;
}

Вы также можете сделать это без сложения и вычитания:

x = a ^ b ^ x;

, где ^ - операция XOR.

Если вы просто хотите переключаться между 0 и 1, вы можете сделать это:

x = 0;
while ( true ) {
    x = !x;
}

Конечно, вы можете использовать x в качестве указателя цветов, классов стилей CSS и т. Д.

1 голос
/ 30 декабря 2008

Если вы хотите сделать это на дисплее и вам удобно или иным образом уже используется javascript, библиотеки, такие как jQuery, часто будут иметь : нечетные и : четные селекторы, которые вы затем можно подключиться к добавлению определенных свойств стиля или подключиться к CSS в более общем смысле путем добавления классов .

0 голосов
/ 08 ноября 2013

В PHP я использую этот код:

function alternate($sEven = "even", $sOdd = "odd")
{
    static $iCount;
    return ($iCount++ & 1) ? $sOdd :$sEven;
}

for($i = 0; $i< 5; $i++)
echo alternate();


/*output:

even
odd
even
odd
even

*/

Источник: http://sklueh.de/2013/11/einfache-alternierung-mit-php/

0 голосов
/ 27 апреля 2011

Простая маленькая функция, которая хорошо работает для меня.

 <?php 
class alternating_rows()
{
    private $cycler = true;
//------------------------------------------------------------------------------
    function rowclass($row0,$row1)
    {
        $this->cycler = !$this->cycler;//toggle the cycler
        $class=($this->cycler)?$row0:$row1;
        return $class;
    }// end function rowclass
//------------------------------------------------------------------------------    

}//end class alternating rows
?>
<?php $tablerows= new alternating_rows();?>
<table>
  <tr>
    <th scope="col">Heading 1</th>
    <th scope="col">Heading 2</th>
  </tr>
  <?php foreach ($dataset as $row){?>
  <tr class="<?php echo $tablerows->rowclass("oddrow","evenrow"); ?>">
    <td>some data</td>
    <td>some more data</td>
  </tr>
  <?php } //end foreach?>
</table> 
0 голосов
/ 31 декабря 2008

Использовал что-то вроде этого:

<?php
function cycle(&$arr) {
    $arr[] = array_shift($arr);
    return end($arr); 
}

$oddEven = array('odd', 'even');
echo cycle($oddEven)."\n";
echo cycle($oddEven)."\n";
echo cycle($oddEven)."\n";
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...