نمایش نتایج 1 تا 33 از 33

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

Threaded View

پست قبلی پست قبلی   پست بعدی پست بعدی
  1. #1

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

    در مجموعه مقالاتی که خدمت شما ارائه خواهم کرد در مورد پیاده سازی تقویم شمسی با استفاده از امکانات جاوا اسکریپت و 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{4}\\/\\d{2}\\/\\d{2}";



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

    var tags = document.getElementsByTagName('TD');

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

    {

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

    var TdClassName = tags[i].className;

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

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

    {

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

    dateValue = tags[i].innerText;

    var regx = new RegExp(RegExPattern, "g");

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

    if (regx.test(dateValue))

    {



    Year = new Number(dateValue.substring(0, 4));

    Month = new Number(dateValue.substring(5, 7));

    Day = new Number(dateValue.substring(8, 10));



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

    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;



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

    tags[i].innerText = shamsiDate;

    }



    }

    }



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

    var GREGORIAN_EPOCH = 1721425.5;

    function leap_gregorian(year) {

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

    (!(((year % 100) == 0) && ((year % 400) != 0)));

    }





    function gregorian_to_jd(year, month, day) {

    return (GREGORIAN_EPOCH - 1) +

    (365 * (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 == 1029982) {

    ycycle = 2820;

    } else {

    aux1 = Math.floor(cyear / 366);

    aux2 = mod(cyear, 366);

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

    aux1 + 1;

    }

    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 و نحوه ذخیره تاریخ های شمسی خواهیم پرداخت .
    امیدوارم که این مقاله برای شما مورد استفاده قرار گرفته باشد .

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

    رامین احمدی
    آخرین ویرایش به وسیله rtech : شنبه 24 فروردین 1392 در 23:36 عصر

تاپیک های مشابه

  1. کمک در باره پیاده سازی درخت شجره نامه فامیلی با استفاده از روابط درخت در ساختمان داده ها
    نوشته شده توسط erfan121 در بخش الگوریتم، کامپایلر، هوش مصنوعی و ساختمان داده ها
    پاسخ: 0
    آخرین پست: چهارشنبه 08 تیر 1390, 10:43 صبح
  2. ارور در استفاده از جاوا اسکریپت
    نوشته شده توسط fabdolkarimi در بخش طراحی وب (Web Design)
    پاسخ: 4
    آخرین پست: چهارشنبه 18 اردیبهشت 1387, 15:56 عصر
  3. ارور در استفاده از جاوا اسکریپت
    نوشته شده توسط fabdolkarimi در بخش طراحی وب (Web Design)
    پاسخ: 2
    آخرین پست: سه شنبه 17 اردیبهشت 1387, 13:23 عصر
  4. اضافه کردن ایتم به asp :dropdownlistبا استفاده از جاوا اسکریپت
    نوشته شده توسط negar_1986 در بخش طراحی وب (Web Design)
    پاسخ: 2
    آخرین پست: پنج شنبه 29 آذر 1386, 02:16 صبح
  5. پاسخ: 1
    آخرین پست: یک شنبه 02 اسفند 1383, 09:44 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •