Перейти к содержанию
Официальный форум поддержки Simpla

Рекомендуемые сообщения

находим файл /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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 5 месяцев спустя...

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

Ссылка на сообщение
Поделиться на другие сайты

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

 

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

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

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

Спасибо

Ссылка на сообщение
Поделиться на другие сайты
  • 3 недели спустя...

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

 

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

Ссылка на сообщение
Поделиться на другие сайты

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

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

Не вижу отличий решения от 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';
    }   

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

Изменено пользователем mishanya
Ссылка на сообщение
Поделиться на другие сайты

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

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

Ссылка на сообщение
Поделиться на другие сайты
  • 1 месяц спустя...

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

Ссылка на сообщение
Поделиться на другие сайты

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

Вот попробуйте:
{"+3 days"|date_format:"%d.%m.%Y"}
Ссылка на сообщение
Поделиться на другие сайты
  • 8 месяцев спустя...

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

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

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

 

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

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

 

$formatter='auto'
 

 

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

 

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

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

 

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

:D

Ссылка на сообщение
Поделиться на другие сайты
  • 4 месяца спустя...

А зачем заменять %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); 

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

 

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

Ссылка на сообщение
Поделиться на другие сайты
  • 4 года спустя...

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

Загрузка...
×
×
  • Создать...