PDA

View Full Version : مشکل در استفاده از فایل JDF در yii



mohammadreza0123
پنج شنبه 28 خرداد 1394, 10:00 صبح
سلام دوستان عزیز و متخصصین گرامی

ایام رو تبریک میگم بهتون


سوال دارم از محضر همه شما دوستان

لطفا هر کسی میتونه کمکم کنه

من تازه چند روزه yii رو شروع کردم و یه آموزشی 21 قسمتی رو دنبال میکنم
اما اون طور که باید جزئیات رو توضیح نداده

میخوام مثلا از فایل JDF.php در yii استفاده کنم و تاریخ یه پستی رو نشون بدم

تو آموزش گفته شد فایل JDF.php رو در protected>components قرار میدهیم و بعد رد قسمتی که میخواهیم تاریخ را نشان دهیم کد:


<?php echo JDF::jdate('J F Y',$post->date); ?>

منم این کارو کردم اما به من میگه jdate() رو نمیشناسه موقع اجرا

نمیدونم چه کنم لطفا دارید توضیح میدی به مسائل ریز هم توجه کنید و بدونید که من خیلی بلد نیستم yii رو

پیشاپیش ممنون

mohammadreza0123
پنج شنبه 28 خرداد 1394, 10:55 صبح
دوستان عزیز بنده

کمک میکنید منو برای حل این مشکل؟

fatima-php
پنج شنبه 28 خرداد 1394, 11:06 صبح
خود فایل JDF رو نباید مستقیماً استفاده کنید. باید اون رو بصورت کلاس در بیارین و توی مسیر protected/components/JDF.php ذخیره کنید:

