usando tabla sencillo inteligente hacer criterios como colores busqueda buscar buscador bootstrap avanzado alternar php html css colors

tabla - La forma más fácil de alternar colores de filas en PHP/HTML?



busqueda inteligente php mysql (19)

En un lado noe, para alternar entre dos valores a y b , una buena manera de hacerlo en un bucle es esta:

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

También puedes hacer esto sin sumas y restas:

x = a ^ b ^ x;

donde ^ es la operación XOR.

Si solo quiere alternar entre 0 y 1, puede hacer esto:

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

Por supuesto, puede usar x como un índice de colores, clases de estilo CSS, etc.

Aquí hay un ejemplo de PHP mío. ¿Alguien puede encontrar una manera más corta / más fácil de hacer esto?

<? foreach($posts as $post){?> <div class="<?=($c++%2==1)?‘odd’:NULL?>"> <?=$post?> </div> <? }?> <style> .odd{background-color:red;} </style>

También sería divertido ver ejemplos en otros idiomas.


Es lo suficientemente corto como lo es, pero probablemente lo envolvería en alguna función auxiliar con un nombre claro. De esta forma, es más obvio lo que está sucediendo y no tendrá que repetir esa lógica en todas las plantillas donde lo necesite.


Fundamentalmente - no. Eso es lo más fácil posible. Puede volver a escribirlo un poco más corto / más limpio, pero la idea será la misma. Así es como lo escribiría:

$c = true; // Let''s not forget to initialize our variables, shall we? foreach($posts as $post) echo ''<div''.(($c = !$c)?'' class="odd"'':'''').">$post</div>";


Puede encapsular la lógica de la siguiente manera:

<?php class ListCycler { private $cols, $offs, $len; // expects two or more string parameters public function __construct() { $this->offs = -1; $this->len = func_num_args(); $this->cols = func_get_args(); foreach($this->cols as &$c) $c = trim(strval($c)); } // the object auto-increments every time it is read public function __toString() { $this->offs = ($this->offs+1) % $this->len; return $this->cols[ $this->offs ]; } } ?> <html> <head> <style> ul#posts li.odd { background-color:red; } ul#posts li.even { background-color:white; } </style> </head> <body> <div> <h3>Posts:</h3> <ul id="posts"><?php $rc = new ListCycler(''odd'',''even''); foreach($posts as $p) echo "<li class=''$rc''>$p</li>"; ?></ul> </div> </body> </html>


Si desea hacerlo en la pantalla y se siente cómodo o ya utiliza javascript, las bibliotecas como jQuery a menudo tendrán : impar y : incluso selectores, que luego puede conectar para agregar propiedades de estilo específicas o enganchar en CSS de manera más general agregando clases .


Smarty lo tiene incorporado:

{section name=rows loop=$data} <tr class="{cycle values="odd,even"}"> <td>{$data[rows]}</td> </tr> {/section}

Lo mismo ocurre con Django:

{% for o in some_list %} <tr class="{% cycle ''row1'' ''row2'' %}"> ... </tr> {% endfor %}


Tal vez una función con una variable estática?

<?php function alternate_row_color($css_class) { static $show = true; $show = !$show; if ($show) { return $css_class; } else { return NULL; } } ?>

Luego para usarlo (usando tu ejemplo):

<?php foreach($posts as $post) { ?> <div class="<?=alternate_row_color(''odd'')?>"> <?=$post?> </div> <?php } ?>


Usando CSS3 puedes hacer algo como esto:

div:nth-child(odd) { background-color: red }

Pero mejor no usar eso por unos años si realmente quieres que tus usuarios vean el color ...


<?php $alt = true; foreach ($posts as $post): $alt = !$alt; ?> <div<?php echo $alt ? '' class="odd"'' : ''''; ?>> <!-- Content --> </div> <?php endforeach ?>

Sería la forma más simple y clara de hacerlo.


He estado usando algo como esto:

<?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";


siempre llamo a mis filas de cebra "row0" y "row1" - esto hace que el código sea un poco más simple.

<?php // you should always use the full opening tag for compatibility $i = 0; foreach ($rows as $row) { echo ''<tr class="row'' . ($i++ % 2) . ''">...</tr>''; } ?>


Solo por diversión

Asumiendo que puede usar selectores de CSS3, puede hacer algo como

<div class="posts"> <? foreach($posts as $post){?> <div> <?=$post?> </div> <? }?> </div> <style> div.posts div:odd{background-color:red;} </style>

Incluso con soporte de CSS2 y mootools (biblioteca de JavaScript) puede sustituir el estilo con este javascript

<script type="text/javascript"> // obviously this script line should go in a js file in a onload (or onDomReady) function $$(''div.posts div:odd'').setStyle(''background-color'',''red''); </script>

Si no tiene nada más que php a, puede simplificar un poco su código usando una matriz

<? $isodd=array('''',''odd''); $c=0; foreach($posts as $post){?> <div class="<?=$isodd[$c++%2]?>"> <?=$post?> </div> <? }?>


Una pequeña función simple que funciona bien para mí.

<?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>


function row_color($cnt,$even,$odd) { echo ($cnt%2) ? "<tr bgcolor=/"$odd/">" : "<tr bgcolor=/"$even/">"; }

Cómo utilizar:

$cnt=0; while ($row = mysql_fetch_array ($result)) { row_color($cnt++,"e0e0e0","FFFFFF"); }


Puede abusar del alcance $ GLOBAL para almacenar el estado de clase seleccionado actual, consulte la función table_row_toggle () a continuación. Sí, sé que es sucio abusar del alcance de $ GLOBAL, pero hey, estamos aquí para solucionar los problemas, ¿no es así? :)

Llamar a la función de alternancia de filas de la tabla en HTML:

<tr <? table_row_toggle(); ?>>

La función en 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 . ''"''; }


<?php ($i%2==1) ? $bgc=''#999999'' : $bgc=''#FFFFFF''; ?> ''<div bgcolor=" bgcolor=''.$bgc.''">'';


En PHP estoy usando este código:

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 */

Fuente: http://sklueh.de/2013/11/einfache-alternierung-mit-php/


Si desea tener menos PHP en línea, una buena forma de hacerlo es a través de JavaScript.

Usando jQuery, es simplemente:

<script type="text/javascript"> $(''div:odd'').css(''background-color'', ''red''); </script>


Mancha en Vilx pero, siempre es mínimo para la velocidad (peso de la página)

<tr class="''.(($c = !$c)?''odd'':''even'').''">