المساعد الشخصي الرقمي

مشاهدة النسخة كاملة : [تعدد الصفحات] تحليل ثم برمجة مع شرح طريقة من برمجتي يناسب جميع انظمة القوالب



said
11-01-2013, بتوقيت غرينيتش 03:40 PM
http://www.dzbatna.com/images/icons/iconrote.gif [طھط¹ط¯ط¯ ط§ظ„طµظپط*ط§طھ] طھط*ظ„ظٹظ„ ط«ظ… ط¨ط±ظ…ط¬ط© ظ…ط¹ ط´ط±ط* ظ…ظ† ط¨ط±ظ…ط¬طھظٹ ظٹظ†ط§ط³ط¨ ط¬ظ…ظٹط¹ ط§ظ†ط¸ظ…ط© ط§ظ„ظ‚ظˆط§ظ„ط¨ (http://www.dzbatna.com/t1433862/)



السلام عليكم ورحمة الله وبركاته
كيف حالكم جميعا ؟ ان شاء الله انه يكون الجميع بخير


المهم نبدأ بدرس مفصلنا لليوم


عنوان الدرس مفصل:
الدرس مفصل هو عبارة عن شرح طريقة وتحليل لفكرة تعدد الصفحات، في النهاية راح يتكون عندنا كود code لتعدد الصفحات يناسب جميع انواع القوالب. ويعمل بقوة ان شاء الله، لانه كثير نجد في القسم مواضيع بعنوان تعدد الصفحات في السمارتي والعديد من المواضيع المماثلة التي تعقد الموضوع مع العلم انه الموضوع بسيط جدا والخ.


فكرة الدرس مفصل:
فكرة تعدد الصفحات، هي قسم نتائج استعلام معين الى عدة اقسام، طبعا فائدته معروفة ، بدل ما نعمل استعلام بالف سجل ونعرضهم مرة واحدة، راح يثقل على السيرفر SERVER وراح يصعب قراءة الناتج، اذن نقوم بعمل تقسيم للنتائج بحيث نخفف على السيرفر SERVER ونخفف ايضا على القارئ ونسهل عليه
اذن الفكرة
انه لما نطلب صفحة معينة تعطينا فقط النتائج التي تنتمي لهذه الصفحة مثل المنتديات مثلا. والمفتاح الذي يحدد هو رقم الصفحة ، وايضا عدد النتائج التي سنعرضها في كل صفحة تحدد ايضا ما هي النتائج التي ستخرج لنا


شرح طريقة الفكرة:
في البداية نضع نص الاستعلام الذي نريد ان ننفذه ، مثلا
رمز PHP:

<code style="white-space:nowrap"> <code> $query="SELECT * FROM news ORDER BY id DESC";
</code> </code>

طبعا من الملاحظ انه ما نفذنا الاستعلام فقط وضعناه دون تنفيذ
الان نريد ان نحدد عدد النتائج لكل صفحة
كما في الكود code
رمز PHP:

<code style="white-space:nowrap"> <code> $rowsPerPage=10;
</code> </code>

في حالتنا هذه وضعنا عدد النتائج هو 10 طبعا قابل للزيادة او النقصان حسب انت ماذا تحتاج

الخطوة التالية هي حساب عدد كل النتائج ومعرفة عدد الصفحات اللازمة لنا
عن طريق الكود code التالي
رمز PHP:

<code style="white-space:nowrap"> <code> $num=mysql_num_rows(mysql_query($query));
$pagesNum=ceil($num/$rowsPerPage);
</code> </code>

قسمنا عدد النتائج على عدد النتائج لكل صفحة ثم اخذنا قيمة اكبر عدد صحيح عن طريق دالة ceil
الدالة معروفة وظيفتها عند متخصصين الرياضيات ويسموها اكبر عدد صحيح ورمزها [number] ويوجد ايضا واحدة اخرى اسمها floor بتاخذ اصغر رقم صحيح لكن احنا هنا بيعنينا اكبر عدد صحيح فقط

الخطوة التالية
نريد عن طريق GET ان نأخذ رقم الصفحة من المستخدم
رمز PHP:

