Domanda

Sto scrivendo il mio componente Joomla (MVC), basato fortemente sul modulo newsflash, perché voglio visualizzare gli ultimi 5 elementi di contenuto in un'interfaccia a schede scorrevole, tutto il duro lavoro è fatto, ma sto realizzando difficile ottenere contenuti dal ciclo for.

Ecco il codice che ho finora 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>

Il primo oggetto deve avere un valore diverso e un oggetto di classe aggiunto all'elemento a: quindi devo essere in grado di identificare qual è il primo oggetto e fare qualcosa durante quel ciclo.

Ho provato a usare l'istruzione $ i = 0 else in default.php, ma per qualche motivo ha provocato un timeout della pagina!

Qualche idea?

È stato utile?

Soluzione

Hai detto di aver provato se $ i = 0 , l'operatore di confronto in PHP è == , con il tuo se hai un ciclo infinito, perché in ogni iterazione assegni 0 a $ i e non raggiunge mai $ n, dovresti farlo all'interno del tuo ciclo :

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

}else{
  // Other Items...

} 

Altri suggerimenti

Penso che @CMS sia corretto.

Potresti anche pensare a gestire il primo oggetto al di fuori del ciclo e lasciare che il ciclo gestisca il resto degli oggetti. In questo modo non è necessario effettuare il controllo su ogni passaggio del ciclo.

Se stai usando un semplice ciclo per , ti consiglio di agire solo sul primo elemento e poi di scorrere il resto come tvanfosson detta . È leggermente più veloce e potenzialmente più facile da leggere ...

doSomethingWithFirst($list[0]);

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

Tendo a usare foreach su per per eseguire il loop su array, in tal caso, utilizzerei un "firstDone" var, in questo modo:

$bFirstTime = true;
foreach($list as $item) {
    if ($bFirstTime) {
        doSomethingWithFirst($item);
        $bFirstTime = false;
    } else {
        doSomethingWithTheRest($item);
    }
}
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top