PDA

View Full Version : سوال: مشکل در صفحه بندی (حل شد)



engmmrj
جمعه 25 اسفند 1391, 12:46 عصر
من این کلاس رو نوشتم ولی ناقصه
مشکلم اینه که میخوام وقتی کسی روی صفحه 10 کلیک کرد صفحه 1 تا 9 نمایش داد9 نشه و تا 10 تا 20 نمایش داده بشه به شکل زیر
شکل اولیه
1 - 2 -3 -4 5- 6- 7- 8- 9- 10
وقتی روی 10 کلیک می شود
10 - 11 - 12 -13 - 14 - 15 -16 - 17 - 18 - 19 -20

class Number_Page{
/////post ha ////
public function page($GET,$top,$table){

$fix=0;
if(isset($GET)){
$fix=$GET*$top-$top;
$query=mysql_query("select * from $table order by id desc limit $fix,$top ");

}
return $query;
}
/////page ha
public function number($table,$number){

$c=mysql_num_rows(mysql_query("select * from $table"));
$b=ceil($c/$number);
return $b;
}
}
$page=new Number_Page();
$wile=$page->page($_GET['page'],10,'ajax');
///post ha
while($i=mysql_fetch_array($wile)){
print $i['name'].'<br>';
}
/////
/////page ha /////
$l=$page->number('ajax',10);
for($i=1;$i<=$l;$i++){

?>
<a href="<?php print $_SERVER['SCRIPT_NAME'].'?page='.$i?>"><?php print $i;?></a>
<?php }?>

MMSHFE
جمعه 25 اسفند 1391, 12:56 عصر
خوب حلقه ای که در آخر دارین رو بجای یک از ['GET['page_$ یا یکی بعد از اون شروع کنید. یا اینکه توی شرطی که توی حلقه گذاشتین که خالیه، دستور ;continue رو بگذارین تا اون دور حلقه رو نادیده بگیره.

engmmrj
جمعه 25 اسفند 1391, 13:04 عصر
من میخوام وقتی به 10 رسید قبلی هارو نادیده بگیره

MMSHFE
جمعه 25 اسفند 1391, 16:54 عصر
for($i = ($_GET['page'] < 10 ? 1 : 10); $i <= $l; $i++) {
echo '<a href="?page=' . $i '">' . $i . '</a>' . PHP_EOL;
}

engmmrj
جمعه 25 اسفند 1391, 20:34 عصر
این کدی که شما پیشنهاد دادید وقتی به 10 میرسه عمل می کنه وقتی به 20 یا 30 و.. میرسه عمل نمی کنه

for($i = ($_GET['page'] < 10 ? 1 : 10); $i <= $l; $i++) { echo '<a href="?page=' . $i '">' . $i . '</a>' . PHP_EOL;}

MMSHFE
جمعه 25 اسفند 1391, 20:50 عصر
اینو امتحان کنید:


for($i = abs(floor($_GET['page'] / 10)) * 10 + 1; $i <= $l; $i++) {
echo '<a href="?page=' . $i '">' . $i . '</a>' . PHP_EOL;
}

engmmrj
جمعه 25 اسفند 1391, 20:59 عصر
یه مشکل کچلو داره میخوام 1 تا 10 یا 10 تا 20 و .. که میخوام بقیه رو نشون نده الان صفحه های قبل رو نشون نمیده ولی صفحه های بعد رو نشون میده مثلا فقط از 10 تا بیست نشون بده

MMSHFE
جمعه 25 اسفند 1391, 21:08 عصر
$start = abs(floor($_GET['page'] / 10)) * 10 + 1;
for($i = $start; $i <= $start + 9; $i++) {
echo '<a href="?page=' . $i '">' . $i . '</a>' . PHP_EOL;
}

MMSHFE
جمعه 25 اسفند 1391, 21:09 عصر
خداییش خودمونیم این مشکلی نبود که خودتون نتونید حلش کنید.

engmmrj
جمعه 25 اسفند 1391, 21:15 عصر
خوب شما چند ساله دارین برنامه نویسی می کنین؟
من 5 ماه که دارم برنامه نویسی کار میکنم از من زیاد انتظار نداشته باشین:خجالت:
متغیر FLOOR چیکار میکنه؟

MMSHFE
جمعه 25 اسفند 1391, 21:19 عصر
در اصل دو تا تابع داریم که کارشون بهم نزدیکه و درحقیقت نقطه مقابل همدیگه هستن: floor و ceil که اولی، بزرگترین عدد صحیح کوچکتر از آرگومان و دومی، کوچکترین عدد صحیح بزرگتر از آرگومان رو برمیگردونه. مثلاً اگه آرگومان 2.4 باشه، floor عدد 2 و ceil عدد 3 رو به ما میده یا اگه عدد 2.6- باشه، floor عدد 3- و ceil عدد 2- رو برمیگردونه. میتونید بطور ساده بگین floor رو به پایین و ceil رو به بالا رند میکنه.

MMSHFE
جمعه 25 اسفند 1391, 21:24 عصر
الآن که فکر کردم دیدم یک راه ساده تر هم هست:


$start = abs($_GET['page'] - $_GET['page'] % 10) + 1;
for($i = $start; $i <= $start + 9; $i++) {
echo '<a href="?page=' . $i '">' . $i . '</a>' . PHP_EOL;
}

engmmrj
جمعه 25 اسفند 1391, 21:30 عصر
بعد اگه بخوام وقتی روی 2 کلیک شد 1 بره و 11 اضافه شه باید چیکار کنم؟

MMSHFE
جمعه 25 اسفند 1391, 21:32 عصر
شما که اول یه چیز دیگه گفتین. این کلاً یه سناریوی دیگه است:


for($i = $_GET['page']; $i <= $_GET['page'] + 9; $i++) {
echo '<a href="?page=' . $i '">' . $i . '</a>' . PHP_EOL;
}

engmmrj
جمعه 25 اسفند 1391, 21:36 عصر
ببخشید منظورمو بدم گفتم .
خودمم نمی دونم چی میگم:لبخند:

rezaonline.net
جمعه 25 اسفند 1391, 21:54 عصر
یه ذره مخ ریاضی میخواد.
روی کاغذ پیاده اش کنی ، راحتتره .

MRmoon
شنبه 26 اسفند 1391, 10:52 صبح
سلام فرق تابع floor پس با تابع round چیه؟

MMSHFE
شنبه 26 اسفند 1391, 11:16 صبح
round عدد رو بطور هوشمند رند میکنه (اعداد بالای 0.5 رو به بالا و کمتر از 0.5 رو به پایین رند میشه) ولی floor همیشه رو به پایین و ceil همیشه رو به بالا رند میکنه.