PDA

View Full Version : سوال: صفحه بندی مطالب در php



daf_zan
شنبه 14 خرداد 1390, 11:09 صبح
نحوه صفحه بندی مطالب در php رو لطفا همراه با کد مربوطه توضیح دهید.

alismith
شنبه 14 خرداد 1390, 22:04 عصر
سلام
برای صفحه بندی کردن مطالب و محتوا در php باید از یک سری الگوریتم ها استفاده کنید
مثلا اگه شما می خواهید پست ها یا نتایج جستجو و یا حتی نظرات یک مقاله رو در هر صفحه فقط تعداد محدودی را نمایش دهید و ادامه رو در یک صفحه دیگه ، باید در ابتدا چند کار انجام دهید
اول : باید ببینید چه تعداد رکورد در جدول مورد نظر قرار دارد
دوم : تعداد مورد نظر برای نمایش نتایج پرس و جو را در یک متغییر قرار دهید
سوم : بدست آوردن تعداد صفحاتی که باید برای نمایش نتایج پرس و جو استفاده کنید
چهارم : نوشتن پرس و جو مناسب برای انتخاب رکورهایی که مربوط به صفحاتی هستند که از قبل مشخص کردیم
پنجم : مشخص کردن دقت انتخاب این پرس و جو برای نمایش نتایج مطابق با تعداد نتایج که در " کار دوم " مشخص کردیم
ششم : نمایش این پرس و جو مطابق با الگوریتمی که پیاده کردیم

روش انجام کار :
مطابق کارهای ذکر شده عمل می کنیم

اول :


$sql = "SELECT * FROM `table`";
$result = mysql_query($sql);

$RecordCount = mysql_num_rows($result); // Get Record Count

در اینجا ما تعداد رکورد را به دست آوردیم و در متغییری به نام RcordCount ریختیم

دوم :


$showRecord = 7; // e.g. 7

در اینجا ما متغییری را تعریف می کنیم و مقدار 7 را به آن می دهیم که این عدد مشخص کننده این امر هستش که ما می خواهیم در هر بار نمایش صفحه 7 ایتم نمایش داده شود

سوم :


$pages = ceil($RecordCount / $showRecord);

در اینجا شما مشخص می کنید که اگر تعداد نمایش نتیجه پرس و جو در هر صفحه یک مقدار مشخص باشد با توجه به تعداد رکوردهای موجود برای نمایش این رکوردها به چند صفحه احتیاج داریم که در نهایت آن را در متغییر page ذخیره می کنیم
تابع ceil این وظیفه را دارد تا اگر نتیجه تقسیم یک عدد اعشاری بود عدد را رو به بالا گرد کنه

نکته : در اینجا شما باید با یک حلقه تکرار ایجاد کنید تا تعداد صفحات را در قالب یک لینک در صفحه چاپ کنید


دوست عزیز شما تا اینجا مراحل را به ترتیب انجام دهید و بعد با اعلام آمادگی من ادامه آموزش را قرار میدم تا هم شما و هم دیگر دوستان استفاده کنند


موفق باشید

alismith
یک شنبه 15 خرداد 1390, 11:51 صبح
سلام
خوب ادامه آموزش ...

چهارم :
در این مرحله ما چند کار انجام می دهیم
اول : دریافت شماره صفحه
دوم : یک مقدار از آن کم می کنیم
سوم : آن را در تعداد نمایش رکورد ضرب می کنیم
و در نهایت آن را در یک متغییر می ریزیم


$showRecord = 7;
$pId = $_GET['page'];

--$pId;

$start = ($pId * $showRecord);

$end = $showRecord;

خوب همین طور که می بینید در اینجا با تعریف دو متغییر start و end بازه دریافت پرس و جو را مشخص کردیم
چهارم : نوشتن query


$sql = "SELECT * FROM `table` ORDER BY `id` DESC LIMIT $start , $end";
$result = mysql_query($sql);

در اینجا ما مطابق نیاز 7 رکورد را که به صورت نزولی برطبق فیلد id ترتیب بندی شده بودند و به عبارتی با این کار رکورد ها رو با تعدادی مشخص و از جدیدترین به قدیمی ترین انتخاب کردیم و نتایج را در متغییری به نام result ریختیم

نکته مهم : در اینجا ما با دریافت عدد صفحه مثلا 3 اون رو یک ارزش کم می کنیم و عدد حاصل ، 2 را در تعداد نمایش ، 7 ضرب می کنیم . این کار باعث می شود تا ما از رکود 14 تا 7 رکورد جلو برویم و مقادیر حاصل از پرس و جو را در قالب صفحه 3 نمایش دهیم

