SMF Support > فارسی (Farsi)

آموزش شمسی کردن تاریخ انجمن SMF

(1/4) > >>

javad_ft:

با سلام خدمت دوستان
بنده اخیراً تاریخ انجمن خودمون رو شمسی کردم و میخام اینجا آموزشش رو بزارم تا همه استفاده کنن.
توجه1: اگر مهارت کافی ندارید از این آموزش استفاده نکنید، در غیر اینصورت ممکن است برای انجمن شما مشکل ایجاد شود.
تابع timeformat  در فایل Subs.php وظیفه تبدیل timestamp ها به رشته برای نمایش را بر عهده دارد.
با ویرایش این تابع میتوان تاریخ و ساعت را بصورت دلخواه نمایش داد.
همچنین باید توابعی برای تبدیل تاریخ میلادی به شمسی داشته باشید که برای این منظور از کتابخانه آماده jdf.php استفاده میکنیم که کاملاً قابل اطمینان است.
برای دانلود به اینجا مراجعه کنید: http://jdf.scr.ir [nofollow]

از آنجایی که فایل jdf برای انکودینگ UTF-8 ارائه شده، اگر انکودینگ انجمن شما Arabic(windows-1256 باشد باید از فایل تبدیل شده که در پست بعدی موجود است اسفاده کنید.
توجه2: قبل از هرگونه ایجاد تغییرات در فایل subs.php ، از آن یک کپی تهیه کنید تا در صورت بروز مشکل بتوانید آنرا جایگزین کنید.

برای استفاده از توابع فایل jdf باید آنرا در پوشه Sources کپی کنید.
همچنین باید آنرا در ابتدای فایل Subs اصطلاحاً include کنید.
توجه کنید که این کار باید بعد از قسمت if (!defined('SMF')) انجام شود. بصورت زیر:


--- Code: ---if (!defined('SMF'))
die('Hacking attempt...');

include_once('jdf.php');
--- End code ---

سپس تابع timeformat  باید با کد زیر جایگزین شود:


--- Code: ---//#<modified> today/yesterday/date + time
// Format a time to make it look purdy.
function timeformat($log_time, $show_today = true, $offset_type = false)
{
global $context, $user_info, $txt, $modSettings, $smcFunc;

$time = $log_time + $modSettings['time_offset'] * 3600;

// Today and Yesterday?
if ($show_today === true)
{
// Get the current time.
$nowtime = forum_time(false); //argument must be false to ignore user_offset

$then = @getdate($time);
$now = @getdate($nowtime);

// Same day of the year, same year.... Today!
if ($then['yday'] == $now['yday'] && $then['year'] == $now['year'])
return jstrftime( $txt['today'] . '%H:%M:%S' ,$time);
// Day-of-year is one less and same year, or it's the first of the year and that's the last of the year...
if (($then['yday'] == $now['yday'] - 1 && $then['year'] == $now['year']) || ($now['yday'] == 0 && $then['year'] == $now['year'] - 1) && $then['mon'] == 12 && $then['mday'] == 31)
return jstrftime( $txt['yesterday'] . '%H:%M:%S' ,$time);
}

return jstrftime('%e %B %Y - %H:%M:%S' ,$time);
}
//#</modified>

--- End code ---

javad_ft:
دوستانی که انکودینگ انجمن آنها Arabic(windows-1256) است باید از این فایل استفاه کنند. توجه کنید که اسم فایل رو بزارید jdf.php 

http://jelecomp.persiangig.com/jdf_arabic%28windows1256%29.php/download [nofollow]

javad_ft:

این کار محدودیتهای زیر را هم ایجاد میکنه که البته زیاد مهم نیستند:
- ادمین نمیتونه از تو بخش مدیریت سیستم، فرمت تاریخ تعریف کنه.(یعنی میتونه، ولی تابع timeformat تنظیمات رو نادیده میگیره)
2-کاربرا نمیتونن برای خودشون فرمت تاریخ و زمان و یا آفست زمانی تعریف کنن.(ایضاً مثل مورد بالا)

البته تو بخش مدیریت سیستم امکان تعریف آفست زمانی برای ادمین هست که میتونیم برای تصحیح زمانهای Daylight saving ،اختلاف ساعت جهانی و خطای ساعت سرور ازش استفاده کنیم
.یعنی اگر ساعت بخاطر شش ماهه اول یک ساعت جلو بود باید برید به مسیر زیر:
مدیریت سیستم>تنظیمات پیکربندی>امکانات و گزینه ها
بعد مقدار "اختلاف زمانی با ساعت سرور" رو بزارید روی 1-

hesaab:
امکانش هست آدرس انجمن خودتون رو بذارید؟
ممنون

javad_ft:
انجمن مال من نیست. من عضوم :
www.eca.ir/forum2 [nofollow]

Navigation

[0] Message Index

[#] Next page

Go to full version