این مقاله اولین مقاله ای هست که در باب توسعه جوملا نوشتم. علت اینکه تا این حد در نوشتن مقالات مربوط به توسعه جوملا تاخیر کردم این هست که منتظر نسخه 4 جوملا هستم. تغییراتی که در نسخه 4 جوملا رخ داده زیاد هست و این مقاله صرفا برای جوملا نسخه 3 قابل استفاده هست. ولی از اونجا که بحث تبدیل تاریخ میلادی به شمسی در بسیاری از کامپوننتها مطرح هست واجب دونستم که این مقاله رو بنویسم. امیدوارم با خواندن این مطلب و دیگر مطالبی که با تگ مشکل تاریخ در این وب سایت مشخص شده مشکلی برای فارسی و شمسی کردن تاریخ کامپوننت ها وجود نداشته باشه.
در مطلبی که اخیرا در باره شمسی سازی تاریخ کامپوننت ads manager نوشتم با قطعه کد زیر جهت تبدیل تاریخ به معادل شمسی آشنا شدید:
JHTML::_('date', $row->date_created, 'Y/m/d');
در این مطلب میخوام در مورد قسمت های مختلف این کد توضیح بدم.
در ابتدای کد، عبارت JHTML رو میبینید. JHTML در واقع یکی از کلاس های جوملا هست و برای خروجی گرفتن از انواع مختلف HTML مثل فرم های ورودی و تصاویر و امثال اون استفاده میشه.
بعد JHTML ما علامت ::_ رو داریم که برای فراخوانی یکی از زیر کلاس ها یا اصطلاحا متدهای JHTML به نام date بکار میره. شکل کلی این متد به این شکل هست.
date(string $input = 'now', string $format = null, mixed $tz = true, boolean $gregorian = false) : string
این زیر کلاس با تاریخ سر و کار داره. در مستندات جوملا در لینک
https://api.joomla.org/cms-3/classes/Joomla.CMS.HTML.HTMLHelper.html#method_date
چنین توضیح داده شده که این متد تاریخ رو به شکل و منطقه زمانی دلخواه شما نمایش میده و همانطور که می بینید 4 تا آرگومان داره که من با رنگ های مختلف مشخص کردم تا اگر کسی با کدنویسی php آشنایی نداره بتونه درک کنه.
date(string $input = 'now', string $format = null, mixed $tz = true, boolean $gregorian = false) : string
آرگومان اول یعنی متغیر input$ که با رنگ قرمز مشخص شده از نوع رشته ( string ) هست و مقدار پیشفرض اون زمان حال ( now ) هست.
آرگومان دوم یعنی format$ که شکل تاریخ هست. اینکه تاریخ چطوری نمایش داده بشه. مثلا بصورت 1398/09/05 باشه یا 5 آذر 1389 نوشته بشه. این آرگومان هم نوع رشته ( string ) هست و یکی از مقادیر زیر رو میتویند براش بنویسید:
برای اطلاعات بیشتر درباره نحوه نمایش تاریخ در PHP لطفا "تاریخ در php" رو در اینترنت جستجو کنید.
آرگومان بعدی یعنی tz$ منطقه زمانی هست که با رنگ نارنجی مشخص کردم و از نوع ترکیبی ( mixed ) هست.
و آرگومان آخر هم نوع تقویم رو مشخص می کنه و مقدار پیشفرضش false هست و اگر true بگذارید از تقویم مسیحی استفاده می کنه.
در پایان هم یک مقدار رشته ای بر می گردونه. حالا دونستن اینها به چه درد می خوره؟
اگر در سایت جوملایی خود وارد مسیر زیر بشید:
/libraries/cms/html
تمام متدهای مربوط به JHTML را بطور دسته بندی شده در فایل هایی به همان نام می بینید.
حالا اگر فایل date.php را با ویراشگر کدتون باز کنید تمام چیز هایی رو که در بالا گفتم در این فایل می بینید و در انتهای اسکریپت، قطعه کد زیر را می بینید:
return JHtml::_('date', $date, $format);
یعنی متد date کلاس JHTML با 3 آرگومان بر می گردونه.
JHtml::_('date', $date, $format);
ما از خروجی متد date یعنی همین کدی که در بالا می بینید برای شمسی کردن تاریخ افزونه های جوملا استفاده می کنیم.
در آرگومان اول متد رو می نویسیم که همان date هست. آرگومان دوم تاریخ را از متغیر date$ می گیره و به شکلی که شما در آرگومان سوم یعنی متغیر format$ نوشتید بر می گرداند. چنانچه در تنظیمات کلی جوملا، منطقه زمانی پیشفرض را تهران انتخاب کرده باشید استفاده از این کد تاریخ را شمسی می کند.
در مطلب شمسی سازی تاریخ ads manager ما از این کد استفاده کردیم:
JHTML::_('date', $row->date_created, 'Y/m/d');
اگر با برنامه نویسی php آشنا باشید ( لازم نیست متخصص php باشید ) متوجه شده اید که من در شمسی سازی تاریخ ads manager از متغیر استفاده نکردم و اطلاعات ( زمان و شکل نمایش زمان ) را مستیقما داخل تابع نوشتم. اگر می خواستم از توابع استفاده کنم باید یه همچنین چیزی می نوشتم:
$date=$row->date_created;
$format=”Y/m/d”;
JHtml::_('date', $date, $format);
تاریخ رو از دیتابیس گرفتیم و داخل متغیر date$ ریختیم. شکل نمایش تاریخ رو هم در تابع format$ مشخص کردیم. درانتها صرفا اینمتغیر ها رو داخل تابع تاریخ مون می ذاریم و تاریخ به همین راحتی شمسی میشه.
نکته آخر اینکه سعی کنید از قابلیت سفارسی سازی افزونه ها در جوملا، همانطور که در مطلب تاریخ شمسی و فارسی در کامپوننت ads manager توضیح دادم استفاده کنید و هسته افزونه ها را دستکاری نکنید. چرا که با بروز رسانی افزونه ها تمام تغییرات تون بی اثر میشه.
در پایان خوشحال میشم بازخورد تون رو از اینمقاله که اولین مقاله در بابا توسعه جوملا هست در بخش ظرات بنویسید.