Smarty date_format по русски

Потребовалось, чтобы Smatry функция  date_format выводит дату в формате с русским месяцем.

Нашла я это плагин и дописала. Он находится smarty/plugins/modifier.date_format.php
Взяла и поправила его  чисто под нужны (внесение выеделено жирным).


function smarty_modifier_date_format($string, $format = SMARTY_RESOURCE_DATE_FORMAT, $default_date = '',$formatter='auto')
{
    /**
    * Include the {@link shared.make_timestamp.php} plugin
    */
    require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
    if ($string != '') {
        $timestamp = smarty_make_timestamp($string);
    } elseif ($default_date != '') {
        $timestamp = smarty_make_timestamp($default_date);
    } else {
        return;
    }
    if($formatter=='rus')
    {
        $months = array (
1 => 'января',
2 => 'февраля',
3 => 'марта',
4 => 'апреля',
5 => 'мая',
6 => 'июня',
7 => 'июля',
8 => 'августа',
9 => 'сентября',
  10 => 'октября',
  11 => 'ноября',
  12 => 'декабря');
        
        $format = str_replace("%m",$months[(int)date('m',$timestamp)],$format);
        $formatter='auto';
    }
    if($formatter=='strftime'||($formatter=='auto'&&strpos($format,'%')!==false)) {
        if (DS == '\\') {
            $_win_from = array('%D', '%h', '%n', '%r', '%R', '%t', '%T');
            $_win_to = array('%m/%d/%y', '%b', "\n", '%I:%M:%S %p', '%H:%M', "\t", '%H:%M:%S');
            if (strpos($format, '%e') !== false) {
                $_win_from[] = '%e';
                $_win_to[] = sprintf('%\' 2d', date('j', $timestamp));
            } 
            if (strpos($format, '%l') !== false) {
                $_win_from[] = '%l';
                $_win_to[] = sprintf('%\' 2d', date('h', $timestamp));
            } 
            $format = str_replace($_win_from, $_win_to, $format);
        }
        return strftime($format, $timestamp);
    } else {
        return date($format, $timestamp);
    }



И в шаблоне вызывать примерно так
{$doc.doc_date|date_format:"%d %m %Y":"":"rus"}

Комментарии

  1. Хм... все сделал как вы описали, но у меня не чего не выводится (делал на локалхосте - денвер) движок Prestashop
    modifier.date_format.php такой же как у вас выше

    ОтветитьУдалить
    Ответы
    1. Ничего не выводится? И ошибки никакой?

      1 - Проверить отображаются ли вообще ошибки.
      Как вариант в .htaccess написать строку
      php_flag display_errors on
      Скорее у вас ошибка кая-то (синтаксическая, например)

      2 - Нужно понять почему не отображает ничего. А если в шаблоне написать
      {$doc.doc_date|date_format:"%d %m %Y"}
      Будет что-то выводить?

      Удалить
  2. Спасибо. Пригодилось. Все заработало сразу.
    Передаю unixtime из базы. Получилось очень удобно

    ОтветитьУдалить
    Ответы
    1. Спасибо, очень приятно когда благодарят

      Удалить
  3. Спасибо, все работает

    ОтветитьУдалить
  4. Большое спасибо! Все получилось, все работает!

    ОтветитьУдалить
  5. Спасибо.
    Добавлю для нубов типа меня. Файл отредактированный нужно сохранять в UTF-8

    ОтветитьУдалить

Отправить комментарий

Популярные сообщения