<?php
/* In The Name Of Allah */
/**
* Software Hijri_Shamsi , Solar(Jalali) Date and Time
* Copyright(C)2011, Reza Gholampanahi , http://jdf.scr.ir
* version 2.35 :: 1390/03/11 = 1432/06/28 = 2011/06/01
*/
/* F */
class JDF {
public static function jdate($format, $timestamp = '', $none = '', $time_zone = 'Asia/Tehran', $tr_num = 'fa') {
$T_sec = '0'; /* <= رفع خطای زمان سرور ، با اعداد '+' و '-' بر حسب ثانیه */
if($time_zone == '')
$time_zone = 'Asia/Tehran';
date_default_timezone_set($time_zone);
$ts = ($timestamp == '' or $timestamp == 'now') ? time() + $T_sec : self::tr_num($timestamp) + $T_sec;
$date = explode('_', date('a_d_m_N_w_Y', $ts));
list($j_y, $j_m, $j_d) = self::gregorian_to_jalali($date [5], $date [2], $date [1]);
$doy = ($j_m < 7) ? ((($j_m - 1) * 31) + $j_d - 1) : ((($j_m - 7) * 30) + $j_d + 185);
$kab = ($j_y % 33 % 4 - 1 == (int) ($j_y % 33 * .05)) ? 1 : 0;
$out = '';
for($i = 0; $i < strlen($format); $i++) {
$sub = substr($format, $i, 1);
if($sub == '\\') {
$out .= substr($format, ($i + 1), 1);
$i++;
}
switch($sub) {
case 'C':
case 'E':
case 'R':
case 'x':
case 'X':
$out .= '<a href="http://jdf.scr.ir/">دریافت نسخه ی جدید http://jdf.scr.ir</a>';
break;
case '\\':
$out .= '';
break;
case 'B':
case 'e':
case 'g':
case 'G':
case 'h':
case 'H':
case 'i':
case 'I':
case 'O':
case 'P':
case 's':
case 'T':
case 'u':
case 'Z':
$out .= date($sub, $ts);
break;
case 'a':
$out .= ($date [0] == 'pm') ? 'ب.ظ' : 'ق.ظ';
break;
case 'A':
$out .= ($date [0] == 'pm') ? 'بعد از ظهر' : 'قبل از ظهر';
break;
case 'b':
$out .= ceil($j_m / 3);
break;
case 'c':
$out .= self::jdate('Y/n/j ,H:i:s P', $ts, '', $time_zone, $tr_num);
break;
case 'd':
$out .= ($j_d < 10) ? '0' . $j_d : $j_d;
break;
case 'D':
$key = array ('ی', 'د', 'س', 'چ', 'پ', 'ج', 'ش');
$out .= $key [$date [4]];
break;
case 'f':
$key = array ('بهار', 'تابستان', 'پاییز', 'زمستان');
$out .= $key [ceil($j_m / 3) - 1];
break;
case 'F':
$key = array ('فروردین', 'اردیبهشت', 'خرداد', 'تیر', 'مرداد', 'شهریور', 'مهر', 'آبان', 'آذر', 'دی', 'بهمن', 'اسفند');
$out .= $key [$j_m - 1];
break;
case 'j':
$out .= $j_d;
break;
case 'J':
$key = array ('یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه', 'ده', 'یازده', 'دوازده', 'سیزده', 'چهارده', 'پانزده', 'شانزده', 'هفده', 'هجده', 'نوزده', 'بیست', 'بیست و یک', 'بیست و دو', 'بیست و سه', 'بیست و چهار', 'بیست و پنج', 'بیست و شش', 'بیست و هفت', 'بیست و هشت', 'بیست و نه', 'سی', 'سی و یک');
$out .= $key [$j_d - 1];
break;
case 'k':
$out .= 100 - round(($doy / ($kab + 365) * 100), 1);
break;
case 'K':
$out .= round(($doy / ($kab + 365) * 100), 1);
break;
case 'l':
$key = array ('یکشنبه', 'دوشنبه', 'سه شنبه', 'چهارشنبه', 'پنجشنبه', 'جمعه', 'شنبه');
$out .= $key [$date [4]];
break;
case 'L':
$out .= $kab;
break;
case 'm':
$out .= ($j_m < 10) ? '0' . $j_m : $j_m;
break;
case 'M':
$key = array ('فر', 'ار', 'خر', 'تی‍', 'مر', 'شه‍', 'مه‍', 'آب‍', 'آذ', 'دی', 'به‍', 'اس‍');
$out .= $key [$j_m - 1];
break;
case 'n':
$out .= $j_m;
break;
case 'N':
$out .= ($date [3] != 7) ? $date [3] + 1 : 1;
break;
case 'o':
$jdw = ($date [4] != 6) ? $date [4] + 1 : 0;
$dny = 364 + $kab - $doy;
$out .= ($doy < 3 and $jdw > ($doy + 3)) ? $j_y - 1 : (($dny < 3 and (3 - $dny) > $jdw) ? $j_y + 1 : $j_y);
break;
case 'p':
$key = array ('حمل', 'ثور', 'جوزا', 'سرطان', 'اسد', 'سنبله', 'میزان', 'عقرب', 'قوس', 'جدی', 'دلو', 'حوت');
$out .= $key [$j_m - 1];
break;
case 'q':
$key = array ('مار', 'اسب', 'گوسفند', 'میمون', 'مرغ', 'سگ', 'خوک', 'موش', 'گاو', 'پلنگ', 'خرگوش', 'نهنگ');
$out .= $key [$j_y % 12];
break;
case 'Q':
$out .= $kab + 364 - $doy;
break;
case 'r':
$out .= self::jdate('H:i:s O l, j F Y', $ts, '', $time_zone, $tr_num);
break;
case 'S':
$out .= 'ام';
break;
case 't':
$out .= ($j_m != 12) ? (31 - (int) ($j_m / 6.5)) : ($kab + 29);
break;
case 'U':
$out .= $ts;
break;
case 'v':
$xy3 = substr($j_y, 2, 1);
$h3 = $h34 = $h4 = '';
if($xy3 == 1) {
$p34 = '';
$k34 = array ('ده', 'یازده', 'دوازده', 'سیزده', 'چهارده', 'پانزده', 'شانزده', 'هفده', 'هجده', 'نوزده');
$h34 = $k34 [substr($j_y, 2, 2) - 10];
}
else {
$xy4 = substr($j_y, 3, 1);
$p34 = ($xy3 == 0 or $xy4 == 0) ? '' : ' و ';
$k3 = array ('', '', 'بیست', 'سی', 'چهل', 'پنجاه', 'شصت', 'هفتاد', 'هشتاد', 'نود');
$h3 = $k3 [$xy3];
$k4 = array ('', 'یک', 'دو', 'سه', 'چهار', 'پنج', 'شش', 'هفت', 'هشت', 'نه');
$h4 = $k4 [$xy4];
}
$out .= $h3 . $p34 . $h34 . $h4;
break;
case 'V':
$out .= str_ireplace(array ('00', '13', '14'), array ('', 'هزار و سیصد', 'هزار و چهارصد'), substr($j_y, 0, 2)) . ((substr($j_y, 2, 2) == '00') ? '' : ' و ') . self::jdate('v', $ts, '', $time_zone);
break;
case 'w':
$out .= ($date [4] != 6) ? $date [4] + 1 : 0;
break;
case 'W':
$avs = self::jdate('w', $ts - ($doy * 86400), '', $time_zone, 'en');
$num = (int) (($doy + $avs) / 7);
if($avs < 4) {
$num++;
}
elseif($num < 1) {
$num = ($avs == 4 or $avs == (($j_y % 33 % 4 - 2 == (int) ($j_y % 33 * .05)) ? 5 : 4)) ? 53 : 52;
}
$aks = $avs + $kab;
if($aks == 7)
$aks = 0;
$out .= ($aks < 3 and ($kab + 363 - $doy) < $aks) ? '01' : (($num < 10) ? '0' . $num : $num);
break;
case 'y':
$out .= substr($j_y, 2, 2);
break;
case 'Y':
$out .= $j_y;
break;
case 'z':
$out .= $doy;
break;
default:
$out .= $sub;
}
}
return ($tr_num == 'fa' or $tr_num == '') ? (self::tr_num($out, 'fa')) : $out;
}
/* F */
public static function jmktime($h = '', $m = '', $s = '', $jm = '', $jd = '', $jy = '', $is_dst = '-1') {
$h = self::tr_num($h);
$m = self::tr_num($m);
$s = self::tr_num($s);
if($h == '' and $m == '' and $s == '' and $jm == '' and $jm == '' and $jd == '' and $jy == '') {
return mktime();
}
else {
list($year, $month, $day) = self::jalali_to_gregorian($jy, $jm, $jd);
return mktime($h, $m, $s, $month, $day, $year, $is_dst);
}
}
/* F */
public static function jgetdate($timestamp = '', $none = '', $tz = 'Asia/Tehran', $tn = 'en') {
$ts = ($timestamp == '') ? time() : self::tr_num($timestamp);
return array ('seconds' => self::tr_num((int) self::jdate('s', $ts, '', $tz, 'en'), $tn), 'minutes' => self::tr_num((int) self::jdate('i', $ts, '', $tz, 'en'), $tn), 'hours' => self::jdate('G', $ts, '', $tz, $tn), 'mday' => self::jdate('j', $ts, '', $tz, $tn), 'wday' => self::jdate('w', $ts, '', $tz, $tn), 'mon' => self::jdate('n', $ts, '', $tz, $tn), 'year' => self::jdate('Y', $ts, '', $tz, $tn), 'yday' => self::jdate('z', $ts, '', $tz, $tn), 'weekday' => self::jdate('l', $ts, '', $tz, $ts), 'month' => self::jdate('F', $ts, '', $tz, $ts), 0 => self::tr_num($ts, $tn));
}
/* F */
public static function jcheckdate($jm, $jd, $jy) {
$jm = self::tr_num($jm);
$jd = self::tr_num($jd);
$l_d = ($jm != 12) ? (31 - (int) ($jm / 6.5)) : (($jy % 33 % 4 - 1 == (int) ($jy % 33 * .05)) ? 30 : 29);
return ($jm < 13 and $jm > 0 and $l_d >= $jd and $jd > 0) ? true : false;
}
/* F */
public static function tr_num($str, $mod = 'en') {
$num_a = array ('0', '1', '2', '3', '4', '5', '6', '7', '8', '9');
$key_a = array ('۰', '۱', '۲', '۳', '۴', '۵', '۶', '۷', '۸', '۹');
return ($mod == 'fa') ? str_ireplace($num_a, $key_a, $str) : str_ireplace($key_a, $num_a, $str);
}
/*
* Convertor from and to Gregorian and Jalali (Hijri_Shamsi,Solar) Functions Copyright(C)2011,Reza Gholampanahi [ http://jdf.scr.ir/jdf ] version 2.20
*/
/* [ http://jdf.scr.ir/jdf ] : جهت کسب اطّلاعات بیشتر در مورد توابع اصلی زیر */
/* F */
public static function gregorian_to_jalali($g_y, $g_m, $g_d, $mod = '') {
$g_y = self::tr_num($g_y);
$g_m = self::tr_num($g_m);
$g_d = self::tr_num($g_d); /* <= :این سطر ، جزء تابع اصلی نیست */
$g_a = array (0, 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334);
$doy_g = $g_a [(int) $g_m] + $g_d;
if(($g_y % 4) == 0 and $g_m > 2)
$doy_g++;
$jy = ($doy_g < 80) ? $g_y - 622 : $g_y - 621;
$doy_j = ($doy_g > 79) ? $doy_g - 80 : $doy_g + (($jy % 4 == 3) ? 286 : 285);
if($doy_j < 186) {
$a = 0;
$b = 31;
$c = 1;
}
else {
$a = 186;
$b = 30;
$c = 7;
}
$jm = (int) (($doy_j - $a) / $b);
$jd = $doy_j - $a - ($jm * $b) + 1;
$jm += $c;
return ($mod == '') ? array ($jy, $jm, $jd) : $jy . $mod . $jm . $mod . $jd;
}
/* F */
public static function jalali_to_gregorian($j_y, $j_m, $j_d, $mod = '') {
$j_y = self::tr_num($j_y);
$j_m = self::tr_num($j_m);
$j_d = self::tr_num($j_d); /* <= :این سطر ، جزء تابع اصلی نیست */
$doy_j = ($j_m < 7) ? ((($j_m - 1) * 31) + $j_d) : ((($j_m - 7) * 30) + $j_d) + 186;
$d28x = ($j_y % 4 == 3) ? 287 : 286;
if($doy_j > $d28x) {
$gy = $j_y + 622;
$gd = $doy_j - $d28x;
}
else {
$gy = $j_y + 621;
$gd = $doy_j + 79;
}
$g_a = array (0, 31, (($gy % 4 == 0) ? 29 : 28), 31, 30, 31, 30, 31, 31, 30, 31, 30, 31);
foreach($g_a as $gm => $v) {
if($gd <= $v)
break;
$gd -= $v;
}
return ($mod == '') ? array ($gy, $gm, $gd) : $gy . $mod . $gm . $mod . $gd;
}
}
/* [ jdf.php ] version 2.35 ?> Download new version from [ http://jdf.scr.ir ] */
?>