در اینجا " کار پنجم " هم انجام دادیم !!!

ششم :
در این مرحله از طریق حلقه while و واکشی مقادیر موجود در متغییر result ، نتایج حاصل را در روی صفحه چاپ می کنیم


به همین راحتی :لبخندساده:


موفق باشید

RAYMOON
جمعه 20 خرداد 1390, 19:26 عصر
سلام متشکر از این آموزش بسیار جالب شما
اگر امکان داره طریقه نوشتن حلقه وایل رو هم اضافه کنید تا بدونیم کجاها باید حلقه وایل گزاشت و چه گونه مرسی


من دارم یک ماژول نیوک مشهد رو دستکاری میکنم برای اموزش خودم:لبخند: خواستم تعداد خبر های رو که در یک حلقه است رو تعغیر بدم مثلان من توی تیبل خبر(نیوز) 100 تا خبر دارم من می خوام توی صفحه اول فقط 15 تا رو نشون بده و بقیه بره توی صفحه های دیگه مثلا صفحه 1-2-3-..... اینجوری

من اینو تست کردم چیزی درست نشون نداد



$sql =$db->sql_query ("SELECT title FROM " . $prefix . "$NEWS ORDER BY id DESC");
$result1 = mysql_query($sql);
$RecordCount = mysql_num_rows($result1); // Get Record Count
$showRecord = 7; // e.g. 7
$pages = ceil($RecordCount / $showRecord);
$showRecord = 7;
while ($row = $db->sql_fetchrow($pages)) {
$pages = filter($row['pages']);
echo"$pages";
}

$pId = $_GET['page'];
--$pId;
$start = ($pId * $showRecord);
$end = $showRecord;
$sql = "SELECT * FROM " . $prefix . "$NEWS ORDER BY `id` DESC LIMIT $start , $end";
$result2 = mysql_query($sql);
while ($row = $db->sql_fetchrow($result2)) {
$pages = filter($row['pages']);
echo"$pages";
}

alismith
جمعه 20 خرداد 1390, 21:12 عصر
سلام


اگر امکان داره طریقه نوشتن حلقه وایل رو هم اضافه کنید تا بدونیم کجاها باید حلقه وایل گزاشت


while ($row = $db->sql_fetchrow($pages)) {
$pages = filter($row['pages']);
echo"$pages";
}



نکته : در اینجا شما باید با یک حلقه تکرار ایجاد کنید تا تعداد صفحات را در قالب یک لینک در صفحه چاپ کنید

همین طور که گفتم می تونید از یک حلقه تکرار استفاده کنید
مثلا:


<?php
for($i=1; $i<=$pages; $i++){

?>
<input type="button" value="<?=$i;?>" name="<?=$i;?>"/>&nbsp;&nbsp;
<?

}

?>

این دستورات هم :


$pId = $_GET['page'];
--$pId;
$start = ($pId * $showRecord);
$end = $showRecord;
$sql = "SELECT * FROM " . $prefix . "$NEWS ORDER BY `id` DESC LIMIT $start , $end";
$result2 = mysql_query($sql);
while ($row = $db->sql_fetchrow($result2)) {
$pages = filter($row['pages']);
echo"$pages";
}

مربوط به صفحه ای هست که قراره شماره صفحه را دریافت کنه و خروجی را مطابق آن شماره نمایش بده
که شما اینجا این دستورات رو اشتباه نوشتید:


while ($row = $db->sql_fetchrow($result2)) {
$pages = filter($row['pages']);
echo"$pages";
}

و باید مقادیری که result2 برمی گردونه رو روی صفحه چاپ کنید ، که نام فیلد های رو باید بدید مثلا در روش واکشی به صورت array این گونه هستش :


while($rows = mysql_fetch_assoc($result2)){

echo $rows['fieldName'];

}
در اینجا assoc یک آرایه انجمنی برمی گردونه و با while رکورد ها خط به خط جلو میروند
البته شما دارید از oop و method استفاده می کنید و وظیفه sql_fetchrow هستش که این مقادیر رو در متغییر row برگردونه نحوه نمایش همونی هست که گفتم فرقی نداره



خواستم تعداد خبر های رو که در یک حلقه است رو تعغیر بدم مثلان من توی تیبل خبر(نیوز) 100 تا خبر دارم من می خوام توی صفحه اول فقط 15 تا رو نشون بده و بقیه بره توی صفحه های دیگه مثلا صفحه 1-2-3-

