|
|
|
| Здравствуйте!
Написал свой первый класс, который должен выводить ссылки на смежные записи (т.е. ближайшие по ID к текущей). Написал класс небольшой:
class Controls {
private $Next = 'Следующая новость';
private $Prev = 'Предыдущая новость';
function GetPoles ($way = 'DESC'){
$q = mysql_query("SELECT `id` FROM `news` ORDER BY `id` ".$way." LIMIT 1");
if($q){
if(mysql_num_rows($q) > 0){
return mysql_result($q, 0);
}
else return false;
}
else echo mysql_error();
}
function FindID ($currentID, $flag = 1){
if($flag == 1) $id_val = $currentID+1;
else $id_val = $currentID-1;
$q = mysql_query("SELECT `id` FROM `news` WHERE `id` = ".$id_val);
if($q){
if(mysql_num_rows($q) == 0){
if($currentID == $this->GetPoles("ASC")) $this->FindID($id_val, 0);
elseif($currentID == $this->GetPoles("DESC")) $this->FindID($id_val);
else $this->FindID($id_val, $flag);
}
else {
return mysql_result($q, 0);
}
}
else echo mysql_error();
}
function putControls($ID){
if($ID != $this->GetPoles("DESC")) echo '<span class="prev">'."<a href=\"news_1_".$this->FindID($ID, 1).".htm\"><<<".$this->Next."</a>".'</span>';
if($ID != $this->GetPoles("ASC")) echo '<span class="next">'."<a href=\"news_1_".$this->FindID($ID, 0).".htm\">".$this->Prev.">>></a>".'</span>';
}
}
//назначаем класс
$controls = new Controls();
$controls->putControls(63);
|
Загвозтка происходит в методе FindID. Суть там в том, чтобы определить, является ли текущий ID первым или последним, а также, существует ли смежный ID вообще (бывает же так, что запись удаляют, а база продолжает свой ауто_инкремент), и если не существует, то попробовать еще +1. И вот, когда ближайший по значению ID найден, значение не возвращается через return, хотя если радом поставить какое-нибудь echo, то всё нормально направляется на экран. Как-то коряво объяснил, но надеюсь сторожилы поймуть :) Подскажите, пожалуйста, в чем может быть дело. может return не работает рекурсивно???
Спасибо! | |
|
|
|
|
|
|
|
для: dimon
(20.04.2011 в 14:56)
| | А почему в блоке
if(mysql_num_rows($q) == 0){
...
} else {
...
}
| у вас только один return, в else? Вы используете этот метод для возвращаения значения, return нужно указать для всех случаев. | |
|
|
|
|
|
|
|
для: cheops
(20.04.2011 в 17:20)
| | да, я вот как раз почти сам до этого дошёл! спасибо! | |
|
|
|
|
|
|
|
для: dimon
(20.04.2011 в 14:56)
| | спасибо. тему можно закрыть :) не сделал выхода из рекурсивной функции:
...
if(mysql_num_rows($q) == 0){
if($currentID == $this->GetPoles("ASC")) $this->FindID($id_val, 0);
elseif($currentID == $this->GetPoles("DESC")) $this->FindID($id_val);
else return $this->FindID($id_val, $flag);
}
...
|
| |
|
|
|