يکي از کاربران (arkco عزيز) در انجمنها سؤالي در مورد ساخت کدي براي نمايش اوقات شرعي در سايت پرسيده بودند و من توضيحي ارائه کردم که فکر ميکنم براي ديگران هم مفيد باشد. بنابراين، متن سؤال و متن جواب را اينجا ميآورم:
سؤال: می خواستم کد نمایش اوقات شرعی شهر خودم را درست
کنم به طوری که هر روز خود به خود آپدیت شود و اوقات شرعی مربوط به همان روز را
نمایش دهد .
لطفا مرا در این کار راهنمایی کنید .
متن جواب:
سلام؛arkco, جان، من روشي که در ساوهسرا به کار بردم رو توضيح ميدم، اما روشهاي سادهتر و کارآمدتري هم هست که دربارهش صحبت ميکنم.
راحتترين کار و البته زمانبرترين راه، راهي هست که من در ساوهسرا انجام دادم.
من چي کار کردم؟
1- رفتم سايت Owghat.com که فکر ميکنم الان در دسترس نباشه.
به هر حال، اوقات شرعي هر روز سال رو به دست آوردم. همونطور که ميدونيد، اين ساعات براي ما که تقويم شمسي داريم، ثابت هستند. يعني اگر الان ساعت 8 خورشيد غروب ميکنه، سال ديگه همين روز، خورشيد در همين ساعت 8 غروب ميکنه.
پس اگر شما کل اوقات روزهاي سال رو به دست بياريد، کار تمومه.
در سايت owghat.com کافي بود شهرتون رو بگيد و اوقات هر روز رو بگيريد.
2- حالا بايد اوقات هر روز رو به عکس تبديل کنيد. يعني 365 عکس داشته باشيد که داخل يک پوشه بريزيدشون.
فقط ميمونه نام عکسها.
مثلا اين عکس رو ببينيد:
http://savehsara.aftab.cc/modules/Owghat/owghat/6-5.gif
به نام عکس دقت کنيد و به تاريخ امروز.
امروز 5 شهريور(6) 1387 هست و نام عکس 5-6 که اوقات شرعي امروز مربوط به ساوه رو نشون ميده.
خوب، فکر ميکنم متوجه شديد.
3- فقط کافيه که بتونيد با استفاده از يک زبان مثل PHP کدي بنويسيد که شماره ماه شمسي رو به دست بياره و درج کنه، بعد يک خط تيره بذاره و بعد، شماره روز رو درج کنه، با اين کار ميتونيد اسم فايل و در نتيجه اوقات شرعي اون روز رو به دست بياريد
همين!
حالا اون عکس رو با اطلاعاتي که خواستيد، مثل اين صفحه در يک صفحه سفيد چاپ ميکنيد و با استفاده از يک iframe در وبلاگ کاربر نمايش ميديد.
مثلاً اگر کد زير رو داخل وبلاگتون قرار بديد، اوقات شرعي ساوه نمايش داده خواهد شد:
کد: |
<iframe src="http://savehsara.aftab.cc/modules/Owghat/" frameborder="0" width="100%" scrolling="no" height="170" /></iframe> |
در مورد کد PHP هم يه توضيح بدم. من با استفاده از تابعي jdate که توسط دوستان خوب ايراني نوشته شده، به تاريخ شمسي دسترسي دارم.
متأسفانه سايتي که فايل jdf.php رو منتشر ميکرد، الان ديگه فعاليت نميکنه، اما مهم نيست، من آپلود کردم، ميتونيد دانلود کنيد: jdf.php
اگر اين فايل رو include کنيد، مثل تابع date در پي.اچ.پي، به تاريخ شمسي (جلالي) دسترسي داريد، فقط از اين به بعد مثلاً به جاي
کد: |
echo date ('F'); |
اين کد، نام ماه رو به ميلادي درج ميکنه.
بنويسيد:
کد: |
echo jdate ('F'); |
اين کد، نام ماه رو به شمسي تايپ ميکنه.
ميتونيد با توجه به اطلاعات تابع date در سايت php.net از jdate استفاده کنيد.
حالا با چهار خط کد ميشه عکس اوقات شرعي امروز رو پرينت گرفت:
کد: |
require_once ("jdf.php"); $month_num = jdate ('n'); $day_num = jdate ('j'); echo "<img src="http://savehsara.aftab.cc/modules/Owghat/owghat/$month_num-$day_num.gif" />"; |
توضيح در مورد کد بالا:
ابتدا فايل jdf رو ايمپورت کرديم.
بعد، شماره ماه شمسي رو ريختيم داخل متغير month_num
بعد، شماره روز شمسي رو ريختيم داخل day_num
بعد، گفتيم عکسي که در مسير http://savehsara.aftab.cc/modules/Owghat/owghat هست و نامش مساوي است با (gif.شماره روز-شماره ماه) پرينت بگير.
حالا اوقات شرعي امروز نمايش داده خواهد شد
من اين کد رو زماني که هيچي از زبان برنامهنويسي نميدونستم نوشتم بنابراين، الگوريتم بهينه نيست.
تهيه عکسها ممکنه کمي زمانبر باشه.
از طرفي اگر ساعتها جلو و عقب کشيده بشه، شما نميتونيد زمانها رو تنظيم کنيد.
همونطور که ميدونيد، سايت owghat.com هم طبق يک الگوريتم اين زمانها رو به دست ميياره.
پس اگر شما اون الگوريتم رو به دست بياريد، ميتونيد سيستمتون رو خيلي پيشرفتهتر کنيد.
مثلاً طوري کدنويسي کنيد که همه کاربران ايراني از سيستم شما استفاده کنند! فقط کافيه نام شهرشون رو بدن و کدي دريافت کنند که با قرار دادن اون در وبلاگشون اوقات شرعي شهرشون در وبلاگشون نمايش داده بشه. چون شما ديگه الگوريتم داريد نه چند تا عکس مخصوص يک شهر!
مشکل جلو و عقب بودم ساعتها هم حل ميشه!
فقط کافيه چک کنيد که اگر شماره ما کمتر يا مساوي 6 (يعني کمتر از 7) بود، ساعات رو به علاوهي 1 کنه و نمايش بده.
اما الان من مجبور شدم در الگوريتم خودم، چک کنم که اگر شماره ماه کمتر از 6 بود، زير عکس بنويسه "به ساعت قديم"
کد: |
if ($month_num<7)
echo '<span style="color:#999999; font-size:8pt; font-family:Tahoma;">به ساعت قديم</span>'; |
اميدوارم تونسته باشم توضيح کاملي ارائه کنم.