2

私は独自の Joomla コンポーネント (MVC) を作成しています。これは、newsflash モジュールに大きく基づいています。最新の 5 つのコンテンツ項目をスライド式のタブ付きインターフェイスに表示したいためです。すべてのハードワークは完了していますが、コンテンツを取得するのは非常に困難です。 forループの外。

ここに私がこれまでに持っているコードがあります 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>

最初の項目には異なる値が必要で、a: 項目にクラス項目を追加する必要があるため、どちらが最初の項目であるかを識別し、そのループ中に何かを実行できるようにする必要があります。

default.php で if $i = 0 else 文を使おうとしたのですが、なぜかページタイムアウトになってしまいました!

何か案は?

4

3 に答える 3

4

あなたは言った、あなたが試しif $i = 0た、PHPの比較演算子==は、無限ループがある場合、各反復で $i に 0 を割り当て、$n に到達しないため、ループ内で実行する必要があります。

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

}else{
  // Other Items...

} 
于 2008-10-26T18:17:52.823 に答える
2

@CMS が正しいと思います。

また、ループの外側で最初の項目を処理し、ループに残りの項目を処理させることも考えたい場合があります。この方法では、ループを通過するたびにチェックを行う必要はありません。

于 2008-10-26T18:18:47.627 に答える
1

単純なループを使用している場合は、 tvanfossonが言っforたように、最初の項目に作用してから残りをループすることをお勧めします。少し速くなり、読みやすくなる可能性があります...

doSomethingWithFirst($list[0]);

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

foreach私は配列をループするためにoverを使用する傾向がありforます。その場合、次のように「firstDone」var を使用します。

$bFirstTime = true;
foreach($list as $item) {
    if ($bFirstTime) {
        doSomethingWithFirst($item);
        $bFirstTime = false;
    } else {
        doSomethingWithTheRest($item);
    }
}
于 2008-10-26T22:54:22.203 に答える