Я пишу свой собственный компонент Joomla (MVC), в значительной степени основанный на модуле новостей, потому что я хочу отображать последние 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:, поэтому мне нужно иметь возможность определить, какой элемент является первым, и что-то сделать в этом цикле.
Я попытался использовать оператор if $ i = 0 else в default.php, но по какой-то причине это привело к тайм-ауту страницы!
Есть идеи?






Вы сказали, что пробовали if $i = 0, оператор сравнения в PHP - это ==, с вашим, если у вас есть бесконечный цикл, потому что на каждой итерации вы присваиваете 0 для $ i, и он никогда не достигает $ n, вы должны сделать внутри своего цикла:
if ($i == 0){
// First Item here...
}else{
// Other Items...
}
Я наградил вас правильным ответом, хотя у Тванфоссена была хорошая идея. Но вы указали на основную ошибку: двойное равенство, которое страшно. Я узнал об этом и не могу поверить, что упустил это !! Спасибо, что указали на это!
Я думаю, что @CMS верна.
Вы также можете подумать об обработке первого элемента вне цикла и позволить циклу обрабатывать остальные элементы. Таким образом, вам не нужно выполнять проверку при каждом прохождении цикла.
tvanfosson, хорошая идея, но мне нужно использовать тот же список элементов позже на той же странице, поэтому я не могу ничего отключить, хотя я попытался скопировать его и отключить, но это испортило mktime !! В любом случае большое спасибо,
Я просто хотел, чтобы индекс цикла начинался с 1, а не с 0. Сделайте первый элемент до начала цикла.
Если вы используете простой цикл for, я бы рекомендовал просто воздействовать на 1-й элемент, а затем прокручивать остальные как tvanfossonсказал. Это немного быстрее и потенциально легче читается ...
doSomethingWithFirst($list[0]);
for ($i = 1; $i < count($list); $i++) {
doSomethingWithTheRest($list[$i]);
}
Я предпочитаю использовать foreach вместо for для циклического перебора массивов, и в этом случае я бы использовал переменную "firstDone", например:
$bFirstTime = true;
foreach($list as $item) {
if ($bFirstTime) {
doSomethingWithFirst($item);
$bFirstTime = false;
} else {
doSomethingWithTheRest($item);
}
}
Не приведет ли использование старого трюка 0 == $ i к ошибке интерпретатора, чтобы этот старый трюк C также стал полезной парадигмой для PHP?