PDA

View Full Version : سوال: نحوه ساخت آرشیو ماهانه برای مطالب ثبت شده در دیتابیس



payamsalami
چهارشنبه 12 فروردین 1388, 18:55 عصر
اگر یکی از دوستان لطف کنند و درباره نحوه ساخت آرشیو ماهانه برای مطالب ثبت شده در دیتابیس توضیحی رو ارائه کنن ممنون میشم

امیـرحسین
چهارشنبه 12 فروردین 1388, 20:37 عصر
برای آرشیوبندی، نوع ذخیره اطلاعات در دیتابیس خیلی مهمه که تاریخ رو چجوری ذخیره کردید؟
بصورت timestamp، برچسب زمان MySQL، ستون مجزا برای سال و ماه و روز؟

فرض کنید شما یه لینک قرار دادید برای ماه Jan به این صورت:

http://domain.com?archive=1&year=2009&month=1
اگر timestamp دارید، باید دستور SELECT مشابه این باشه:

$select = mysql_query("SELECT title, id, dateColumn FROM theTable ORDER BY dateColumn DESC");
دقت کنید که من فرض کردم برچسب زمان توی ستون dateColumn هست.

حالا در زمان fetch باید تاریخ رو باز کنید، اگر مربوط به ژانویه 2009 بود نمایش بدید.
در کدهای زیر ابتدا تعداد سطرهای بدست اومده از دستور SELECT چک میشه که اگر صفر بود یعنی هیچی برای این ماه وجود نداره و اسکریپت خاتمه پیدا می کنه و اگر صفر نبود ادامه....

در ادامه سطرهای بدست اومده شمرده میشن، از برچسب زمان سطر جاری، سال و ماه بدست میاد اگر با سال و ماه دریافت شده در URL یکی بود، بصورت یه لینک توی یه آرایه ذخیره میشه.
بعد از اتمام شمرده شدن سطرها، تعداد المانهای آرایه چک میشه که اگر صفر بود یعنی هیچی ذخیره نشده در غیر اینصورت چاپ میشه:

if( isset($_GET['archive'] )
{
if( mysql_num_rows($select) == 0 )
{
echo "Nothing found!";
return;
}

$archive = array();
while( $row = mysql_fetch_assoc($select) )
{
$year = date("Y", $row['dateColumn']);
$month = date("m", $row['dateColumn']);

if( $year == $_GET['year'] && $month == $_GET['month'] )
$archive[] = '<a href="site address by $row[id]">' .$row['title']. '</a>';
}

if( count($archive) == 0 )
echo "Nothing found!";
else
echo join("<br />", $archive);
}

payamsalami
چهارشنبه 12 فروردین 1388, 21:23 عصر
امیر حسین جان بابت توضیحی که دادی خیلی ممنون
اما منظور من این بود که لیست ماه ها رو نشون بده مثلا اگه توی فروردین 88 پست داشته باشه لینک مربوط به اون رو نشون بده و به همین شکل ماه های دیگه

امیـرحسین
چهارشنبه 12 فروردین 1388, 22:12 عصر
کاری که باید بکنید اینه که اطلاعات جدول رو بر اساس ماه و سال و روز دسته بندی کنید و نمایش بدید. مثلا برای ماه و سال نمونه بالا یه روش اینه (البته این مدل کارها کاملا ابتکاریه و روشهای زیادی میتونه داشته باشه):

$select = mysql_query("SELECT title, id, dateColumn FROM theTable");

$list = array();

while( $row = mysql_fetch_assoc($select) )
{
$year = date("Y", $row['dateColumn']);
$month = date("m", $row['dateColumn']);

$list["$year"]["$month"][] = '<a href="site address by $row[id]">' .$row['title']. '</a>';
}

foreach($list as $years)
{
echo "$year : ";
foreach($years as $months)
{
echo "$month : ";
foreach($months as $item)
echo $item;
}
}

من اینجا همه اطلاعات رو با آرایه دسته بندی کردم و آرایه رو شمردم.
اگر تو بازیابی اطلاعات نمونه مشکلی وجود داشت، از خط زیر استفاده کنید تا مشکلش راحت مشخص شه:

echo "<pre>" . print_r($list) . "</pre>";

payamsalami
چهارشنبه 12 فروردین 1388, 23:18 عصر
خیلی خوب بود تقریبا همون چیزی شد که می خواستم
باز هم تشکر می کنم
امیدوارم همیشه موفق باشید

kyarash
شنبه 15 فروردین 1388, 18:11 عصر
بهترین منبع برای مطالعه و یادگیری php چیست؟

امیـرحسین
شنبه 15 فروردین 1388, 23:31 عصر
بهترین منبع برای مطالعه و یادگیری php چیست؟
کتابهای زیادی وجود دارند. منبع وب هم..... php.net خونه دوم ماست :لبخند:

پیشنهاد می کنم این رو توی یه تاپیک جداگانه مطرح کنید تا نظرات بیشتری رو بگیرید. اینجا دیده نمیشه!

tbebest
سه شنبه 09 آذر 1389, 15:20 عصر
سلام


foreach($list as $years)
{
echo "$year : ";
foreach($years as $months)
{
echo "$month : ";
foreach($months as $item)
echo $item;
}}
فقط یک ماه و یک سال را برای همه پست ها می اورد. باتشکر

UnnamE
سه شنبه 09 آذر 1389, 15:53 عصر
دوست من بهتر هست از سيستم هاي وبلاگ و مديريت محتوا نگاه كني
راحت به بهش ميرسي!

funpatogh
سه شنبه 09 آذر 1389, 20:52 عصر
یک نگاهی هم به اینجا بندازید بدک نیست
http://saleh.soozanchi.ir/blog/1388/07/05/%D8%AA%D9%88%D8%A7%D8%A8%D8%B9-%D8%AA%D8%A7%D8%B1%DB%8C%D8%AE-%D8%B4%D9%85%D8%B3%DB%8C-%D8%AC%D9%87%D8%AA-%D8%A7%D8%B3%D8%AA%D9%81%D8%A7%D8%AF%D9%87-%D8%AF%D8%B1-mysql/

tbebest
چهارشنبه 10 آذر 1389, 16:29 عصر
سلام,
اینو امتحان کنین»


$query = "SELECT title, id, dateColumn FROM theTable ORDER BY dateColumn ASC";
$result = mysql_query($query);

$current_year = false;
$current_month = false;

while($row = mysql_fetch_assoc($result) )
{
$year = date("Y", $row['dateColumn']);
$month = date("m", $row['dateColumn']);
if($current_year != $year)
{
echo "$year : ";
}
if($current_month != $month || $current_year != $year)
{
echo "$month : ";
}
$current_year = $year;
$current_month = $month;
echo "<a href=\"site address by {$row['id']}\">{$row['title']}</a>";
}

با تشکر