برای نسخه های جدیدتر JDF هم به همین شکل کار کنید.

mohammadreza0123
پنج شنبه 28 خرداد 1394, 13:36 عصر
و اینکه عین کد شما رو ذخیره کردم و برا فراخوانی هم

<?php echo JDF::jdate('J F Y',$post->id); ?> رو زدم


انجام شد

اما من خودم فایل jdf رو دانلود کردم و کل کد هاشو گذاشتم تو یه کلاس ولیبعضی چیزاشو در کد اشکال میگیره

جه کنممممممم


http://jdf.scr.ir/download/dl.php

این فایلشه

من کل کد هاشو انداختم توی یه کلاس اما یه سری خطاها در کد میگیره

fatima-php
پنج شنبه 28 خرداد 1394, 13:41 عصر
خوب این مشخصه کار نمیکنه چون شما متدهای داخلی کلاس رو باید با کمک شئ this$ صدا بزنید نه مستقیم با اسم تابع.

fatima-php
پنج شنبه 28 خرداد 1394, 23:52 عصر
ببینید، شما باید اصول شئ گرایی رو اول یاد بگیرین. توی کلاس ما با متد سروکار داریم و متدها اگه بخوان همدیگه رو صدا بزنن، اگه متد معمولی باشه با <-this$ کار میکنن. مثل:

$this->loadModel($id);
که داره متدی رو از همین کلاس به اسم loadModel صدا میزنه و پارامتر id$ رو براش میفرسته. اگه بیرون از کلاس بودین هم باید با کمک اسم شئ که از کلاس ساختین متد رو صدا بزنین. مثال:

$obj = new MyClass;
$obj->loadModel(5);

حالا اگه متد static بود قضیه فرق میکنه. باید توی بدنه کلاس با کمک ::self و بیرون از کلاس با کمک ::className صداش بزنید که className همون اسم کلاسه. مثال داخل کلاس:

self::loadModel($id);
و خارج از کلاس:

MyClass::loadModel(5);