Форум. Чередование цветов.

Andius

Guest
Форум. Чередование цветов.

Мне необходимо сделать чередование цветов(background) у сообщений в форуме при просмотре темы.
Когда не было ветвления все было нормально.
Был обычный цикл и, если i делится на 2, то цвет такой-то, если же не делится, то другой.

Сейчас же ветвление функционирует за счет использования рекурсивных функций.

И чередование не работает. Точнее очень глючит.

Что делать?
 

Sergy

Guest
можно использовать некоторую глобальную переменную в которой хранить чет/нечет
 

crocodile2u

http://vbolshov.org.ru
PHP:
<?php
define("MAX_RECURSION_LEVEL", 10);
function recursive() {
    static $recursion_level = 0;
    echo ($recursion_level%2 ? "Odd<br/>" : "Even<br/>");
    ++$recursion_level;
    if ($recursion_level > MAX_RECURSION_LEVEL) {
        return ;
    }
    recursive();
}
recursive();
?>
Использовать статическую переменную в данном случае лучше, нежели глобальную.
 

Andius

Guest
Ну представим, что я все-таки использую глобальную переменную.

Сейчас функция выглядит примерно так:

function show($givethid,$uniq,$conn) {
global $i;
$sqleye = "select * from forum where thread = \"$givethid\" and parent = \"$uniq\"";
$reseye = mysql_query($sqleye,$conn);
while($row9 = mysql_fetch_array($reseye)) {
include("funcshow.php");
show($inthread,$inid,$conn);
$i++;
}
}

файл funcshow.php содержит код, который и показывает каждое сообщение. Там написано вот что:

if($i%2) {$cl = "col1";}
else {$cl = "col2";}

Но все-равно ничего не работает... такое ощущение, что background выбирается в случайном порядке.
Что в этом случае делать? Или все должно работать?
 

Фанат

oncle terrible
Команда форума
инклюд в цикле в рекурсии.
За такое надо памятник ставить. при жизни. посмертный.
 

Andius

Guest
Так что делать то?
Неужели никто с таким не встречался?
 

Фанат

oncle terrible
Команда форума
С каким таким?
с чередованием? сталкивались. И тебе уже сказали, как сделать.
с тем, что скрипт не работает?
По ссылке , которую тебе дали тремя сообщениями выше, на этот вопрос дан подробный и исчерпывающий ответ.

файл funcshow.php содержит код, который и показывает каждое сообщение. Там написано вот что:
if($i%2) {$cl = "col1";}
else {$cl = "col2";}
с какой стати этот код в файле, а не в функции, которая и занимается выводом?
 

Andius

Guest
Ладно, я убрал ту проверку из funcshow.php и добавил ее в функцию(рекурсию)
Теперь она выглядит так:

function show($givethid,$uniq,$conn) {
global $i;
$sqleye = "select * from forum where thread = \"$givethid\" and parent = \"$uniq\"";
$reseye = mysql_query($sqleye,$conn);
while($row9 = mysql_fetch_array($reseye)) {
if($i%2) {$cl = "col1";}
else {$cl = "col2";}
include("funcshow.php");
show($inthread,$inid,$conn);
$i++;
}
}


При таком виде дерева:

mess 1
mess 2
mess 3
mess 4
mess 5
mess 6
mess 7

$i у сообщения почему-то идут в следующем порядке:

1 mess 1
1 mess 2
2 mess 3
2 mess 4
3 mess 5
4 mess 6
6 mess 7

Странно, да? Хотя больше нигде эта переменная не используется.
 

SiMM

Новичок
> $i у сообщения почему-то идут в следующем порядке:
А при чём здесь $i, если тебя должен интересовать $cl?

> Хотя больше нигде эта переменная не используется.
Почему-то я имею склонность тебе не верить.
 

Andius

Guest
Как это при чем? $cl зависит от $i ведь.

Переменная действительно больше нигде не используется - пробовал заменять другой буквой - тот же самый эффект.

-~{}~ 13.02.05 10:58:

Проблема решена.

Просто надо было писать не

show($inthread,$inid,$conn);
$i++;

а

$i++;
show($inthread,$inid,$conn);


Вот и все! :)

Всем спасибо!
 

SiMM

Новичок
> Проблема решена.
Шаман... Проблема у тебя не решена - просто ты закрываешь на неё глаза, потому что разобраться не в состоянии.
 

Andius

Guest
Почему же?
Ведь я же нашел ошибку? И теперь все работает.
Так что не надо наездов.
 
Сверху