پیاده سازی تقویم شمسی در شیرپوینت با استفاده از جاوا اسکریپت ( قسمت اول )

 خدمت تمامی دوستان عزیز سلام عرض میکنم ، سال نو رو به همه شما عزیزان تبریک
عرض میکنم و امیدوارم که سالی خوب و خوش در کنار تازه رسیده خودمون یعنی شیرپوینت
۲۰۱۳ داشته باشید !

مدت زمان زیادی بود که در خدمت شما عزیزان نبودم ، گرفتاری های زیادی در پروژه
ها و تدریس دوره های توسعه شیرپوینت داشتم و اخیرا هم آزمون های شیرپوینت ۲۰۱۰ رو
پشت سر گذاشتم و موفق شدم مدارک ۵۷۳-۷۰ و ۵۷۶-۷۰ رو با موفقیت دریافت کنم .

در مجموعه مقالاتی که خدمت شما ارائه خواهم کرد در مورد پیاده سازی تقویم شمسی با استفاده از امکانات جاوا اسکریپت و Jquery صحبت خواهد شد و به شما آموزش خواهم داد چگونه بدون استفاده از کدهای سمت سرور بتوانید تقویم شمسی را در شیرپوینت مورد استفاده قرار دهید ، این روش ضعف هایی هم دارد ولی به هر حال میتواند کمک زیادی به شما در یادگیری و استفاده از تقویم شمسی داشته باشد .

تغییر تاریخ ها در نمای لیست

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

 همانطور که مشاهده میکنید در این مثال که یک لیست از نوع وظایف را نمایش می دهد
دو ستون به نامه های تاریخ شروع و تاریخ انجام وجود دارد که تاریخ های میلادی در
این نما کاملا مشخص هستند.

اگر نگاهی به سورس صفحه داشته باشید خواهید دید که هر یک از سطرهای این نما که
به صورت جدول ذخیره شده اند دارای
TD هایی هستند که مقدار Class آن ها برابر ms-vb2 میباشد .

اگر بخواهیم مقادیر این تاریخ ها رو تغییر دهیم نیاز داریم یک Loop ساده بین تمام
تگ های
TD این صفحه ایجاد کرده و تاریخ ها رو تشخیص و
تغییر دهیم .

برای اینکه این کد قابل دسترسی در تمام لیست ها باشد ، ابتدا شیرپوینت دیزاینر
را باز کرده و
Master Page پیش فرض سایت را در حالت ویرایش قرار دهید و
درست قبل از بسته شدن تگ
Body ( مقدار </body> را جستجو کنید
) کد های زیر را وارد نمایید.

<script type=”text/javascript”>

                   // متغیر های مورد نیاز

                   var Day;

                   var Month;

                   var Year;

                   var pday;

                   var pmonth;

                   var pyear;

                  

                   // الگوی تشخیص مقادیر تاریخ

var RegExPattern = “\\d{1}\\/\\d{2}\\/\\d{4}”;

var RegExPattern2 = “\\d{2}\\/\\d{2}\\/\\d{4}”;

// دریافت تمام تگ های تی دی در صفحه

var tags = document.getElementsByTagName(‘TD’);

for (var i = 0; i < tags.length; i++) 

// دریافت مقدار کلاس تگ

var TdClassName = tagsIdea.className;

 

// چک کردن مقدار

if (TdClassName .indexOf(‘ms-vb2’) != -1)

{

// ذخیره مقدار درون تگ

if(document.all){

dateValue = tagsIdea.innerText;

} else{

dateValue = tagsIdea.textContent;

}

var regx = new RegExp(RegExPattern, “g”);

var regx2 = new RegExp(RegExPattern2, “g”);

// چک کردن اینکه آیا مقدار درون تگ از نوع تاریخ می باشد یا خیر

if (regx.test(dateValue) || regx2.test(dateValue)) 

{

var splitter = dateValue.split(‘/’);

Year = new Number(splitter[2]);

Month = new Number(splitter[0]);

Day = new Number(splitter[1]);

// تبدیل تاریخ میلادی به شمسی

var j = gregorian_to_jd(Year,Month,Day);

perscal = jd_to_persian(j);

pyear = perscal[0];

pmonth = perscal[1];

pday = perscal[2];

if(Number(pmonth) < 10)

pmonth = “0” + pmonth;

 

if(Number(pday) < 10)

{

pday = “0” + pday;

}

// ذخیره مقدار تاریخ شمسی

var shamsiDate = pyear + “/” + pmonth + “/” + pday;

// جایگذاری مقدار تاریخ میلادی با شمسی

if(document.all){

tags.innerText = shamsiDate;

} else{

tags.textContent = shamsiDate;

}

}

}

}

                   // توابع تبدیل تاریخ

                   var GREGORIAN_EPOCH
