Pregunta

Estoy escribiendo mi propio componente Joomla (MVC), que se basa en gran medida en el módulo de flash de noticias, porque quiero mostrar los últimos 5 elementos de contenido en una interfaz con pestañas deslizantes, todo el trabajo duro está hecho, pero estoy teniendo Es difícil obtener contenido fuera del bucle for.

Aquí está el código que tengo hasta ahora default.php

<ul id="handles" class="tabs">
    <?php for ($i = 0, $n = count($list); $i < $n; $i ++) :
            modSankeSlideHelper::getTabs($list[$i]);
     endfor; ?>                
<li class="end"></li>
</ul>

helper.php

function getTabs(&$item)
{
    global $mainframe;

    $item->created     = $item->created;

    list($year, $month, $day) = split("-", $item->created);
    $tabdate = date('d\/m\/y', mktime(0, 0, 0, $month, $day, $year));

    require(JModuleHelper::getLayoutPath('mod_sankeslide', '_tab'));
}

_tab.php

<li><a href="#tab"><span><?php echo 'Shout ' . $tabdate; ?></span><b></b></a></li>

El primer elemento debe tener un valor diferente y un elemento de clase agregado al elemento a: por lo tanto, debo poder identificar cuál es el primer elemento y hacer algo durante ese ciclo.

Intenté usar la instrucción if $ i = 0 else en el archivo default.php, ¡pero por alguna razón, se produjo un tiempo de espera de página!

¿Alguna idea?

¿Fue útil?

Solución

Dijiste que intentaste si $ i = 0 , el operador de comparación en PHP es == , con su si tiene un bucle sin fin, porque en cada iteración asigna 0 a $ i, y nunca llega a $ n, debe hacerlo dentro de su bucle :

if ($i == 0){
  // First Item here...

}else{
  // Other Items...

} 

Otros consejos

Creo que @CMS es correcto.

Es posible que también desee pensar en manejar el primer elemento fuera del bucle y dejar que el bucle maneje el resto de los elementos. De esta manera, no tiene que realizar la comprobación de cada paso a través del bucle.

Si está utilizando un bucle simple para , recomendaría simplemente actuar sobre el primer elemento y luego recorrer el resto como tvanfosson dijo . Es un poco más rápido y potencialmente más fácil de leer ...

doSomethingWithFirst($list[0]);

for ($i = 1; $i < count($list); $i++) {
    doSomethingWithTheRest($list[$i]);
}

Tiendo a usar foreach sobre para para hacer un ciclo sobre los arreglos, en cuyo caso, usaría " firstDone " var, así:

$bFirstTime = true;
foreach($list as $item) {
    if ($bFirstTime) {
        doSomethingWithFirst($item);
        $bFirstTime = false;
    } else {
        doSomethingWithTheRest($item);
    }
}
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top