PDA

View Full Version : سوال: نمایش زمانی مطالب در وب سایت



soroush.r70
شنبه 13 اسفند 1390, 11:12 صبح
من می خوام وقتی از صفحه مدیریت مطلبی در سایت می ذارم این مطالب به صورت زمانی مثلا هر 5 ساعت در سایت قرار بگیره یعنی من می آم 20 تا مطلب از طریق صفحه مدیریت می ذارم این 20 تا باید هر 5 ساعت یکی از مطالب به صورت اتوماتیک در سایت قرار بگیره .

راهی برای انجامش هست...؟

MMSHFE
شنبه 13 اسفند 1390, 12:03 عصر
خوب دوست عزیز، شما برای هر مطلب یک فیلد int بگذارین برای timestamp و موقع ایجاد مطالب جدید، همه رو صفر تعیین کنید بجز اولی که timestamp جاری هست. بعد هربار مطالب رو نشون میدین، timestamp جاری رو با آخرین timestamp موجود در جدول چک کنید و اگه اختلافشون بیشتر از 18000 بود (5 ساعت)، یکی از اونهایی که timestampشون صفره رو آپدیت کنید و timestamp جاری رو براش بگذارین. موقع نمایش هم فقط اونهایی که timestamp مخالف صفر دارن رو نشون بدین. موفق باشید.

soroush.r70
شنبه 13 اسفند 1390, 12:42 عصر
امکانش هست یه مثال بزنین تشکر

MMSHFE
شنبه 13 اسفند 1390, 13:17 عصر
ببینید، فرض کنید توی جدول فیلدهای id و text و timestamp رو دارین و این رکوردها رو ثبت کردین:


id text timestamp
-------------------------
1 row1 0
2 row2 0
3 row3 0
4 row4 0
5 row5 0
6 row6 0
7 row7 0
8 row8 0
9 row9 0
10 row10 0
11 row11 0
12 row12 0
13 row13 0
14 row14 0
15 row15 0
16 row16 0
17 row17 0
18 row18 0
19 row19 0
20 row20 0

همونطور که مشاهده میکنید، همه رکوردها، timestamp صفر دارن. از اونجا که نوع فیلد timestamp عددی (int) هست، این مقداردهی مجازه. همه این رکوردها رو هم فرض کنید یکجا ایجاد کردیم. حالا میخوایم کاری کنیم که هر 5 ساعت، یکیشون نمایش داده بشه. برای اینکار، این کد رو اول صفحاتتون بگذارین:


mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
$last_timestamp = mysql_query('SELECT * FROM `table` WHERE (`timestamp`>\'0\') ORDER BY `timestamp` DESC LIMIT 1');
$now = time();
if($last_timestamp && mysql_num_rows($last_timestamp) == 1) {
$last_timestamp = mysql_result($last_time_stamp, 0, 2);
if(($now - $last_timestamp) >= 18000) {
// Update only 1 record because we have passed 5 hours
$time = $last_timestamp + 18000;
mysql_query("UPDATE `table` SET `timestamp`='{$time}' WHERE (`timestamp`='0') ORDER BY `id` LIMIT 1");
}
}
else {
// Update only 1 record because we have no displayed record and we need 1
mysql_query("UPDATE `table` SET `timestamp`='{$now}' WHERE (`timestamp`='0') ORDER BY `id` LIMIT 1");
}

توی کد فوق، اول از همه، آخرین رکورد موجود که timestamp اون بزرگتر از صفر هست استخراج میشه و بعد، چک میشه ببینیم 5 ساعت از اون گذشته یا نه و اگه گذشته بود، یکی از رکوردهایی که timestamp اون هنوز صفر هست (نشون ندادیمش) تغییر میکنه و timestampش میشه آخرین timestamp بعلاوه 18000 ثانیه (5 ساعت). اگر هم اصلاً رکوردی نداشته باشیم که نشون داده شده (همه رکوردها timestamp صفر دارن)، اولین رکورد با زمان جاری اصلاح میشه تا نشون داده بشه.
برای نمایش هم از کد زیر استفاده میکنیم:


mysql_connect('localhost', 'root', '') or die('Connection error');
mysql_select_db('dbname') or die('Database error');
$displayrecords = mysql_query('SELECT * FROM `table` WHERE (`timestamp`>\'0\') ORDER BY `id`');
if($displayrecords && mysql_num_rows($displayrecords) > 0) {
while($record = mysql_fetch_assoc($displayrecords)) {
echo '<div>'.nl2br($record['text']).'</div>'.PHP_EOL;
}
}

همونطور که مشخصه، فقط رکوردهایی نشون داده میشن که timestamp اونها بزرگتر از صفر هست.
موفق باشید.