Jump to content

Recommended Posts

находим файл /Smarty/libs/plugins/modifier.date_format.php

 

меняем стандартную ф-ю отображения даты:

function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto')
{
    if ($format === null) {
        $format = Smarty::$_DATE_FORMAT;
    }
    /**
    * Include the {@link shared.make_timestamp.php} plugin
    */
    require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
    if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
        $timestamp = smarty_make_timestamp($string);
    } elseif ($default_date != '') {
        $timestamp = smarty_make_timestamp($default_date);
    } else {
        return;
    }
    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);
    }
}

на модифицированную:

 

function smarty_modifier_date_format($string, $format=null, $default_date='', $formatter='auto')
{
    if ($format === null) {
        $format = Smarty::$_DATE_FORMAT;
    }
    /**
    * Include the {@link shared.make_timestamp.php} plugin
    */
    require_once(SMARTY_PLUGINS_DIR . 'shared.make_timestamp.php');
    if ($string != '' && $string != '0000-00-00' && $string != '0000-00-00 00:00:00') {
        $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);
    }
}

после этого можно вызывать модификатор например так:

{$post->date|date_format:"%d %m %Y":"":"rus"}

 

В прикрепленных файлах готовый файлик

modifier.date_format.zip

Link to post
Share on other sites

Очень даже хорошая разработка, спасибо.

 

Замечания такие:

1. Сейчас, для использования русских названий надо писать полный список параметров типа {$post->date|date_format:"%d %m %Y":"":"rus"}, а в большинстве шаблонов используется сокращенный. Это неудобно

2. Портится работа с форматом по умолчанию, то есть нельзя в настройках задать по умолчанию формат с русскими названиями месяцев.

 

Поэтому, ИМХО, логичнее было бы добавить свой преобразователь, например %Z, вместо которого выводилось бы русское название месяца.

Link to post
Share on other sites
  • 5 months later...

Здравствуйте. Объясните тупому - как и где это применить и для чего. И какая полезность от этого?

 

по умолчанию в smarty/simpla все месяцы на англ.языке, тоесть December, January, February и тд. чтобы вывести дату в формате "2 ноября" используется измененная ф-я, которая выше.

Edited by mishanya
Link to post
Share on other sites

по умолчанию в smarty/simpla все месяцы на англ.языке, тоесть December, January, February и тд. чтобы вывести дату в формате "2 ноября" используется измененная ф-я, которая выше.

Спасибо

Link to post
Share on other sites
  • 3 weeks later...

Этот плагин давно уже не новость, найти его можно на просторах интернета.

Мишаня зачем чужую работу присваиваешь?

 

с чего ты взял что чужую? добавить

    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';
    }   

много ума не надо. когда нужно было одному из заказчиков в таком формате, тогда и переделал.

Link to post
Share on other sites

Много ума не надо чтобы использовать плагин автора и выдавать за свое.

Если бы ты писал для заказчика то зачем использовал условие rus? Оно там вообще не нужно.

 

видимо затем чтобы вызывать форматирование с русскими месяцами.почему рус, потому что у меня еще и для укр. есть. 

Link to post
Share on other sites

Не вижу отличий решения от mishanya от решения по ссылке 2011 года. Или они есть?

 

нет. их нет. и это доказывает что этот кусок

    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';
    }   

не мой? было бы из-за чего спорить

Edited by mishanya
Link to post
Share on other sites

Я не верю в совпадения, тем более уж больно все идентично.

Помнится даже osben в свою сборку симплы включил этот модификатор, но он не заявлял что это его.

Link to post
Share on other sites
  • 1 month later...

ребят, а подскажите как вывести дату , допустим так  {$order->date|date} выводит текущую дату, а надо вывести текущую дату + 3 дня , смысл в том что я хочу в карточке товара вывести дату доставки .. не могу что-то додуматься ) 

Link to post
Share on other sites

ребят, а подскажите как вывести дату , допустим так  {$order->date|date} выводит текущую дату, а надо вывести текущую дату + 3 дня , смысл в том что я хочу в карточке товара вывести дату доставки .. не могу что-то додуматься )

Вот попробуйте:
{"+3 days"|date_format:"%d.%m.%Y"}
Link to post
Share on other sites
  • 8 months later...

Этот плагин давно уже не новость, найти его можно на просторах интернета.

Мишаня зачем чужую работу присваиваешь?

Большое спасибо, что разоблачаете плагиатщиков. Тебе, Noxter в частности.

 

Это плагин мой.

rus я сделала, потому что вот

 

$formatter='auto'
 

 

Я полагала, что создаю новый формат так сказать. И если нужно в другом падеже дату написать, например, я просто залезу в код и проспрягаю месяца, например.И ещё полагала, что координально новый формат сделать. Мне тогда казалось это решение логичным. %Z вставить в голову не пришло и сейчас не кажется разумным.

 

Мишаня, жаль, что ссылку на меня не дал. Хотя, допускаю, что слизал код у другого слизуна.

К слову, решение мне не жалко. Я часто свои работы вижу там, сям. Но обычно мне в коменты пишут спасибо. 

 

А чего я пораньше не объявилась? Думала, 1 переход с этого сайта ничего не значит, два тоже... но сейчас очень много переходов от вас. За что и благодарю ещё раз Noxterа. Даже кланюсь. А потом некогда было... потом.. короче вот я нарисовалась поблагодарить.

:D

Link to post
Share on other sites
  • 4 months later...

А зачем заменять %m, который выводит месяцы цифрами? Почему не %B, чтобы заменить именно английские слова?

$months = array (
    1 => 'января',
    2 => 'февраля',
    3 => 'марта',
    4 => 'апреля',
    5 => 'мая',
    6 => 'июня',
    7 => 'июля',
    8 => 'августа',
    9 => 'сентября',
    10 => 'октября',
    11 => 'ноября',
    12 => 'декабря');
$format = str_replace("%B",$months[(int)date('m',$timestamp)],$format); 

Так и без форматтера можно обойтись и где надо выводить цифрами.

 

Так можно делать? Это не вызовет ошибок нигде?

Link to post
Share on other sites
  • 4 years later...

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
×
×
  • Create New...