برگزیده های پرشین تولز

انتشار يك مطلب در آينده - تكمله

Ghazmar

Registered User
تاریخ عضویت
27 دسامبر 2002
نوشته‌ها
766
لایک‌ها
3
بسيار خوب، در ادامة بحث منتشر كردن يك مطلب در آينده (http://forum.persiantools.com/viewtopic.php?t=3727)، گفتيم كه در حال حاضر، Server جديد PersianTools ساعتش رو طوري تنظيم كرده كه با TimzeZone ايران كار كنه و نتيجتاً خروجي تابع date در php همون ساعت محلي خودمون رو برمي‌گردونه.
اولين سؤالي كه پيش مي‌آد اينه كه چه جوري بفهميم كه ساعتي كه تابع date به ما برمي‌گردونه با ساعت MT يكي هستن. اين از اون‌جا مهمه كه اگه اين ساعت‌ها يكي نباشن، اون‌وقت مطلبي كه گذاشتين مثلاً ساعت 8 شب منتشر بشه، در يه ساعت ديگه‌اي منتشر مي‌شه.
براي فهميدنش، متن زير رو به يه جايي از قالب وبلاگتوي اضافه كنين و اون رو دوباره‌سازي كنين. نتيجه‌اش اين خواهد بود كه در محلي كه اين كد رو اضافه كرده‌اين (توي وبلاگتون) ساعت php و ساعت MT رو مي‌بينين:
[code:1]<!-- Times!!! -->
<p><div style="Text-Align: Left">
<?
print("PHP: ");
print (date("Y m d H i s"));
print("MT: ");
?>
<$MTDate format="%Y %m %d %H %M %S"$>
TimeZone: <$MTBlogTimezone$>
</div>[/code:1]
ضمناً علاوه بر اون دو مورد، TimeZone اي رو هم كه داره استفاده مي‌كنه به شما نشون خواهد داد.
قبل از هر چيز، كارهاي دوباره‌سازي قالب وبلاگ و بعد هم باز كردن دوبارة وبلاگتون رو سريع انجام بدين، چون ساعت MT ساعت دوباره‌سازي شماست و نه زماني كه وبلاگ رو باز مي‌كنين (برعكس ساعت php كه ساعت رو در لحظة نمايش وبلاگ به شما نشون مي‌ده).
خب، سنگ اول: ساعت MT بايد با ساعت خونة شما يكي باشه. اگه نبود، قبل از هر كاري برين TimeZone رو توي تنظيمات وبلاگتون تصحيح كنين و دوباره وبلاگتون رو ببينين.
خب حالا، اگه ساعت php و ساعت MT يكي بودن، يعني هر دوشون با ساعت خونة شما يكي بودن، همون كدي كه قبلاً نوشته شده بود، كفايت مي‌كنه. البته اگه توي وبلاگتون تقويم دارين، بايد يه كارهاي ديگه‌اي هم كرد كه بعداً به اون خواهيم پرداخت.
اما اگه اين دو ساعت يكي نيستن، بايد كدتون رو تغيير بدين.
در اينصورت كد زير رو ترجيحاً توي قسمت head قالب وبلاگتون، مثلاً بعد از <script/> اضافه كنين:
[code:1]<?
//Server TimeZone is -05:00 US TimeZone
$ServerTimeZoneH=5;
$ServerTimeZoneM=0;
$ServerTimeZoneS=-1;
$BlogTimeZone="<$MTBlogTimezone$>"; #Iran TimeZone

if ($BlogTimeZone{0}=="-") {
$BlogTimeZoneS=-1;
} else {
$BlogTimeZoneS=1;
}
$BlogTimeZoneH=intval(substr($BlogTimeZone, 1, 2));
$BlogTimeZoneM=intval(substr($BlogTimeZone, 4, 2));

$DH = $BlogTimeZoneH * $BlogTimeZoneS - $ServerTimeZoneH * $ServerTimeZoneS;
$DM = $BlogTimeZoneM * $BlogTimeZoneS - $ServerTimeZoneM * $ServerTimeZoneS;

$MyCurrentLocalTime=date("Y m d H i s", mktime(date("H") + $DH, date("i") + $DM, date("s"), date("n"), date("j"), date("Y")));
?>[/code:1]
اگه دقت كنين از دو تا TimeZone استفاده شده. چون معمولاً Server ها توي امريكا واقع شده‌ن، من يه TimeZone فرضي براي Server ام توي امريكا در نظر گرفته‌ام. مي‌دونيم كه توي امريكا TimeZone هاي مختلفي داريم. اگه با اين اعداد، ساعت شما تصحيح نشده بود (كه نحوة فهميدنش رو الان بهتون مي‌گم)، اين عدد رو طوري تنظيم كنين كه ساعت درست بهتون نمايش داده بشه.
نحوة تغييرش هم بسيار ساده‌س. اگه نگاه كنين توي سه خط اول، به سه تا متغير، سه تا عدد نسبت داده شده. 5 يعني ساعت 5، 0 يعني دقيقة صفر و 1- هم يعني اين عدد منفيه (TimeZone امريكا منفيه).
خب كد قبلي‌اي كه نوشتيم كه زمان‌هاي مختلف رو بهتون نشون مي‌داد رو هم، اينجوري اصلاح كنين:
[code:1]<!-- Times!!! -->
<p><div style="Text-Align: Left">
<?
print("PHP: ");
print (date("Y m d H i s"));
print("");
print("Mine: $MyCurrentLocalTime");
print("MT: ");
?>
<$MTDate format="%Y %m %d %H %M %S"$>
TimeZone: <$MTBlogTimezone$>
</div>[/code:1]
خب، حالا توي ليست زمان‌ها، يه Mine هم اضافه شده كه باز بايد با ساعت خونة شما يكي باشه. اگه نيست، ببينين اختلافش چقدره و با تغيير اون اعداد 5 و صفر، توي سه خط اول كد بالا، به جايي برسين كه Mine زمان درست رو بهتون نشون بده. يادتون نره كه با هر تغيير ساعت، بعد از Save كردن قالب وبلاگ، اون رو دوباره‌سازي كنين و دوباره توي پنجره‌اي كه وبلاگتون رو نشون مي‌ده، F5 بزنين و نتيجه رو ببينين.
مثلاً اگه Server شما توي قسمت‌هاي غربي‌تر امريكا واقع شده باشه TimeZone مثلاً مي‌شه 7:30 منفي، يعني اون سه خط اول رو بايد اينجوري عوض كنين:
[code:1]$ServerTimeZoneH=7;
$ServerTimeZoneM=30;
$ServerTimeZoneS=-1;[/code:1]
خب، حالا فرض مي‌كنيم كه شما با يكي دوبار آزمون و خطا و يا اگه باهوش بوده باشين، با محاسبة اختلاف ساعت و تنظيم دقيق اعداد فوق، الان ديگه ساعت Mine با ساعت خونه‌تون يكي شده.
حالا ديگه مي‌تونين اون قسمتي كه ساعت‌ها رو نمايش مي‌ده بهتون، از توي قالب وبلاگ حذف كنين، يا كامنتش كنين (يعني اينجوري:
[code:1]<!-- Times!!!
<p><div style="Text-Align: Left">
<?
print("PHP: ");
print (date("Y m d H i s"));
print("MT: ");
?>
<$MTDate format="%Y %m %d %H %M %S"$>
TimeZone: <$MTBlogTimezone$>
</div>
-->[/code:1]
تا در مواقع لزوم دوباره از كامنت درش بيارين و ازش استفاده كنين و يا اصلاً بذارين باشه!
حالا بايد قسمت مقايسة زمان مطلب نوشته شده، با زمان نمايش صفحه رو تصحيح كنيم، تا وقتي كه يه نفر وبلاگ شما رو مي‌خونه، مطالبي رو كه براي انتشار در آينده نوشتين، بهش نشون داده نشه.
پس توي قالب وبلاگتون، بلافاصله بعد از <MTEntries> خطوط زير رو اضافه كنين:
[code:1]<?
if ($MyCurrentLocalTime >= "<$MTEntryDate format="%Y %m %d %H %M %S"$>")
{
?> [/code:1]
و نيز بلافاصله قبل از <MTEntries/> كد زير رو اضافه كنين:
[code:1]<? } ?>[/code:1]
حالا بايد اين قالب رو Save كنين و همه چي تمومه. از اين به بعد كافيه كه مطلبتون رو كه مي‌خواين بعداً منتشر بشه، اول توي حالت پيش‌نويس منتشرش كنين. بعد كه ثبت شد، زمان انتشار اون رو به زمان دلخواه خودتون تغيير بدين و اين بار در حالت منتشر شده، ثبتش كنين.
البته يادمون نمي‌ره كه همون اول اول، بايد خروجي قالب رو از index.html به index.php تغيير مي‌داديم و ضمناً index.html رو پاك مي‌كرديم.
والسلام!
 

knowhow

مدیران قدیمی
تاریخ عضویت
25 دسامبر 2002
نوشته‌ها
3,478
لایک‌ها
22
اين روش خيلي خوبيه .
ولي من فكر كنم استفاده از كرون جاب بهتر باشه.
چون در اين روش در واقع مطلب شما پابليش شده فقط نمايش داده نمي شه.
ولي در كرون جاب مطلب شما در ساعت مورد نظر خودش پابليش مي شه !!.
البته من اصلا كرون جاب بلد نيستم و خواهش مي كنم اگه كسي بلده بياد و يك توضيحي بده.
 

Ghazmar

Registered User
تاریخ عضویت
27 دسامبر 2002
نوشته‌ها
766
لایک‌ها
3
آره حرفت درسته. از كرون جاب هم مي‌شه استفاده كرد. منتها به شرطي كه سيستم عاملت يونيكسي باشه. بعداً مفصل‌تر مي‌نويسم در موردش. چون خيلي مطمئن نيستم كه چه اسكريپتي رو بايد اجرا كرد براي منتشر كردن مطلب و اينا.
برمي‌گردم! :)
 

Ghazmar

Registered User
تاریخ عضویت
27 دسامبر 2002
نوشته‌ها
766
لایک‌ها
3
والا من الان نشستم يه خورده فكر كردم ببينم چيزي كه محمدرضا مي‌گه چه جوري ممكنه، ولي ديدم نمي‌دونم! حالا يه مقدار توضيح مي‌دم، باقيش با خودش!
من با Cron Job اي كه توي CPanel هست كار نكردم. ولي اصولاً توي UNIX يه چيزي هست به اسم Cron Tab. اين Cron Tab يه جدوله كه مي‌شه مشخص كرد كه يه كاري سر يه ساعت مشخص انجام بشه. حالا اون كار، مي‌تونه يه فرمان UNIX يا يه Shell Script باشه. به عبارتي هر چيزي كه امكان اجرا شدن داشته باشه. بنابراين امكان اين رو كه سر يه زمان مشخصي يه كاري بكنيم رو داريم.
حالا در اين مورد خاص، ما كارمون اينه كه مي‌خوايم سر يه ساعت مشخصي، يه نوشته رو توي وبلاگ MT مون منتشر كنيم.
به نظر من دو راه رسيد.
يكي اينكه نوشتة ما يه جايي، مثلاً توي يه فايل متني، ذخيره بشه و توي CronTab به MT اعلام كنيم كه رأس فلان ساعت بيا برو يه نوشتة جديد رو از توي فلان فايل بردار و منتشرش كن.
يا اينكه نوشته رو توي همون MT بنويسيم، منتها وضعيتش «پيش‌نويس» باشه و توي CronTab بگيم كه رأس يه ساعت مشخص، بياد وضعيت نوشته رو از «پيش‌نويس» به «منتشر شده» تغيير بده و دوباره‌سازي كنه.
حالا اينكه كدوم اينا عمليه و چه جوري بايد اين كار رو كرد، به تخصص MT برمي‌گرده كه من اينكاره نيستم! اونش رو خود محمدرضا و احسان و بقية متخصصين MT بايد بگن.
اما در مقابل روشي كه بالا مطرح شده، عليرغم اينكه حرف محمدرضا درسته و مطلب منتشر مي‌شه، اما نشون داده نمي‌شه، به نظر بسيار ساده‌تر مي‌آد. بعبارتي قضيه داخل خود MT حل و فصل مي‌شه.
حالا بايد ديد كه اين راه حل جديد عملي هست يا نه و اگه هست، دقيقاً چه جوري. شايد اين راه جديد، خيلي هم ساده‌تر باشه...
اين چيزي بود كه به ذهن من مي‌رسيد.
 

root

Registered User
تاریخ عضویت
29 آگوست 2003
نوشته‌ها
154
لایک‌ها
2
والله تا اونجايي كه من فهميدم منظورت از MTهمونMvableTypeبايد باشه اگه همون مووبل تايپ تو همون بخش مووبل تايپ بنويس فكر كنم اينطوري بهتي باشه
 

root

Registered User
تاریخ عضویت
29 آگوست 2003
نوشته‌ها
154
لایک‌ها
2
والله تا اونجايي كه من فهميدم منظورت از MTهمونMvableTypeبايد باشه اگه همون مووبل تايپ تو همون بخش مووبل تايپ بنويس فكر كنم اينطوري بهتي باشه
 

knowhow

مدیران قدیمی
تاریخ عضویت
25 دسامبر 2002
نوشته‌ها
3,478
لایک‌ها
22
آره ولي چون ترفند پي اچ پي بود بهتره همينجا هم باشه !!!

خوب در مورد اين روش بايد بگم قضمر من هم هرچي فكر مي كنم همين راهت بهترين راهه.
ولي براي كرون جاب فكر كنم مي شه يك اسكريپت اس كيو ال نوشت كه سر يك ساعت كرون تب اجراش كنه و اون كارش اين باشه كه مثلا همه پستهاي پيش نويس را پابليش كنه و يا ....
كه البته فكر مي كنم براي اين منظور توي ام تي اين راه مناسبي نيست و همون راه خودت بهترين راه است.
 
بالا