PDA

View Full Version : تاریخ شمسی در شیرپوینت 2013 با استفاده JQuery



حسین نیک پور
شنبه 24 اسفند 1392, 12:43 عصر
با سلام
میخواهم آمزش استفاده از Jquery برای فارسی کردن تاریخ شیرپوینت را توضیح بدم

خوب برای شروع باید بگم که تمام کد ها رو دون یک فایل خارجی قرار می دهم پس موارد زیر را در مستر پیج خود لود کنید !


<script type="text/javascript" src="../_layouts/15/folderName/jquery-1.10.2.js"></script>
<script type="text/javascript" src="../_layouts/15/folderName/FileName.js"></script>

folderName و FileName را با نام های مناسب جای گزین کنید.

خب کد را به چند دسته تقسیم می کنیم
1. تاریخ شمسی در View ها
2. تاریخ شمسی در فرم Display
3. تاریخ شمسی در فرم new
4.تاریخ شمسی در فرم Edit
5.تاریخ شمسی در فرم های Infopath
6. .......


البته دوستان عزیز من در این زمینه مبتدی هستم و دوستان حرفه ای تر اگر جایی نکته ای یا ایرادی دیدند یادآوری کنند ممنون میشم

حسین نیک پور
شنبه 24 اسفند 1392, 13:13 عصر
در اولین مرحله باید در مستر پیج فایل js خود را صدا بزنیم

<script> $(document).ready(function () {
changeDate();
});
</script>

در فایل js نیز کد های زیر را وارد کنید تا در view ها تاریخ شمسی شود