اگر منظور شما مثل نمایش آخرین مطالب انجمن در قالب های phpnuke هستش که، برای صفحه بندی خروجی باید از Ajax استفاده کنید


موفق باشید

roya2002_80
دوشنبه 27 تیر 1390, 08:36 صبح
سلام
ممنون از مطالب خوبی که گفتید
من یک صفحه بندی می خوام که مثل همین تالار های برنامه نویس باشه(مثل google) ، مثلا اگر 100 تا صفحه باشه ، 4 -5 تا را نشون می ده بعد دکمه بعدی و قبلی داره کسی کدشو داره برام اینجا بذاره ، یا اینکه در الگوریتمش به من کمک کنید

خیلی ممنون

monazigro
یک شنبه 11 بهمن 1394, 01:05 صبح
سلام
برای صفحه بندی کردن مطالب و محتوا در php باید از یک سری الگوریتم ها استفاده کنید
مثلا اگه شما می خواهید پست ها یا نتایج جستجو و یا حتی نظرات یک مقاله رو در هر صفحه فقط تعداد محدودی را نمایش دهید و ادامه رو در یک صفحه دیگه ، باید در ابتدا چند کار انجام دهید
اول : باید ببینید چه تعداد رکورد در جدول مورد نظر قرار دارد
دوم : تعداد مورد نظر برای نمایش نتایج پرس و جو را در یک متغییر قرار دهید
سوم : بدست آوردن تعداد صفحاتی که باید برای نمایش نتایج پرس و جو استفاده کنید
چهارم : نوشتن پرس و جو مناسب برای انتخاب رکورهایی که مربوط به صفحاتی هستند که از قبل مشخص کردیم
پنجم : مشخص کردن دقت انتخاب این پرس و جو برای نمایش نتایج مطابق با تعداد نتایج که در " کار دوم " مشخص کردیم
ششم : نمایش این پرس و جو مطابق با الگوریتمی که پیاده کردیم

روش انجام کار :
مطابق کارهای ذکر شده عمل می کنیم

اول :


$sql = "SELECT * FROM `table`";
$result = mysql_query($sql);

$RecordCount = mysql_num_rows($result); // Get Record Count

در اینجا ما تعداد رکورد را به دست آوردیم و در متغییری به نام RcordCount ریختیم

دوم :


$showRecord = 7; // e.g. 7

در اینجا ما متغییری را تعریف می کنیم و مقدار 7 را به آن می دهیم که این عدد مشخص کننده این امر هستش که ما می خواهیم در هر بار نمایش صفحه 7 ایتم نمایش داده شود

سوم :


$pages = ceil($RecordCount / $showRecord);

در اینجا شما مشخص می کنید که اگر تعداد نمایش نتیجه پرس و جو در هر صفحه یک مقدار مشخص باشد با توجه به تعداد رکوردهای موجود برای نمایش این رکوردها به چند صفحه احتیاج داریم که در نهایت آن را در متغییر page ذخیره می کنیم
تابع ceil این وظیفه را دارد تا اگر نتیجه تقسیم یک عدد اعشاری بود عدد را رو به بالا گرد کنه

نکته : در اینجا شما باید با یک حلقه تکرار ایجاد کنید تا تعداد صفحات را در قالب یک لینک در صفحه چاپ کنید


دوست عزیز شما تا اینجا مراحل را به ترتیب انجام دهید و بعد با اعلام آمادگی من ادامه آموزش را قرار میدم تا هم شما و هم دیگر دوستان استفاده کنند


موفق باشید

----------------------------------------------------------------------------
من این کد ها رو بکار بردم و اجرا میشه در حالت عادی ولی من برای بخش نتیجه جستجو تو سایتم میخوام که عمل نمیکنه چون کوئری من قسمت where name like $text_search رو داره که این متغیر $text_search هم درواقع اون متنی هستش که در بالای صفحه دراره سرچ میشه وقتی سرچ انجام میشه در اولین صفحه همه چی اکیه و 10 تا ایتم رو به عنوان نتیجه سرچ نشون میده ولی وقتی دکمه صفحه دوم رو میزنی عمل نمیکنه چون اون کوئری رو گم میکنه(همون $text_search(
لطفا اگه میشه راهنماییم کنین

دانیال دزفولی
یک شنبه 11 بهمن 1394, 14:09 عصر
توی query از limit استفاده کن