• 0 رای - 0 میانگین
  • 1
  • 2
  • 3
  • 4
  • 5
کمک در زمینه تبدیل تاریخ میلادی به جلالی در یک اسکریپت نوشته شده با زند فریم ورک
#1
با سلام
مدتی هست که روی یک پروژه کار میکنیم و بنا به دلایلی برنامه نویس اصلیمون گذاشت و رفت و الان هم برای یک تغییر کوچیک روی تاریخ ها به مشکل اساسی برخورد کردیم.
توی پنلی که مشخصاتش رو آخر پست گذاشتم می خوایم در قسمت های:
1- Users جایی که نوشته شده Created at تاریخ رو به جلالی نمایش بدیم.
2- در قسمت Calendar> Manage روی ویرایش Calendar که کلیک می کنیم و می خوایم یک Event اضاف کنیم موقع اضاف کردن تاریخ، تاریخ به صورت جلالی وارد و ذخیره بشه. البته در این قسمت با اضاف کردن date picker مشکلی نداریم،
مشکل این هست که نمی تونیم تاریخی که میگیریم رو درست بازیابی کنیم و نمایش بدیم. یک شرط گذاشته شده که تاریخ های کوچکتر از یه حدی نمایش داده نشن، ولی به علت سیستم کشی که زند داره ما هر تغییری که ایجاد می کنیم، هیچ خروجی نمی بینیم. فولدر کش رو هم که خالی می کنیم باز تغییری نمی بینیم!!!

مشخصات ورود به سیستم:
address: http://12app.palapalco.com/application/c...tures/list
user: [email protected]
pass: 123456

زمانی که لاگین می کنید صفحه سفید به شما نشون داده میشه. برای همین لطف کنید یه بار دیگه آدرس رو توی مرورگر کپی کنید که به مکان مورد نظر متنقل شید.

از دوستان اگر کسی بتونه کمکمون کنه که تاریخ رو درست کنیم بسیار ازش ممنون میشم.
** اگر کسی خودش تمایل داشته باشه کار رو انجام بده هزینش رو پرداخت می کنیم(البته ارائه نحوه انجام کار برامون بسیار حائز اهمیت هست).

با تشکر
  پاسخ
تشکر شده توسط :
#2
کدهای ویوی http://12app.palapalco.com/customer/application/list
رو قرار بدین
  پاسخ
تشکر شده توسط : amird
#3
سلام آقای سهرابلو
ممنون از پاسختون
خدمت شما:

کد پی‌اچ‌پی:
<?php $application $this->getApplication(); ?>
<?php $customers 
$application->getCustomers(); ?>
<div class="application_customer application">
    <div class="application_header app_name">
        <?php echo $this->getPartialHtml('customization_header'); ?>
    </div>
    <div class="application_content inner_content">
        <div class="title">
            <i class="left icon-user"></i>
            <h2 class="left f-rounded"><?php echo $this->_('Users'); ?></h2>
            <div class="clear"></div>
            <hr class="reverse" />
        </div>
        <div class="area">
            <h3 class="title">
                <span class="left area"><?php echo $this->_("My application's users"); ?></span>
                <hr class="reverse" />
                <span class="area right">
                    <button type="button" class="default_button add right" id="add_customer">
                        <i class="icon-plus"></i>
                    </button>
                </span>
                <div class="clear"></div>
            </h3>
            <br />
            <table class="list" width="100%">
                <col width="0%" />
                <col width="40%" />
                <col width="35%" />
                <col width="20%" />
                <col width="5%" />
                <tr align="left">
                    <th></th>
                    <th><?php echo $this->_("Email"); ?></th>
                    <th><?php echo $this->_("User"); ?></th>
                    <th><?php echo $this->_("Created at"); ?></th>
                    <th><?php echo $this->_("Actions"); ?></th>
                </tr>
                <?php foreach($customers as $customer) : ?>
                <tr id="row_customer_<?php echo $customer->getId(); ?>">
                    <td></td>
                    <td><?php echo $customer->getEmail() ?></td>
                    <td><?php echo $customer->getName() ?></td>
                    <td><?php echo $customer->getFormattedCreatedAt($this->_(Zend_Date::DATE_MEDIUM)) ?></td>
                    <td>
                        <a href="<?php echo $this->getUrl("customer/application/edit", array("customer_id" => $customer->getId())); ?>"><i class="icon-edit"></i></a>
                        <a href="<?php echo $this->getUrl("customer/application/delete"); ?>" class="delete_customer">
                            <i class="icon-remove"></i>
                            <input type="hidden" name="customer_id" value="<?php echo $customer->getId() ?>" />
                        </a>
                    </td>
                </tr>
                <?php endforeach ?>
            </table>

        </div>

    </div>
    <script type="text/javascript">
        $('.delete_customer').click(function() {
            if(confirm("<?php echo addslashes($this->_("Are you sure you want to remove this user?"))?>")) {
                reload(this, this.href, true, function(data) {
                    if(data.success) {
                        $('#row_customer_'+data.customer_id).fadeOut(300, function() {$(this).remove();})
                    }
                });
            }
            return false;
        });

        $('#add_customer').click(function() {
            window.location = "<?php echo $this->getUrl("customer/application/new"); ?>";
        });
    </script>
</div> 