function changeDate() {


$('.ms-noWrap').each(function () {
if ($(this).text().match('\\d{1,2}\\/\\d{1,2}\\/\\d{4}')) {
$(this).text(convert($(this).text()));
}
});
function convert(txt) {
ENtxt = txt.match('\\d{1,2}\\/\\d{1,2}\\/\\d{4}')[0];


splitter = ENtxt.split('/');
Year = new Number(splitter[2]);
Month = new Number(splitter[0]);
Day = new Number(splitter[1]);
shamsiDate = SHDate(Year, Month, Day);
return txt.replace(ENtxt, shamsiDate)
}

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

function plus(year) { return year % 4 == 0 && (year % 100 != 0 || year % 400 == 0) ? 1 : 0; } function SHyear(year, month, day) { if (month <= 3 && day < 21 - plus(year)) return year - 622; else return year - 621; }
function SHmonth(year, month, day) {
condition = new Array(21, 20, 21, 21, 22, 22, 23, 23, 23, 23, 22, 22);
month_first = new Array(10, 11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9);
month_second = new Array(11, 12, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10);
if (day < condition[month - 1] - plus(year))
return month_first[month - 1];
else return month_second[month - 1];
}
function SHday(year, month, day) { condition = new Array(21, 20, 21, 21, 22, 22, 23, 23, 23, 23, 22, 22); plus_first = new Array(10, 11, 9, 11, 10, 10, 9, 9, 9, 8, 9, 9); plus_second = new Array(20, 19, 20, 20, 21, 21, 22, 22, 22, 22, 21, 21); if (day < condition[month - 1] - plus(year)) return day + plus_first[month - 1] + plus(year); else return day - plus_second[month - 1] + plus(year); }
function SHDate(year, month, day) { return SHyear(year, month, day) + "/" + SHmonth(year, month, day) + "/" + SHday(year, month, day); }

حسین نیک پور
دوشنبه 26 اسفند 1392, 11:25 صبح
در ایم مرحله در ِdisplay فرم ها تاریخ را به شمسی تبدیل می کنیم

$('[id *= SPFieldDateTime]').each(function () {
if ($(this).text().match('\\d{1,2}\\/\\d{1,2}\\/\\d{4}')) {
$(this).text(convert($(this).text()));
}
});

کد زیر نیز برای تغییر Created , modify Date می باشد

$("span[id*='toolBarTbl']").each(function () {
if ($(this).text().match('\\d{1,2}\\/\\d{1,2}\\/\\d{4}')) {
$(this).text(convert($(this).text()));
}
});

حسین نیک پور
شنبه 16 فروردین 1393, 09:24 صبح
برای حالت new و edit هم می توانید از این کد استفاده کنید

//for hide old picker
$('.ms-dtinput a[onclick^="clickDatePicker"]').hide()
//for add new picker
$('.ms-dtinput input[type=text]').each(function () {
$(this).addClass('hndp');
$(this).val(convert($(this).val()));
$(this).datepicker({
changeMonth: true,
changeYear: true,
isRTL: true,
dateFormat: "yy/mm/dd"
});
});




برای Date Picker من از bootstrap فارسی استفاده کردم شما می توانید آن را جایگزین کنید

حسین نیک پور
شنبه 16 فروردین 1393, 09:27 صبح
در اخرین مرحله شما باید قبل از save شدن فرم تاریخ را به میلادی برگردانده و ذخیره کنید


$('input[type=button]').filter('input[id$="SaveItem"]').each(function () {
$(this).removeAttr('onclick');
var btn = $(this).attr('name');
$(this).on('click', function () {


changePersianDates();


if (!PreSaveItem()) {
console.log('ev : ' + PreSaveItem());
return false;
}


WebForm_DoPostBackWithOptions(new WebForm_PostBackOptions(btn, "", true, "", "", false, true));

});


});

function changePersianDates() {


$('.hndp').each(function () {


if ($(this).val()) {
splitter = $(this).val().split('/');


Year = new Number(splitter[0]);
Month = new Number(splitter[1]);
Day = new Number(splitter[2]);
if (Year < 1400) {
var j = persian_to_jd(Year, Month, Day);
perscal = jd_to_gregorian(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 miladiDate = pmonth + "/" + pday + "/" + pyear;


fName = $(this).attr('id').split('_')[0];
$('input[id $="' + fName + '"]').val(miladiDate);
}


}
});
}

gprsm0
شنبه 17 خرداد 1393, 14:10 عصر
سلام دمت گرم
منتها یک سوال توی سیستم های integrate شده با crm یا exchange مسئله calendar خیلی مهمه بویژه بر سر appointment هایی که هر کاربر برا خودش میگذاره
می خواستم بپرسم آیا با این روش هم میشه این قضیه رو یک جورایی حلش کرد؟
ولی واقعا دمت گرم
خیلی نیازم بود

mona11
سه شنبه 10 تیر 1393, 12:07 عصر
دوست عزیز،روش بالا در فرم های اینفوپث جواب نمی دهد مگر اینکه از وب پارت اینفوپث ویوئر استفاده شود که این مورد هم با کلی مشکل مواجه است.یکی ازمشکلاتش این هست که هر بار که فرم اینفوپث رو پابلیش میکنید ،به هر المنت،آیدی جداگانه ای اختصاص می دهد و بنابراین کدهای نوشته شده،آیدی قبلی را نمی شناسند.

حسین نیک پور
یک شنبه 15 تیر 1393, 13:36 عصر
بله حق با شماست

شما راه حلی براش دارین؟

حسین نیک پور
یک شنبه 15 تیر 1393, 13:41 عصر
سلام دمت گرم
منتها یک سوال توی سیستم های integrate شده با crm یا exchange مسئله calendar خیلی مهمه بویژه بر سر appointment هایی که هر کاربر برا خودش میگذاره
می خواستم بپرسم آیا با این روش هم میشه این قضیه رو یک جورایی حلش کرد؟
ولی واقعا دمت گرم
خیلی نیازم بود

دوست عزیز توی دنیای وب هر کاری قابل انجام است وقت باید روش وقت گذاشت

من خودم انجام ندادم ولی calendar شیر پوینت رو می شه فارسی کرد منتها تمام جاهایی رو هم که داره از اون استفاده میکنه باید تغییر داد

maleki74
چهارشنبه 19 آذر 1393, 15:20 عصر
جناب نیک پور با سلام و خسته نباشید
راستش من تازه کارم اما با سرچ تونستم مراحل بالا رو انجام بدم اما نه تقویم شمسی شد و نه DatePicker شمسی شد
فایل jquery-1.10.2.js رو از سایت مرجعش دانلود کردم و توی یه پوشه بنام shamsi توی درایو c روی سرور قراردادم
یه فایل js بنام مثلا shamsi.js درست کردم و تمامی کدهای ذکر شما رو توی اون وارد کردم بجز دو خط :
<script type="text/javascript" src="../_layouts/15/shamsi/jquery-1.10.2.js"></script>
<script type="text/javascript" src="../_layouts/15/shamsi/shamsi.js"></script>

که اونها رو توی مسترپیج سایتم که اسمش seattle.master بود قبل از تگ body قرار دادم

بعدش توی iis روی سرور یه پوشه مجازی توی اون مسیری که فرمودید درست کردم و
اشاره دادم به پوشه shamsi که روی درایو c سرور داشتم و دو تا فایل js یعنی shamsi.js وjquery-1.10.2.js توش بودن
ولی هیچ اتفاقی نیفتاد حتی از فرمان iisreset هم استفاده کردم
لطفا اگه راهنمایی بفرمایید سپاسگزار خواهم بود،ضمنا شیرپوینت من 2013 هستش

حسین نیک پور
سه شنبه 25 آذر 1393, 08:29 صبح
دوست عزیز احتمالا با روشی که شما توضیح دادید فایل های js در صفحه لود نشده اند!

پیشنهاد میکنم
1.فایل های جاوای اسکریپت رو در داخل پوشه ای در فولدر Layout کپی کنید و از انجا ادرس دهید.
2. روش لود کردن اسکریپت ها را در شیرپوینت 2013 متفاوت است.