<code style="white-space:nowrap"> <code> $page=intval($_GET&#91;page&#93;);
</code> </code>

طبعا دالة انتفال للحماية من ادخال اي رموز غير مرغوب فيها
الان في الخطوة التالية
اما المستخدم سيدخل رقم صحيح ومقبول ، او راح يدخل شي خاطئ
لذلك راح نحصر جميع الاحتمالات عن طريق جملة joomla شرطية

رمز PHP:

<code style="white-space:nowrap"> <code> if($page==""||$page==0||$page==1||$page>$pagesNum||$page<0)
{
$page=1;
$startIndex=0;
$endIndex=$rowsPerPage;
}
else {
$startIndex=($page-1)*($rowsPerPage);
$endIndex=$rowsPerPage;
}
</code> </code>

واضح من الكود code انه في اذا ادخل المستخدم 1 او 0 او لم يدخل شي او حتى ادخل رقم سالب او حتى ادخل رقم اكبر من عدد الصفحات، سيحوله الى الصفحة الاولى
وسيكون البداية من الصفر وعدد العناصر هو الذي حددناه بالاعلى

اما في حال ادخل رقم صفحة مسموح فإنه سيقوم باحتساب النتائج المطلوبة كما هو موضح بنص else
فقط دقق في الكود code لمدة 10 ثوان وستعرف بالضبط كيف يعمل الكود code

الان نجري الاستعلام
رمز PHP:

<code style="white-space:nowrap"> <code> $result=mysql_query("$query LIMIT $startIndex,$endIndex");
</code> </code>

ثم عن طريق جملة joomla تكرارية نخرج النتائج ونخزنها في مصفوفة ، فيكون لدينا النتائج المطلوبة فقط في الصفحة التي ادخلنا رقمها

رمز PHP:

<code style="white-space:nowrap"> <code> while($rows=mysql_fetch_array($result))
{
$newsdata&#91;&#93;=$rows;
}
</code> </code>

بعد استخرجنا المعلومات ووضعناها في مصفوفة ، لم يتبق علينا سوى طباعة الصفحات
انا استخدمت متغير واسميته $pagination لوضع ارقام الصفحات فيه كما هو موضح بالاسفل
رمز PHP:

<code style="white-space:nowrap"> <code> $pagination="";
for($i=1;$i<=$pagesNum;$i++)
{
if($page==$i)
{
$pagination.="&nbsp;<span class=\"pagination1\">$i</span>";
}
else {
$pagination.="&nbsp;<span class=\"pagination2\"><a href=\"news.php?page=".$i."\">".$i."</a></span>";
}
}
</code> </code>

من خلال جملة joomla الفور لوب for الموضحة نقوم بتكوين ارقام الصفحات
ومن الملاحظ ايضا اني اكسبتها كلاس css حتى تكون مرنة في تغيير مظهرها

الان في نظام قوالبك
فقط اكتب اسفل السجلات الجملة joomla التالية في حال كان نظامك سمارتي
رمز PHP:

<code style="white-space:nowrap"> <code> {$pagination}
</code> </code>

اما في حال كان نظامك غير السمارتي فالعملية هي عملية طباعة متغير عادي
وراح تكون حصلت على تعدد الصفحات المطلوب

انا وضعت لكم تنسيق css بامكانكم التعديل عليه بكل سهولة
وهو

رمز Code:
.pagination1 { font: 10pt tahoma; border: 1px solid #1D6EBF; width:25px; background:#80BDFB; } .pagination2 { font: 10pt tahoma; border: 1px solid #1D6EBF; width:25px; background:#F2F2F2; }


والناتج راح يكون كما في الصفحة التالية

http://upload.dzbatna.net/upfiles/gk906272.gif

امل ان يكون الدرس مفصل قد نال اعجابكم

وهذا هو الكود code كامل
رمز PHP:

<code style="white-space:nowrap"> <code> $query="SELECT * FROM news ORDER BY id DESC";
$rowsPerPage=2;
$num=mysql_num_rows(mysql_query($query));
$pagesNum=ceil($num/$rowsPerPage);
$page=intval($_GET&#91;page&#93;);
if($page==""||$page==0||$page==1||$page>$pagesNum||$page<0)
{
$page=1;



$startIndex=0;
$endIndex=$rowsPerPage;
}
else {
$startIndex=($page-1)*($rowsPerPage);
$endIndex=$rowsPerPage;
}
$result=mysql_query("$query LIMIT $startIndex,$endIndex");
while($rows=mysql_fetch_array($result))
{
$newsdata&#91;&#93;=$rows;
}
$pagination="";
for($i=1;$i<=$pagesNum;$i++)
{
if($page==$i)
{
$pagination.="&nbsp;<span class=\"pagination1\">$i</span>";
}
else {
$pagination.="&nbsp;<span class=\"pagination2\"><a href=\"news.php?page=".$i."\">".$i."</a></span>";
}
}
</code> </code>


والسلام عليكم ورحمة الله وبركاته






ألعاب الأندرويد مجانا و حصريا (http://www.apotox.info/forum)




https://fbcdn-sphotos-d-a.akamaihd.net/hphotos-ak-ash4/482113_236967293114455_1193518507_n.png (http://www.dzbatna.com)
©المشاركات المنشورة تعبر عن وجهة نظر صاحبها فقط، ولا تُعبّر بأي شكل من الأشكال عن وجهة نظر إدارة المنتدى (http://www.dzbatna.com)©

استعمل مربع البحث في الاسفل لمزيد من المواضيع


سريع للبحث عن مواضيع في المنتدى