یک سوال با توجه به اینکه سیستم داره از intl زند استفاده می کنه و واحدهای پولی، اسم ماه ها و .... رو ترجمه می کنه، آیا امکانش هست که با استفاده از همین قابلیتش فرمت تاریخ رو هم عوض کرد؟
جایی در پست های اعضای همین فروم خوندم که مثل اینکه در نسخه 2.4 زند این قابلیت وجود داره.

با تشکر
  پاسخ
تشکر شده توسط :
#4
zf2 امکان استفاده از چند تقویم رو نداره (می تونه ولی به هر دلیلی نذاشته)
تو می تونی با تغییر مستقیم توی سورس zf2 (از مزایای اوپن سورس بودن) خروجی هات رو شمسی کنی.
هر جا IntlDateFormatter استفاده شده بود
مثلا توی این فایل
https://github.com/zendframework/zend-i1...Format.php
سورس رو به صورت زیر تغییر بدی
کد:
<?php
/**
* Zend Framework (http://framework.zend.com/)
*
* @link      http://github.com/zendframework/zf2 for the canonical source repository
* @copyright Copyright (c) 2005-2015 Zend Technologies USA Inc. (http://www.zend.com)
* @license   http://framework.zend.com/license/new-bsd New BSD License
*/

namespace Zend\I18n\View\Helper;

use DateTime;
use IntlDateFormatter;
use Locale;
use Zend\I18n\Exception;
use Zend\View\Helper\AbstractHelper;

/**
* View helper for formatting dates.
*/
class DateFormat extends AbstractHelper
{
    /**
     * Locale to use instead of the default
     *
     * @var string
     */
    protected $locale;

    /**
     * Timezone to use
     *
     * @var string
     */
    protected $timezone;

    /**
     * Formatter instances
     *
     * @var array
     */
    protected $formatters = array();

    /**
     * @throws Exception\ExtensionNotLoadedException if ext/intl is not present
     */
    public function __construct()
    {
        if (!extension_loaded('intl')) {
            throw new Exception\ExtensionNotLoadedException(sprintf(
                '%s component requires the intl PHP extension',
                __NAMESPACE__
            ));
        }
    }

    /**
     * Format a date
     *
     * @param  DateTime|int|array $date
     * @param  int                    $dateType
     * @param  int                    $timeType
     * @param  string                 $locale
     * @param  string|null            $pattern
     * @return string
     */
    public function __invoke(
        $date,
        $dateType = IntlDateFormatter::NONE,
        $timeType = IntlDateFormatter::NONE,
        $locale = null,
        $pattern = null
    ) {
        if ($locale === null) {
            $locale = $this->getLocale();
        }

        $timezone    = $this->getTimezone();
        $formatterId = md5($dateType . "\0" . $timeType . "\0" . $locale ."\0" . $pattern);

        if (!isset($this->formatters[$formatterId])) {
            $this->formatters[$formatterId] = new IntlDateFormatter(
                '[email protected]=persian',
                $dateType,
                $timeType,
                $timezone,
                IntlDateFormatter::TRADITIONAL,
                $pattern
            );
        }

        return $this->formatters[$formatterId]->format($date);
    }

    /**
     * Set locale to use instead of the default
     *
     * @param  string $locale
     * @return DateFormat
     */
    public function setLocale($locale)
    {
        $this->locale = (string) $locale;
        return $this;
    }

    /**
     * Get the locale to use
     *
     * @return string|null
     */
    public function getLocale()
    {
        if ($this->locale === null) {
            $this->locale = Locale::getDefault();
        }

        return $this->locale;
    }

    /**
     * Set timezone to use instead of the default
     *
     * @param  string $timezone
     * @return DateFormat
     */
    public function setTimezone($timezone)
    {
        $this->timezone = (string) $timezone;

        // The method setTimeZoneId is deprecated as of PHP 5.5.0
        $setTimeZoneMethodName = (PHP_VERSION_ID < 50500) ? 'setTimeZoneId' : 'setTimeZone';

        foreach ($this->formatters as $formatter) {
            $formatter->$setTimeZoneMethodName($this->timezone);
        }

        return $this;
    }

    /**
     * Get the timezone to use
     *
     * @return string|null
     */
    public function getTimezone()
    {
        if (!$this->timezone) {
            return date_default_timezone_get();
        }

        return $this->timezone;
    }
}

یا اینکه می تونی از توابع zf2 استاده نکنی و مستقیم از
http://php.net/manual/en/class.intldateformatter.php
استفاده کنی.
  پاسخ
تشکر شده توسط : amird
#5
خیلی ممنون آقای سهرابلو
ما اتفاقا خودمون هم اومدیم از سورس شروع کردیم، ولی متاسفانه مشکل این بود که سیستم داره کدها رو کش می کنه و هر تغییری که ما میدیم سیستم هیچ رفلکسی نشون نمیده!!! فولدر کش رو هم که خالی می کنیم باز این مشکل وجود داره.
میشه در این زمنیه راهنمایی کنید.

اگر لازم باشه براتون مشخصات اف تی پی رو میفرستم.

با تشکر
  پاسخ
تشکر شده توسط :
#6
مشکل از کش zf2 نیست. ممکنه از apc کش یا چیز دیگه ای باشه. که البته با تغییر سورس باید تغییرات رو تشخیص بده.
  پاسخ
تشکر شده توسط : amird


پرش به انجمن:


کاربران در حال بازدید این موضوع: 1 مهمان