irandnn
New Member
قبل از هرکاری باید بدانید که شرکت Microsoft در Net Framework 2.0. و بالاتر بحث تقویم شمسی را پیاده سازی نموده و ما برای شمسی سازی Application های خود تنها کافی است تا طرز بکار گیری آن را فرا بگیریم. بنابراین لازم به یادآوری است که آموزشی که در این قسمت ارائه می شود نه تنها پرتال Dotnetnuke بلکه قابلیت شمسی سازی تمام Application های تحت وب و ویندوز شما را دارا می باشد.
بطور کلی برای شمسی سازی پرتال Dotnetnuke دو فایل Default.aspx.vb و js/Popupcalendar.js می بایست ویرایش گردند. برای انجام این کار ابتدا فایل Default.aspx.vb را باز نموده و تغییرات زیر را اعمال می نماییم (نکته: کدهای زیر جهت آموزش می بایست، شما می توانید کدهای زیر را داخل فایل پیوستی این آموزش مشاهده و استفاده نمایید):
در ابتدای فایل Default.aspx.vb پنج خط کد که جهت ایمپورت کردن فضاهای نامی به صفحه بکار رفته اند را می تواند مشاهده نمایید:
شما می بایست خطوط بالا را حذف نموده و کدهای زیر را جایگزین نمایید (3 خط کد به خطوط بالا افزوده می شود).
سپس می بایست رویه Page_Load را ویرایش نمایید. برای انجام این کار می توانید کلید های Ctrl + F را فشار داده تا کادر جستجو باز شده سپس عبارت Page_Load را درون آن تایپ نموده و دکمه Search را فشار دهید. این رویه به صورت زیر خواهد بود:
خوب با انجام اینکار پرتال بطور کامل شمسی می شود. حال اگر بخواهیم تقویم باز شونده پرتال (PopupCalendar) نیز شمسی شود، می بایست فایل PopupCalendar.js پیوست این آموزش را در پوشه JS پرتال Paste نمایید.
فایل پیوست: Calendar.zip
بطور کلی برای شمسی سازی پرتال Dotnetnuke دو فایل Default.aspx.vb و js/Popupcalendar.js می بایست ویرایش گردند. برای انجام این کار ابتدا فایل Default.aspx.vb را باز نموده و تغییرات زیر را اعمال می نماییم (نکته: کدهای زیر جهت آموزش می بایست، شما می توانید کدهای زیر را داخل فایل پیوستی این آموزش مشاهده و استفاده نمایید):
در ابتدای فایل Default.aspx.vb پنج خط کد که جهت ایمپورت کردن فضاهای نامی به صفحه بکار رفته اند را می تواند مشاهده نمایید:
Imports System.IO
Imports DotNetNuke.Entities.Tabs
Imports DotNetNuke.Security.Permissions
Imports DotNetNuke.UI.Skins
Imports DotNetNuke.Entities.Tabs
Imports DotNetNuke.Security.Permissions
Imports DotNetNuke.UI.Skins
Imports DotNetNuke.UI.Utilities
شما می بایست خطوط بالا را حذف نموده و کدهای زیر را جایگزین نمایید (3 خط کد به خطوط بالا افزوده می شود).
Imports System.IO
Imports System.Reflection
Imports System.Globalization
Imports System.Threading
Imports DotNetNuke.Entities.Tabs
Imports DotNetNuke.Security.Permissions
Imports DotNetNuke.UI.Skins
Imports DotNetNuke.UI.Utilities
Imports System.Reflection
Imports System.Globalization
Imports System.Threading
Imports DotNetNuke.Entities.Tabs
Imports DotNetNuke.Security.Permissions
Imports DotNetNuke.UI.Skins
Imports DotNetNuke.UI.Utilities
سپس می بایست رویه Page_Load را ویرایش نمایید. برای انجام این کار می توانید کلید های Ctrl + F را فشار داده تا کادر جستجو باز شده سپس عبارت Page_Load را درون آن تایپ نموده و دکمه Search را فشار دهید. این رویه به صورت زیر خواهد بود:
PrivateSub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
Dim Scrolltop As HtmlControls.HtmlInputHidden = CType(Page.FindControl("ScrollTop"), HtmlControls.HtmlInputHidden)
If Scrolltop.Value <> ""Then
DotNetNuke.UI.Utilities.DNNClientAPI.AddBodyOnloadEventHandler(Page, "__dnn_setScrollTop();")
Scrolltop.Value = Scrolltop.Value
EndIf
Dim Scrolltop As HtmlControls.HtmlInputHidden = CType(Page.FindControl("ScrollTop"), HtmlControls.HtmlInputHidden)
If Scrolltop.Value <> ""Then
DotNetNuke.UI.Utilities.DNNClientAPI.AddBodyOnloadEventHandler(Page, "__dnn_setScrollTop();")
Scrolltop.Value = Scrolltop.Value
EndIf
EndSub
سپس شما مجدداً کل کد بالا را حذف نموده و کد زیر را که شامل دو رویه می باشد با آن جایگزین می نمایید:PrivateSub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) HandlesMyBase.Load
Dim Scrolltop As HtmlControls.HtmlInputHidden = CType(Page.FindControl("ScrollTop"), HtmlControls.HtmlInputHidden)
If Scrolltop.Value <> ""Then
DotNetNuke.UI.Utilities.DNNClientAPI.AddBodyOnloadEventHandler(Page, "__dnn_setScrollTop();")
Scrolltop.Value = Scrolltop.Value
EndIf
Dim Scrolltop As HtmlControls.HtmlInputHidden = CType(Page.FindControl("ScrollTop"), HtmlControls.HtmlInputHidden)
If Scrolltop.Value <> ""Then
DotNetNuke.UI.Utilities.DNNClientAPI.AddBodyOnloadEventHandler(Page, "__dnn_setScrollTop();")
Scrolltop.Value = Scrolltop.Value
EndIf
Dim strLang AsString = System.Globalization.CultureInfo.CurrentCulture.ToString()
If strLang = "fa-IR"Then
ChangeCultureToPersian()
EndIf
If strLang = "fa-IR"Then
ChangeCultureToPersian()
EndIf
EndSub
PublicSharedSub ChangeCultureToPersian()
Dim calture AsNew CultureInfo("fa-IR")
Dim info As DateTimeFormatInfo = calture.DateTimeFormat
info.AbbreviatedDayNames = NewString() {"ى", "د", "س", "چ", "پ", "ج", "ش"}
info.DayNames = NewString() {"يکشنبه", "دوشنبه", "سه شنبه", "چهارشنبه", "پنجشنبه", "جمعه", "شنبه"}
info.AbbreviatedMonthNames = NewString() {"فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دي", "بهمن", "اسفند", ""}
info.MonthNames = NewString() {"فروردين", "ارديبهشت", "خرداد", "تير", "مرداد", "شهريور", "مهر", "آبان", "آذر", "دي", "بهمن", "اسفند", ""}
info.AMDesignator = "ق.ظ"
info.PMDesignator = "ب.ظ"
info.ShortDatePattern = "yyyy/MM/dd"
info.FirstDayOfWeek = DayOfWeek.Saturday
Dim PersianCal AsNew PersianCalendar
GetType(DateTimeFormatInfo).GetField("calendar", (BindingFlags.NonPublic Or (BindingFlags.Public Or BindingFlags.Instance))).SetValue(info, PersianCal)
Dim obj AsObject = GetType(DateTimeFormatInfo).GetField("m_cultureTableRecord", (BindingFlags.NonPublic Or (BindingFlags.Public Or BindingFlags.Instance))).GetValue(info)
obj.GetType.GetMethod("UseCurrentCalendar", (BindingFlags.NonPublic Or BindingFlags.Instance)).Invoke(obj, NewObject() {PersianCal.GetType.GetProperty("ID", (BindingFlags.NonPublic Or BindingFlags.Instance)).GetValue(PersianCal, Nothing)})
GetType(CultureInfo).GetField("calendar", (BindingFlags.NonPublic Or (BindingFlags.Public Or BindingFlags.Instance))).SetValue(calture, PersianCal)
Thread.CurrentThread.CurrentCulture = calture
Thread.CurrentThread.CurrentUICulture = calture
CultureInfo.CurrentCulture.DateTimeFormat = info
CultureInfo.CurrentUICulture.DateTimeFormat = info
EndSub
خوب با انجام اینکار پرتال بطور کامل شمسی می شود. حال اگر بخواهیم تقویم باز شونده پرتال (PopupCalendar) نیز شمسی شود، می بایست فایل PopupCalendar.js پیوست این آموزش را در پوشه JS پرتال Paste نمایید.
فایل پیوست: Calendar.zip