السلام عليكم ورحمة الله وبركاته
الرجاء تزويدي بمعلومات وطرق لبناء نظام التقييم مثلاً تقييم مقال ونجوم وهكذا
بارك الله فيكم
السلام عليكم ورحمة الله وبركاته
الرجاء تزويدي بمعلومات وطرق لبناء نظام التقييم مثلاً تقييم مقال ونجوم وهكذا
بارك الله فيكم
هل من مجيب ؟
الفكرة معقدة نوعاً ما ..
لا أعلم إن كانت هذه الفكرة المتبعة لكن ..
سيكون هناك جدول يحتوي على سجلات التقييم .. لنسمه ratings
نقوم بإستخراج السجلات لكل تقييم ونقوم بحسابها ..كود:id, post_id, value ( 0, 1, 2, 3, 4, 5 )
الآن نقوم بالمقارنة بين النتائج .. نضعهم في مصفوفة ..كود PHP:
select count(id) from ratings where post_id = 1 and value = 0;
// ..
select count(id) from ratings where post_id = 1 and value = 5;
الآن سيكون الناتج لدينا مثل ..كود PHP:
$post_id = 1;
for ($i = 0; $i <= 5; $i++) {
$result = mysql_query('select count(id) from ratings where post_id = '.$post_id.' and value = '.$i);
$ratings[$i] = mysql_result($result, 0, 0);
mysql_free_result($result);
}
mysql_close($link);
على اعتبار انكود PHP:
Array
(
[0] => 3
[1] => 12
[2] => 17
[3] => 30
[4] => 52
[5] => 59
)
يحتوي على عدد الاشخاص الذين قيمو الموضوع بالرقم 0كود PHP:
$ratings[0]
وهكذا مع بقية العناصر ..
نقوم الان بالتأكد من ان احدهم قام بالتصويت على العنصر ..
اي بمعنى اصح لا تكون المصفوفة $ratings تساوي
كود PHP:
array (0, 0, 0, 0, 0, 0)
قد يقول البعض لماذا لا تقوم باستخدامكود PHP:
$no_ratings = true;
for ($i = 0; $i <= 5; $i++) {
if ($ratings[$i] != 0) {
$no_ratings = false;
break;
}
}
فانا افضّل التأكد من كل عنصر بشكل منفرد ، لضمان صحة الحساب ..كود PHP:
if ($ratings != array (0, 0, 0, 0, 0, 0)) { }
الان اذا لم يكن هنالك تقييم للعنصر بعد .. نعرض له رسالة تخبره انه لم يتم تقييم الموضوع او نقوم بحساب التقييم ..
وهو على الطريقة التالية ..
- نحضر اكبر عنصركود PHP:
#1
$max = max($ratings);
#2
for ($i = 0; $i <= 5; $i++) {
if ($ratings[$i] == $max) {
$keys[] = $i;
}
}
#3
$rating = max($keys);
#4
if ($ratings[$rating + 1] >= ($ratings[$rating] / 2) and $ratings[$rating + 1] != $ratings[$rating]) {
$rating = $rating + 0.5;
}
- نحضر مفتاح اكبر قيمة الذي هو في نفس الوقت التقييم وبما انه قد يكون هناك اكثر من عنصر متساويين في القيمة اي مثلا : عدد الاشخاص الذي قامو بالتقييم للرقم 4 = عدد الاشخاص الذين قامو بالتقييم للعدد 5 فاننا نحضر اكبر عدد بينهم ايضاً
- نقوم بالنظر للعدد الاكبر من رقم التقييم اي مثلاً لو أن التقييم 3 ننظر للعدد الاكبر منه وهو 4 ونرى ان كان عدد الاشخاص الذي قامو بالتقييم بالرقم 4 اكبر او يساوي نصف عدد التقييم ( 3 ) ، لكي نقوم باضافة 1/2 في حالة حدوث ذلك ..
مع ملاحظة انه في حالة تساوي عدد التقييمات لاكثر من عدد فانه سيأخذ العدد الاكبر ، مثلاً لو قام شخص بالتقييم للرقم واحد وجاء آخر وقام بالتقييم للرقم 2 ولم يتم التقييم لخيارات اخرى فانه سيأخذ الرقم 2 .. وهكذا
قاعدة البيانات :
ملف التقييم :كود:CREATE TABLE `ratings` ( `id` int(6) NOT NULL auto_increment, `post_id` int(3) NOT NULL, `value` int(1) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ; INSERT INTO `ratings` VALUES (1, 1, 0); INSERT INTO `ratings` VALUES (2, 1, 1); INSERT INTO `ratings` VALUES (3, 1, 3); INSERT INTO `ratings` VALUES (4, 1, 3); INSERT INTO `ratings` VALUES (5, 1, 4); INSERT INTO `ratings` VALUES (6, 1, 4); INSERT INTO `ratings` VALUES (7, 1, 4); INSERT INTO `ratings` VALUES (8, 1, 4); INSERT INTO `ratings` VALUES (9, 1, 5); INSERT INTO `ratings` VALUES (10, 1, 5); INSERT INTO `ratings` VALUES (11, 1, 5);
لا أعتقد ان هذه الطريقة هي الطريقة المتبعة في نظم ادارة المحتوى مثلاً ، قم بالنظر لبعض النماذج المفتوحة المصدر للاستزادة ..كود PHP:
$post_id = 1;
for ($i = 0; $i <= 5; $i++) {
$result = mysql_query('select count(id) from ratings where post_id = '.$post_id.' and value = '.$i);
$ratings[$i] = mysql_result($result, 0, 0);
mysql_free_result($result);
}
mysql_close($link);
$no_ratings = true;
for ($i = 0; $i <= 5; $i++) {
if ($ratings[$i] != 0) {
$no_ratings = false;
break;
}
}
if ($no_ratings == false) {
$max = max($ratings);
for ($i = 0; $i <= 5; $i++) {
if ($ratings[$i] == $max) {
$keys[] = $i;
}
}
$rating = max($keys);
if ($ratings[$rating + 1] >= ($ratings[$rating] / 2) and $ratings[$rating + 1] != $ratings[$rating]) {
$rating = $rating + 0.5;
}
echo '<pre>';
print_r($ratings);
echo '</pre>';
echo $rating;
} else {
echo 'no ratings yet..';
}
بقي هنالك شيء واحد وهو طريقة التقييم وهي عن طريق form عادي عن طريق الـ check boxes ، ولابد من استخدام الـ cookies او الـ sessions في حال عدم توفر الاولى لضمان نزاهة التقييم
يعطيك العافية يالغالي لاكن نظامك في شدة التعقيد ,
ارجوا مساعدتي في وضع نظام تقييم اخر وشكراً ,
أخي اطلع على أي نظام مفتوح المصدر كنظام نيوك أو vb مثلاً و حاول أن تتعلم منهم
ذلك يفيدك أكثر لأنه يعلمك البرمجة باحتراف
مر علي تلك الصفحتين
ستجد فيهما بعض السكربتات الجاهزة للتقييم
يمكن استخدام اي منهم
1120 + Ajax/Javascript/Dhtml examples and demos to download
1120 + Ajax/Javascript/Dhtml examples and demos to download
__________________
تحاور مع العاقل بعقل .. اما ان يقتنع او تقتنع
وتحاور مع الجاهل بعقل .. اما يطقعش او تفرقش
وتلك الفاظ لا معنى لها كذلك كلماته
يعطيكم العافية يالغالين ,
لقيت نظام تقييم اعجبني لاكن كيفية طريقة ربطه بالسكربت ؟
بحيث كل مقال تقييم خاص به ؟ ليس لدي خبرة بالجافا سكربت والاجاكس لأعدل على السكربت الجاهز ,
شكراً لكم ,
__________________
تحاور مع العاقل بعقل .. اما ان يقتنع او تقتنع
وتحاور مع الجاهل بعقل .. اما يطقعش او تفرقش
وتلك الفاظ لا معنى لها كذلك كلماته
تفضل :
http://riderdesign.com/articles/disp...x?articleid=21
أو اختر اي واحد من هنا :
1120 + Ajax/Javascript/Dhtml examples and demos to download
جزاك الله خيراً
التعديل الأخير تم بواسطة أبــو عبدالله ; 02-10-2008 الساعة 05:14 PM
انا قاعد دلوقتي بدور لحضرتك علي طريقة العمل
ولو فهمتها حقولك علي الطريقة كاملة
__________________
تحاور مع العاقل بعقل .. اما ان يقتنع او تقتنع
وتحاور مع الجاهل بعقل .. اما يطقعش او تفرقش
وتلك الفاظ لا معنى لها كذلك كلماته
جزاك الله كل خير يالغالي ولا يحرمك الاجر ان شاء الله
أولا .. وبعيدا عن طريقة عرض التقييم او طريقة اضافته
ستقوم باضافة حقلين داخل جدول المقالات
الحقل الاول .. سيكون باسم rate وفيه سنضع المجموع الكلي للتقييمات
الحقل الثاني .. سيكون باسم rates وفيه سنضع عدد مرات التقييم
طريقة التعامل مع الحقلين ستكون بهذا الشكل
نفترض ان احد الاشخاص قام بتقييم المقال بخمس نجوم .. وكان هو أول شخص قام بالتقييم
سيتم اضافة ..
اضافة 5 الي مجموع ما في الحقل rate
5 + 0 = 5
واضافة 1 الي مجموع ما في الحقل rates
1 + 0 = 1
ثم قام أحد الاشخاص بتقييم المقال بثلاثة نجوم فقط
سيتم اضافة ..
اضافة 3 الي مجموع ما في الحقل rate
3 + 5 = 8
واضافة 1 الي مجموع ما في الحقل rates
1 + 1 = 2
الآن كيف نستخرج التقييم الحالي للمقال في صفحة العرض
سنقوم بجلب قيمة الحقلين rate و rates ثم نقسمهم علي بعض
بهذا الشكل ..
rate / rates = 00000
8 / 2 = 4
بعد ان قمنا بمعرفة التقييم الحالي للمقال يمكننا استخدام احد سكربتات الاجاكس
التي وضعت رابط لها في ردك السابق
وارشح لك هذا الاسكربت
jQuery Helper - Komodos Medias Star-Rater
نظرا لسهولته الشديدة !
وعندما تقوم بانزال السكربت ستجد به ملف اسمه ratingsdemo.php
فيه ضع اوامر التعديل علي الحقلين
__________________
تحاور مع العاقل بعقل .. اما ان يقتنع او تقتنع
وتحاور مع الجاهل بعقل .. اما يطقعش او تفرقش
وتلك الفاظ لا معنى لها كذلك كلماته
نعم .. الطريقة السابقة معقدة او دعنا نقول طويلة نسبياً ، كما أشار الأخ سحاب اون لاين الطريقة هي القيام بجمع
جميع التقيمات وتقسيمها على عدد مرات التقييم
الآن وبالإعتماد على المعادلة السابقة سننشيء ثلاثة حقول إضافية في الجدول الذي يوجد به العنصر اوكود:rating = sum of ratings / number of ratings
العناصر المراد تقييمها ..
الآن العملية هي مجرد تحديث للحقول ..كود:ratings(int), ratings_count(int), final_rating(float)
عندما يقوم احدهم بالتقييم فاننا نحضر قيمتي الحقلين ratings و ratings_count او مهما اردت
تسميتهما ، ونضيف التقييم الذي قيمه الشخص الى مجموع التقييمات اي
ونضيف الرقم الواحد على مجموع التقييمات لان التقييم يكون من شخص واحد بالطبع ..كود:ratings = ratings + new_rating
كود:ratings_count = ratings_count + 1ومن ثم نقوم بتطبيق المعادلة لحساب التقييم ونقوم بتخزينة في حقل التقييم النهائي الـ final_ratingكود PHP:
$ratings_count++;
لذلك سيكون التطبيق بالشكل التالي ..
كود PHP:
$post_id = 7;
$new_rating = 2.50;
//1
select ratings, ratings_count from table
//2
$ratings = $ratings + $new_rating;
$ratings_count++;
$final_rating = round(($ratings / $ratings_count), 2);
//3
update table set ratings = '.$ratings.', ratings_count = '.$ratings_count.',
final_rating = '.$final_rating.' where id = $post_id
echo $final_rating;
التعديل الأخير تم بواسطة dev11 ; 10-10-2008 الساعة 08:08 PM