= ۱۷۲۱۴۲۵٫۵;

                   function
leap_gregorian(year) {

                             return
((year % 4) == 0) &&

                                                (!(((year
% ۱۰۰) == ۰) && ((year % 400) != 0)));

                   }

 

 

                   function
gregorian_to_jd(year, month, day) {

                             return
(GREGORIAN_EPOCH – 1) +

                                         (۳۶۵ * (year – 1)) +

                                         Math.floor((year – 1) / 4) +

                                         (-Math.floor((year – 1) / 100)) +

                                         Math.floor((year – 1) / 400) +

                                         Math.floor((((367 * month) – 362) / 12) +

                                         ((month <= 2) ? 0 :

                                                                                         (leap_gregorian(year) ? -1 : -2)

                                         ) +

                                         day);

                   }

 

                   function jd_to_persian(jd)

                   {

                             var year,
month, day, depoch, cycle, cyear, ycycle,

                                      aux1,
aux2, yday;

 

 

                             jd =
Math.floor(jd) + 0.5;

 

                             depoch =
jd – persian_to_jd(475, 1, 1);

                             cycle =
Math.floor(depoch / 1029983);

                             cyear =
mod(depoch, 1029983);

                             if (cyear
== ۱۰۲۹۹۸۲) {

                                      ycycle
= ۲۸۲۰;

                             } else {

                                      aux1
= Math.floor(cyear / 366);

                                      aux2
= mod(cyear, 366);

                                      ycycle
= Math.floor(((2134 * aux1) + (2816 * aux2) + 2815) / 1028522) +

                                                                   aux1
+ ۱;

                             }

                             year =
ycycle + (2820 * cycle) + 474;

                             if (year
<= 0) {

                                      year–;

                             }

                             yday =
(jd – persian_to_jd(year, 1, 1)) + 1;

                             month =
(yday <= 186) ? Math.ceil(yday / 31) : Math.ceil((yday – 6) / 30);

                             day = (jd
– persian_to_jd(year, month, 1)) + 1;

                             return
new Array(year, month, day);

                   }

</script>

 همانطور که میدانید در جاوا اسکریپت قابلیت استفاده از regular
expression
وجود دارد ، ما الگویی را برای تشخیص تاریخ تعریف نمودیم و سپس با
استفاده از متد
getElementsByTagName مجموعه ای از
المنت های
TD را در متغیری ذخیره نمودیم . سپس با یک Loop تک به تک تگ ها
را چک نمودیم ، برای اینکه کارایی بالاتر رود و تگ های نا مربوط حذف گردند ما یک
شرط در اینجا قرار دادیم تا فقط تگ هایی که نام کلاس آن ها
ms-vb2 می باشد را
مورد بررسی قرار دهد .

سپس مقدار داخلی تگ را در متغیری ذخیره و با متد regx.test چک خواهیم کرد
که آیا مقدار تگ از نوع تاریخ است یا خیر ، اگر مقدار از نوع تاریخ باشد با
استفاده از توابع تبدیل تاریخ ها ، تاریخ میلادی را به تاریخ شمسی تبدیل و مقدار
جدید را جایگزین مقدار قبلی می نماییم .

اگر فایل را ذخیره نمایید و صفحه را مجدد بارگذاری کنید ، تاریخ ها به شکل زیر
تغییر خواهند نمود :
به این شکل در اولین گام تاریخ های میلادی در تمام لیست ها و مخازن اسناد شما
به تاریخ شمسی تبدیل شدند !

 

فکر میکنم هیجان زده شده اید برای تغییر قسمت های دیگر ، مثل لیست های از نوع
تقویم و یا
Date Picker شیرپوینت . برای شروع همین تمرین را انجام
دهید ، در قسمت بعدی به  تغییر
Date
Picker
و نحوه ذخیره تاریخ های شمسی خواهیم پرداخت .

امیدوارم که این مقاله برای شما مورد استفاده قرار گرفته باشد .


اگر کدها ناخوانا هستند میتوانید فایل اسکریپت مربوطه را از اینجا دریافت نمایید.

موفق و پیروز باشید.

1 نظر

پاسخ دهید