From 68938451d3ba5cd99fbaa8d70fcd18467c2d96a4 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 00:20:16 +0300 Subject: [PATCH 01/13] * Snippet: File name was changed. --- ddGetDate.php => ddGetDate_snippet.php | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename ddGetDate.php => ddGetDate_snippet.php (100%) diff --git a/ddGetDate.php b/ddGetDate_snippet.php similarity index 100% rename from ddGetDate.php rename to ddGetDate_snippet.php From 62a58af0f5932b91e6559c163780c294f9189127 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 00:35:40 +0300 Subject: [PATCH 02/13] + README. --- README.md | 139 ++++++++++++++++++++++++++++++++++++++++-- ddGetDate_snippet.php | 8 +-- 2 files changed, 136 insertions(+), 11 deletions(-) diff --git a/README.md b/README.md index 84f79be..3a80abb 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,136 @@ -# ddGetDate +# (MODX)EvolutionCMS.snippets.ddGetDate -Snippet returns the date in a specified format. -___ -Visit the following [link](http://code.divandesign.biz/modx/ddgetdate) to read the documentation, instructions & changelog. \ No newline at end of file +Snippet returns the date in a specified format. It can also: +* Return the current date; +* Return document pubdate by default, or createon if pubdate is empty; +* Display month as a string (like `January`, `February`, `March`, etc); +* Return short formated date (like `Today`, `Yesterday`, `Day before yesterday`). + + +## Requires + +* [(MODX)EvolutionCMS](https://github.com/evolution-cms/evolution) >= 1.1 + + +## Documentation + + +### Installation + +Elements → Snippets: Create a new snippet with the following data: + +1. Snippet name: `ddGetDate`. +2. Description: `2.1.2 Snippet returns the date in a specified format.`. +3. Category: `Core`. +4. Parse DocBlock: `no`. +5. Snippet code (php): Insert content of the `ddGetDate_snippet.php` file from the archive. + + +### Parameters description + +* `date` + * Desctription: Date. + * Valid values: + * `integer` + * `string` + * `'now'` — current date + * Default value: Pubdate or createdon (if pubdate is empty). + +* `format` + * Desctription: Date format to display. + * Valid values: `string` + * Default value: `'d.m.y'` + +* `monthToStr` + * Desctription: Display month as string. If it's true month in `format` must be specified as `'month'`. + * Valid values: + * `0` + * `1` + * Default value: `0` + +* `shortFormat` + * Desctription: Display shorted fromated date. If it's true date in `shortFormat` must be specified as `'short'`. + * Valid values: `string` + * Default value: — + +* `lang` + * Desctription: Month names language. + * Valid values: + * `'ru'` + * `'en'` + * Default value: `'ru'` + + +### Examples + + +#### Get current year + +``` +[[ddGetDate? + &date=`now` + &format=`Y` +]] +``` + +Returns: + +``` +2021 +``` + + +#### Get document `pubdate` or `creadeon` (if `pubdate` is empty) + +``` +[[ddGetDate]] +``` + +Returns: + +``` +27.03.21 +``` + + +#### Get some TV-date with month name to string + +``` +[[ddGetDate? + &date=`[*tvDate*]` + &format=`d month Y` + &monthToStr=`1` + &lang=`en` +]] +``` + +Returns: + +``` +27 March 2021 +``` + + +#### Get date in short format (for example, today is 28.03.2021) + +``` +[[ddGetDate? + &shortFormat=`short, G:i` +]] +``` + +Returns: + +``` +Yesterday, 9:48. +``` + + +## Links + +* [Home page](https://code.divandesign.biz/modx/ddgetdate) +* [Telegram chat](https://t.me/dd_code) +* [Packagist](https://packagist.org/packages/dd/evolutioncms-snippets-ddgetdate) + + + \ No newline at end of file diff --git a/ddGetDate_snippet.php b/ddGetDate_snippet.php index e189384..9665b85 100644 --- a/ddGetDate_snippet.php +++ b/ddGetDate_snippet.php @@ -3,13 +3,7 @@ * ddGetDate.php * @version 2.1.2 (2014-07-13) * - * @desc Snippet returns the date in a specified format. - * - * @param $date {integer | string} - Date. Value 'now' — current date. Default: Pubdate or createdon (if pubdate is empty). - * @param $format {string} - Date format to display. Default: 'd.m.y'. - * @param $monthToStr {0; 1} - Display month as string. If it's true month in «format» must be specified as 'month'. Default: 0. - * @param $shortFormat {string} - Display shorted fromated date. If it's true date in «shortFormat» must be specified as 'short'. Default: ''. - * @param $lang {ru; en} - Month names language. Default: 'ru'. + * @see README.md * * @link http://code.divandesign.biz/modx/ddgetdate/2.1.2 * From 0772e5fb6166bf4297f29f7a049b0fd0381da86d Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 12:12:43 +0300 Subject: [PATCH 03/13] * Minor changes. --- ddGetDate_snippet.php | 149 ++++++++++++++++++++++++++++++++++++------ 1 file changed, 128 insertions(+), 21 deletions(-) diff --git a/ddGetDate_snippet.php b/ddGetDate_snippet.php index 9665b85..01540c2 100644 --- a/ddGetDate_snippet.php +++ b/ddGetDate_snippet.php @@ -1,20 +1,27 @@ documentObject['pub_date']) ? $modx->documentObject['pub_date'] : $modx->documentObject['createdon']; + $date = + $modx->documentObject['pub_date'] ? + $modx->documentObject['pub_date'] : + $modx->documentObject['createdon'] + ; } //Если дата не является Unix-меткой @@ -23,33 +30,133 @@ } if ($date){ - if (isset($lang) && $lang == 'en'){ - $short = array('Day before yesterday', 'Yesterday', 'Today'); - $monthes = array('January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November', 'December'); + if ( + isset($lang) && + $lang == 'en' + ){ + $short = array( + 'Day before yesterday', + 'Yesterday', + 'Today' + ); + $monthes = array( + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December' + ); }else{ - $short = array('Позавчера', 'Вчера', 'Сегодня'); - $monthes = array('января', 'февраля', 'марта', 'апреля', 'мая', 'июня', 'июля', 'августа', 'сентября', 'октября', 'ноября', 'декабря'); + $short = array( + 'Позавчера', + 'Вчера', + 'Сегодня' + ); + $monthes = array( + 'января', + 'февраля', + 'марта', + 'апреля', + 'мая', + 'июня', + 'июля', + 'августа', + 'сентября', + 'октября', + 'ноября', + 'декабря' + ); } //Если задан короткий формат и совпадает год с месяцем, то пытаемся его вывести if (isset($shortFormat)){ //Если разница времени меньше чем в один день, то добавляем "Сегодня" - if (time() - date($date) < 86400){ - return date(str_replace('short', $short[2], $shortFormat), $date); + if ( + ( + time() - + date($date) + ) < + 86400 + ){ + return date( + str_replace( + 'short', + $short[2], + $shortFormat + ), + $date + ); //Вчера - }else if (time() - date($date) < 172800){ - return date(str_replace('short', $short[1], $shortFormat), $date); + }else if ( + ( + time() - + date($date) + ) < + 172800 + ){ + return date( + str_replace( + 'short', + $short[1], + $shortFormat + ), + $date + ); //Позавчера - }else if (time() - date($date) < 259200){ - return date(str_replace('short', $short[0], $shortFormat), $date); + }else if ( + ( + time() - + date($date) + ) < + 259200 + ){ + return date( + str_replace( + 'short', + $short[0], + $shortFormat + ), + $date + ); } } - if (isset($monthToStr) && $monthToStr == '1'){ - $format = str_replace('month', '\m\o\n\t\h', $format); - $result = str_replace('month', $monthes[date('n',$date)-1], date($format, $date)); + if ( + isset($monthToStr) && + $monthToStr == '1' + ){ + $format = str_replace( + 'month', + '\m\o\n\t\h', + $format + ); + + $result = str_replace( + 'month', + $monthes[ + date( + 'n', + $date + ) - + 1 + ], + date( + $format, + $date + ) + ); }else{ - $result = date($format, $date); + $result = date( + $format, + $date + ); } return $result; From f1c080d258cdde314a0fb18416524d02fc39cb0c Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 12:15:10 +0300 Subject: [PATCH 04/13] * Attention! PHP >= 5.4 is required. * Short array syntax is used because it's more convenient. --- README.md | 1 + ddGetDate_snippet.php | 16 ++++++++-------- 2 files changed, 9 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index 3a80abb..f947a3c 100644 --- a/README.md +++ b/README.md @@ -9,6 +9,7 @@ Snippet returns the date in a specified format. It can also: ## Requires +* PHP >= 5.4 * [(MODX)EvolutionCMS](https://github.com/evolution-cms/evolution) >= 1.1 diff --git a/ddGetDate_snippet.php b/ddGetDate_snippet.php index 01540c2..d496809 100644 --- a/ddGetDate_snippet.php +++ b/ddGetDate_snippet.php @@ -34,12 +34,12 @@ isset($lang) && $lang == 'en' ){ - $short = array( + $short = [ 'Day before yesterday', 'Yesterday', 'Today' - ); - $monthes = array( + ]; + $monthes = [ 'January', 'February', 'March', @@ -52,14 +52,14 @@ 'October', 'November', 'December' - ); + ]; }else{ - $short = array( + $short = [ 'Позавчера', 'Вчера', 'Сегодня' - ); - $monthes = array( + ]; + $monthes = [ 'января', 'февраля', 'марта', @@ -72,7 +72,7 @@ 'октября', 'ноября', 'декабря' - ); + ]; } //Если задан короткий формат и совпадает год с месяцем, то пытаемся его вывести From 5e73727f0f3708afae070ff3004238bf2b288918 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 12:23:54 +0300 Subject: [PATCH 05/13] * Attention! PHP >= 5.6 is required. * Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.48 is required. * Snippet: Refactoring, the `$params` variable is used instead of a standalone variable for each parameter. --- README.md | 3 +- ddGetDate_snippet.php | 85 +++++++++++++++++++++++-------------------- 2 files changed, 47 insertions(+), 41 deletions(-) diff --git a/README.md b/README.md index f947a3c..a68657c 100644 --- a/README.md +++ b/README.md @@ -9,8 +9,9 @@ Snippet returns the date in a specified format. It can also: ## Requires -* PHP >= 5.4 +* PHP >= 5.6 * [(MODX)EvolutionCMS](https://github.com/evolution-cms/evolution) >= 1.1 +* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.48 ## Documentation diff --git a/ddGetDate_snippet.php b/ddGetDate_snippet.php index d496809..bd5d748 100644 --- a/ddGetDate_snippet.php +++ b/ddGetDate_snippet.php @@ -10,30 +10,38 @@ * @copyright 2009–2014 DD Group {@link https://DivanDesign.biz } */ -$format = - isset($format) ? - $format : - 'd.m.y' -; +//Include (MODX)EvolutionCMS.libraries.ddTools +require_once( + $modx->getConfig('base_path') . + 'assets/libs/ddTools/modx.ddtools.class.php' +); -if (!isset($date)){ - $date = - $modx->documentObject['pub_date'] ? - $modx->documentObject['pub_date'] : - $modx->documentObject['createdon'] - ; -} +$params = \DDTools\ObjectTools::extend([ + 'objects' => [ + //Defaults + (object) [ + 'date' => + $modx->documentObject['pub_date'] ? + $modx->documentObject['pub_date'] : + $modx->documentObject['createdon'] + , + 'format' => 'd.m.y', + 'monthToStr' => false, + 'shortFormat' => null, + 'lang' => 'ru' + ], + $params + ] +]); //Если дата не является Unix-меткой -if (!is_numeric($date)){ - $date = strtotime($date); +if (!is_numeric($params->date)){ + $params->date = strtotime($params->date); } -if ($date){ - if ( - isset($lang) && - $lang == 'en' - ){ + +if ($params->date){ + if ($params->lang == 'en'){ $short = [ 'Day before yesterday', 'Yesterday', @@ -76,12 +84,12 @@ } //Если задан короткий формат и совпадает год с месяцем, то пытаемся его вывести - if (isset($shortFormat)){ + if (!is_null($params->shortFormat)){ //Если разница времени меньше чем в один день, то добавляем "Сегодня" if ( ( time() - - date($date) + date($params->date) ) < 86400 ){ @@ -89,15 +97,15 @@ str_replace( 'short', $short[2], - $shortFormat + $params->shortFormat ), - $date + $params->date ); //Вчера }else if ( ( time() - - date($date) + date($params->date) ) < 172800 ){ @@ -105,15 +113,15 @@ str_replace( 'short', $short[1], - $shortFormat + $params->shortFormat ), - $date + $params->date ); //Позавчера }else if ( ( time() - - date($date) + date($params->date) ) < 259200 ){ @@ -121,21 +129,18 @@ str_replace( 'short', $short[0], - $shortFormat + $params->shortFormat ), - $date + $params->date ); } } - if ( - isset($monthToStr) && - $monthToStr == '1' - ){ - $format = str_replace( + if ($params->monthToStr){ + $params->format = str_replace( 'month', '\m\o\n\t\h', - $format + $params->format ); $result = str_replace( @@ -143,19 +148,19 @@ $monthes[ date( 'n', - $date + $params->date ) - 1 ], date( - $format, - $date + $params->format, + $params->date ) ); }else{ $result = date( - $format, - $date + $params->format, + $params->date ); } From 3ffeec1cfed33444f10dd635e4e2259140ebcd5e Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 12:26:14 +0300 Subject: [PATCH 06/13] * Refactoring: * The snippet result will be returned in anyway (empty string for empty result). * Variable renaming. --- ddGetDate_snippet.php | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/ddGetDate_snippet.php b/ddGetDate_snippet.php index bd5d748..c4a3852 100644 --- a/ddGetDate_snippet.php +++ b/ddGetDate_snippet.php @@ -16,6 +16,9 @@ 'assets/libs/ddTools/modx.ddtools.class.php' ); +//The snippet must return an empty string even if result is absent +$snippetResult = ''; + $params = \DDTools\ObjectTools::extend([ 'objects' => [ //Defaults @@ -143,7 +146,7 @@ $params->format ); - $result = str_replace( + $snippetResult = str_replace( 'month', $monthes[ date( @@ -158,12 +161,12 @@ ) ); }else{ - $result = date( + $snippetResult = date( $params->format, $params->date ); } - - return $result; } + +return $snippetResult; ?> \ No newline at end of file From c76810ebbfe9cbe4fec001521136904248641f99 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 12:31:40 +0300 Subject: [PATCH 07/13] * Refactoring, the only one `return` is used. --- ddGetDate_snippet.php | 56 ++++++++++++++++++++++++------------------- 1 file changed, 31 insertions(+), 25 deletions(-) diff --git a/ddGetDate_snippet.php b/ddGetDate_snippet.php index c4a3852..afa9dc8 100644 --- a/ddGetDate_snippet.php +++ b/ddGetDate_snippet.php @@ -96,7 +96,7 @@ ) < 86400 ){ - return date( + $snippetResult = date( str_replace( 'short', $short[2], @@ -112,7 +112,7 @@ ) < 172800 ){ - return date( + $snippetResult = date( str_replace( 'short', $short[1], @@ -128,7 +128,7 @@ ) < 259200 ){ - return date( + $snippetResult = date( str_replace( 'short', $short[0], @@ -136,35 +136,41 @@ ), $params->date ); + }else{ + //Флаг, что короткий формат не использовался + $params->shortFormat = null; } } - if ($params->monthToStr){ - $params->format = str_replace( - 'month', - '\m\o\n\t\h', - $params->format - ); - - $snippetResult = str_replace( - 'month', - $monthes[ + //If short format did not used + if (is_null($params->shortFormat)){ + if ($params->monthToStr){ + $params->format = str_replace( + 'month', + '\m\o\n\t\h', + $params->format + ); + + $snippetResult = str_replace( + 'month', + $monthes[ + date( + 'n', + $params->date + ) - + 1 + ], date( - 'n', + $params->format, $params->date - ) - - 1 - ], - date( + ) + ); + }else{ + $snippetResult = date( $params->format, $params->date - ) - ); - }else{ - $snippetResult = date( - $params->format, - $params->date - ); + ); + } } } From 6026dcaa144c5ec66b540e20777e226054327cdd Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 13:03:24 +0300 Subject: [PATCH 08/13] =?UTF-8?q?+=20`\ddGetDate\Snippet`:=20The=20new=20c?= =?UTF-8?q?lass.=20All=20snippet=20code=20was=20moved=20here.=20+=20You=20?= =?UTF-8?q?can=20just=20call=20`\DDTools\Snippet::runSnippet`=20to=20run?= =?UTF-8?q?=20the=20snippet=20without=20DB=20and=20eval=20(see=20README=20?= =?UTF-8?q?=E2=86=92=20Examples).?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 22 ++++- ddGetDate_snippet.php | 163 +----------------------------------- require.php | 13 +++ src/Snippet.php | 189 ++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 227 insertions(+), 160 deletions(-) create mode 100644 require.php create mode 100644 src/Snippet.php diff --git a/README.md b/README.md index a68657c..94105f2 100644 --- a/README.md +++ b/README.md @@ -19,7 +19,8 @@ Snippet returns the date in a specified format. It can also: ### Installation -Elements → Snippets: Create a new snippet with the following data: + +#### 1. Elements → Snippets: Create a new snippet with the following data 1. Snippet name: `ddGetDate`. 2. Description: `2.1.2 Snippet returns the date in a specified format.`. @@ -28,6 +29,12 @@ Elements → Snippets: Create a new snippet with the following data: 5. Snippet code (php): Insert content of the `ddGetDate_snippet.php` file from the archive. +#### 2. Elements → Manage Files + +1. Create a new folder `assets/snippets/ddGetDate/`. +2. Extract the archive to the folder (except `ddGetDate_snippet.php`). + + ### Parameters description * `date` @@ -128,6 +135,19 @@ Yesterday, 9:48. ``` +#### Run the snippet through `\DDTools\Snippet::runSnippet` without DB and eval + +```php +\DDTools\Snippet::runSnippet([ + 'name' => 'ddGetDate', + 'params' => [ + 'date' => 'now', + 'format' => 'd.m.Y' + ] +]); +``` + + ## Links * [Home page](https://code.divandesign.biz/modx/ddgetdate) diff --git a/ddGetDate_snippet.php b/ddGetDate_snippet.php index afa9dc8..c300f72 100644 --- a/ddGetDate_snippet.php +++ b/ddGetDate_snippet.php @@ -14,165 +14,10 @@ require_once( $modx->getConfig('base_path') . 'assets/libs/ddTools/modx.ddtools.class.php' -); + ); -//The snippet must return an empty string even if result is absent -$snippetResult = ''; - -$params = \DDTools\ObjectTools::extend([ - 'objects' => [ - //Defaults - (object) [ - 'date' => - $modx->documentObject['pub_date'] ? - $modx->documentObject['pub_date'] : - $modx->documentObject['createdon'] - , - 'format' => 'd.m.y', - 'monthToStr' => false, - 'shortFormat' => null, - 'lang' => 'ru' - ], - $params - ] +return \DDTools\Snippet::runSnippet([ + 'name' => 'ddGetDate', + 'params' => $params ]); - -//Если дата не является Unix-меткой -if (!is_numeric($params->date)){ - $params->date = strtotime($params->date); -} - - -if ($params->date){ - if ($params->lang == 'en'){ - $short = [ - 'Day before yesterday', - 'Yesterday', - 'Today' - ]; - $monthes = [ - 'January', - 'February', - 'March', - 'April', - 'May', - 'June', - 'July', - 'August', - 'September', - 'October', - 'November', - 'December' - ]; - }else{ - $short = [ - 'Позавчера', - 'Вчера', - 'Сегодня' - ]; - $monthes = [ - 'января', - 'февраля', - 'марта', - 'апреля', - 'мая', - 'июня', - 'июля', - 'августа', - 'сентября', - 'октября', - 'ноября', - 'декабря' - ]; - } - - //Если задан короткий формат и совпадает год с месяцем, то пытаемся его вывести - if (!is_null($params->shortFormat)){ - //Если разница времени меньше чем в один день, то добавляем "Сегодня" - if ( - ( - time() - - date($params->date) - ) < - 86400 - ){ - $snippetResult = date( - str_replace( - 'short', - $short[2], - $params->shortFormat - ), - $params->date - ); - //Вчера - }else if ( - ( - time() - - date($params->date) - ) < - 172800 - ){ - $snippetResult = date( - str_replace( - 'short', - $short[1], - $params->shortFormat - ), - $params->date - ); - //Позавчера - }else if ( - ( - time() - - date($params->date) - ) < - 259200 - ){ - $snippetResult = date( - str_replace( - 'short', - $short[0], - $params->shortFormat - ), - $params->date - ); - }else{ - //Флаг, что короткий формат не использовался - $params->shortFormat = null; - } - } - - //If short format did not used - if (is_null($params->shortFormat)){ - if ($params->monthToStr){ - $params->format = str_replace( - 'month', - '\m\o\n\t\h', - $params->format - ); - - $snippetResult = str_replace( - 'month', - $monthes[ - date( - 'n', - $params->date - ) - - 1 - ], - date( - $params->format, - $params->date - ) - ); - }else{ - $snippetResult = date( - $params->format, - $params->date - ); - } - } -} - -return $snippetResult; ?> \ No newline at end of file diff --git a/require.php b/require.php new file mode 100644 index 0000000..5dc22a7 --- /dev/null +++ b/require.php @@ -0,0 +1,13 @@ + \ No newline at end of file diff --git a/src/Snippet.php b/src/Snippet.php new file mode 100644 index 0000000..0d87134 --- /dev/null +++ b/src/Snippet.php @@ -0,0 +1,189 @@ + null, + 'format' => 'd.m.y', + 'monthToStr' => false, + 'shortFormat' => null, + 'lang' => 'ru' + ] + ; + + /** + * prepareParams + * @version 1.0 (2021-03-27) + * + * @param $this->params {stdClass|arrayAssociative|stringJsonObject|stringQueryFormatted} + * + * @return {void} + */ + protected function prepareParams($params = []){ + //Call base method + parent::prepareParams($params); + + if (is_null($this->params->date)){ + $this->params->date = + \ddTools::$modx->documentObject['pub_date'] ? + \ddTools::$modx->documentObject['pub_date'] : + \ddTools::$modx->documentObject['createdon'] + ; + } + + //Если дата не является Unix-меткой + if (!is_numeric($this->params->date)){ + $this->params->date = strtotime($this->params->date); + } + } + + /** + * run + * @version 1.0 (2021-03-27) + * + * @return {string} + */ + public function run(){ + //The snippet must return an empty string even if result is absent + $result = ''; + + if ($this->params->date){ + if ($this->params->lang == 'en'){ + $short = [ + 'Day before yesterday', + 'Yesterday', + 'Today' + ]; + + $monthes = [ + 'January', + 'February', + 'March', + 'April', + 'May', + 'June', + 'July', + 'August', + 'September', + 'October', + 'November', + 'December' + ]; + }else{ + $short = [ + 'Позавчера', + 'Вчера', + 'Сегодня' + ]; + + $monthes = [ + 'января', + 'февраля', + 'марта', + 'апреля', + 'мая', + 'июня', + 'июля', + 'августа', + 'сентября', + 'октября', + 'ноября', + 'декабря' + ]; + } + + //Если задан короткий формат и совпадает год с месяцем, то пытаемся его вывести + if (!is_null($this->params->shortFormat)){ + //Если разница времени меньше чем в один день, то добавляем "Сегодня" + if ( + ( + time() - + date($this->params->date) + ) < + 86400 + ){ + $result = date( + str_replace( + 'short', + $short[2], + $this->params->shortFormat + ), + $this->params->date + ); + //Вчера + }else if ( + ( + time() - + date($this->params->date) + ) < + 172800 + ){ + $result = date( + str_replace( + 'short', + $short[1], + $this->params->shortFormat + ), + $this->params->date + ); + //Позавчера + }else if ( + ( + time() - + date($this->params->date) + ) < + 259200 + ){ + $result = date( + str_replace( + 'short', + $short[0], + $this->params->shortFormat + ), + $this->params->date + ); + }else{ + //Флаг, что короткий формат не использовался + $this->params->shortFormat = null; + } + } + + //If short format did not used + if (is_null($this->params->shortFormat)){ + if ($this->params->monthToStr){ + $this->params->format = str_replace( + 'month', + '\m\o\n\t\h', + $this->params->format + ); + + $result = str_replace( + 'month', + $monthes[ + date( + 'n', + $this->params->date + ) - + 1 + ], + date( + $this->params->format, + $this->params->date + ) + ); + }else{ + $result = date( + $this->params->format, + $this->params->date + ); + } + } + } + + return $result; + } +} \ No newline at end of file From b1c6a1860d35b69ea65c6177aa19474338f1485c Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 13:05:07 +0300 Subject: [PATCH 09/13] * Code style, `elseif` is used instead of `else if`. --- src/Snippet.php | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Snippet.php b/src/Snippet.php index 0d87134..8e35db1 100644 --- a/src/Snippet.php +++ b/src/Snippet.php @@ -43,7 +43,7 @@ protected function prepareParams($params = []){ /** * run - * @version 1.0 (2021-03-27) + * @version 1.0.1 (2021-03-27) * * @return {string} */ @@ -115,7 +115,7 @@ public function run(){ $this->params->date ); //Вчера - }else if ( + }elseif ( ( time() - date($this->params->date) @@ -131,7 +131,7 @@ public function run(){ $this->params->date ); //Позавчера - }else if ( + }elseif ( ( time() - date($this->params->date) From 5505cd507bd41d01614264d261ad6b8d2cbeb5dd Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 13:07:22 +0300 Subject: [PATCH 10/13] + Composer.json. --- composer.json | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 composer.json diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..5117401 --- /dev/null +++ b/composer.json @@ -0,0 +1,40 @@ +{ + "name": "dd/evolutioncms-snippets-ddgetdate", + "type": "modxevo-snippet", + "version": "2.1.2", + "description": "Snippet returns the date in a specified format.", + "keywords": [ + "modx", + "modx evo", + "modx evolution", + "evo", + "evo cms", + "evolutioncms", + "evolution cms", + "dd group", + "dd studio", + "divandesign", + "ddgetdate", + "date", + "date format" + ], + "homepage": "https://code.divandesign.biz/modx/ddgetdate", + "authors": [ + { + "name": "DD Group", + "email": "code@DivanDesign.biz", + "homepage": "https://code.divandesign.biz", + "role": "Owner" + }, + { + "name": "Ilyas Ronef", + "email": "ilyas@DivanDesign.ru", + "homepage": "https://ronef.ru", + "role": "Developer" + } + ], + "require": { + "php": ">=5.6.0", + "dd/evolutioncms-libraries-ddtools": ">=0.48.0" + } +} \ No newline at end of file From c56bcd81af94e7584ecce4501e6aade711f7178c Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Sat, 27 Mar 2021 13:18:40 +0300 Subject: [PATCH 11/13] + README_ru. --- README_ru.md | 158 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 158 insertions(+) create mode 100644 README_ru.md diff --git a/README_ru.md b/README_ru.md new file mode 100644 index 0000000..d9d3ec1 --- /dev/null +++ b/README_ru.md @@ -0,0 +1,158 @@ +# (MODX)EvolutionCMS.snippets.ddGetDate + +Сниппет выводит дату по заданному формату. Также он умеет: +* Возвращать текущую дату. +* Автоматически возвращать дату публикации, а если её нет, то дату создания документа. +* Отображать месяцы строкой (`января`, `февраля`, `марта` и т.д.). +* Выводить дату в коротком формате относительно текущей даты (`Сегодня`, `Вчера`, `Позавчера`). + + +## Использует + +* PHP >= 5.6 +* [(MODX)EvolutionCMS](https://github.com/evolution-cms/evolution) >= 1.1 +* [(MODX)EvolutionCMS.libraries.ddTools](https://code.divandesign.biz/modx/ddtools) >= 0.48 + + +## Документация + + +### Установка + + +#### 1. Элементы → Сниппеты: Создайте новый сниппет со следующими параметрами + +1. Название сниппета: `ddGetDate`. +2. Описание: `2.1.2 Сниппет выводит дату по заданному формату.`. +3. Категория: `Core`. +4. Анализировать DocBlock: `no`. +5. Код сниппета (php): Вставьте содержимое файла `ddGetDate_snippet.php` из архива. + + +#### 2. Элементы → Управление файлами + +1. Создайте новую папку `assets/snippets/ddGetDate/`. +2. Извлеките содержимое архива в неё (кроме файла `ddGetDate_snippet.php`). + + +### Описание параметров + +* `date` + * Описание: Дата. + * Допустимые значения: + * `integer` + * `string` + * `'now'` — текущая дата + * Значение по умолчанию: Дата публикации, если её нет — дата создания документа. + +* `format` + * Описание: Формат, по которому выводить дату. + * Допустимые значения: `string` + * Значение по умолчанию: `'d.m.y'` + +* `monthToStr` + * Описание: Отображать ли месяц строкой (января, февраля, марта и т.д.), в этом случае месяц в строке `format` должен быть задан как `'month'`. + * Допустимые значения: + * `0` + * `1` + * Значение по умолчанию: `0` + +* `shortFormat` + * Описание: Если задан короткий формат, то выводит дату относительно текущей, в этом случае дата в строке `shotFormat` должна быть задана как `'short'`. + * Допустимые значения: `string` + * Значение по умолчанию: — + +* `lang` + * Описание: Язык названий месяцев. + * Допустимые значения: + * `'ru'` + * `'en'` + * Значение по умолчанию: `'ru'` + + +### Примеры + + +#### Получение текущего года + +``` +[[ddGetDate? + &date=`now` + &format=`Y` +]] +``` + +Вернёт: + +``` +2021 +``` + + +#### Получение даты публикации текущего документа, а если её нет, то даты создания + +``` +[[ddGetDate]] +``` + +Вернёт: + +``` +27.03.21 +``` + + +#### Получение даты из TV с выводом месяца в строку + +``` +[[ddGetDate? + &date=`[*tvDate*]` + &format=`d month Y` + &monthToStr=`1` + &lang=`en` +]] +``` + +Вернёт: + +``` +27 марта 2021 +``` + + +#### Вывод даты в коротком формате относительно текущей даты (предположим, что сегодня 28.03.2021) + +``` +[[ddGetDate? + &shortFormat=`short, G:i` +]] +``` + +Вернёт: + +``` +Вчера, 9:48. +``` + + +#### Запустить сниппет без DB и eval через `\DDTools\Snippet::runSnippet` + +```php +\DDTools\Snippet::runSnippet([ + 'name' => 'ddGetDate', + 'params' => [ + 'date' => 'now', + 'format' => 'd.m.Y' + ] +]); +``` + + +## Ссылки + +* [Home page](https://code.divandesign.biz/modx/ddgetdate) +* [Telegram chat](https://t.me/dd_code) +* [Packagist](https://packagist.org/packages/dd/evolutioncms-snippets-ddgetdate) + + + \ No newline at end of file From f7d7dd39d97edb6c638882ce978c82af409b09c7 Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Wed, 7 Apr 2021 11:20:25 +0300 Subject: [PATCH 12/13] + CHANGELOG. + CHANGELOG_ru. --- CHANGELOG.md | 29 +++++++++++++++++++++++++++++ CHANGELOG_ru.md | 29 +++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+) create mode 100644 CHANGELOG.md create mode 100644 CHANGELOG_ru.md diff --git a/CHANGELOG.md b/CHANGELOG.md new file mode 100644 index 0000000..2996f0c --- /dev/null +++ b/CHANGELOG.md @@ -0,0 +1,29 @@ +# (MODX)EvolutionCMS.snippets.ddGetDate changelog + + +## Version 2.1.2 (2014-07-13) +* \* Bugfix: undeclared variables in PHP 5.3. +* \* The redundant code has been removed. + + +## Version 2.1.1 (2012-03-16) +* \+ Added English support for short formated date (if used `shortFormat`). + + +## Version 2.1 (2012-03-05) +* \+ Added English support in month names (if `monthToStr` equals `1`). + + +## Version 2.0 (2012-01-23) +* \* Attention! Backward compatibility is broken. +* \* Parameters → `date`: + * \+ Now supports not only unixtime. Added unixtime check and converting with `strtotime()`. + * \* Value `'current'` was replaced to `'now'` (`strtotime()` native support). + + +## Version 1.9 (2010-11-23) +* \* Minor optimization. + + + + \ No newline at end of file diff --git a/CHANGELOG_ru.md b/CHANGELOG_ru.md new file mode 100644 index 0000000..6bbb6b2 --- /dev/null +++ b/CHANGELOG_ru.md @@ -0,0 +1,29 @@ +# (MODX)EvolutionCMS.snippets.ddGetDate changelog + + +## Версия 2.1.2 (2014-07-13) +* \* Исправлена ошибка с обращением к не объявленным переменным (PHP 5.3). +* \* Удалён избыточный код. + + +## Версия 2.1.1 (2012-03-16) +* \+ Добавлен вывод даты в коротком формате на английском (при использовании параметра `shortFormat`). + + +## Версия 2.1 (2012-03-05) +* \+ Добавлен вывод месяцев на английском (при `monthToStr` равном `1`). + + +## Версия 2.0 (2012-01-23) +* \* Внимание! Нарушена обратная совместимость. +* \* Parameters → `date`: + * \+ Дату теперь можно передавать не только в unixtime. Добавлена проверка даты на UNIX-формат, добавлено преобразование через `strtotime()`. + * \* Вместо возможного значения `'current'` теперь значение `'now'` (обусловленно тем, что функция `strtotime` понимает `'now'` сама). + + +## Версия 1.9 (2010-11-23) +* \* Небольшая оптимизация. + + + + \ No newline at end of file From 4f848f109cae2895a2cddd401809aedf608b6a3c Mon Sep 17 00:00:00 2001 From: Ilyas Ronef Date: Wed, 7 Apr 2021 11:25:33 +0300 Subject: [PATCH 13/13] Prerelease --- CHANGELOG.md | 12 ++++++++++++ CHANGELOG_ru.md | 12 ++++++++++++ README.md | 2 +- README_ru.md | 2 +- composer.json | 2 +- ddGetDate_snippet.php | 4 ++-- src/Snippet.php | 2 +- 7 files changed, 30 insertions(+), 6 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2996f0c..00ef9db 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,6 +1,18 @@ # (MODX)EvolutionCMS.snippets.ddGetDate changelog +## Version 2.2 (2021-04-07) +* \* Attention! PHP >= 5.6 is required. +* \* Attention! (MODX)EvolutionCMS.libraries.ddTools >= 0.48 is required. +* \+ You can just call `\DDTools\Snippet::runSnippet` to run the snippet without DB and eval (see README → Examples). +* \+ `\ddGetDate\Snippet`: The new class. All snippet code was moved here. +* \+ README. +* \+ README_ru. +* \+ CHANGELOG. +* \+ CHANGELOG_ru. +* \+ Composer.json. + + ## Version 2.1.2 (2014-07-13) * \* Bugfix: undeclared variables in PHP 5.3. * \* The redundant code has been removed. diff --git a/CHANGELOG_ru.md b/CHANGELOG_ru.md index 6bbb6b2..4de1596 100644 --- a/CHANGELOG_ru.md +++ b/CHANGELOG_ru.md @@ -1,6 +1,18 @@ # (MODX)EvolutionCMS.snippets.ddGetDate changelog +## Версия 2.2 (2021-04-07) +* \* Внимание! Требуется PHP >= 5.6. +* \* Внимание! Требуется (MODX)EvolutionCMS.libraries.ddTools >= 0.48. +* \+ Запустить сниппет без DB и eval можно через `\DDTools\Snippet::runSnippet` (см. примеры в README). +* \+ `\ddGetDate\Snippet`: Новый класс. Весь код сниппета перенесён туда. +* \+ README. +* \+ README_ru. +* \+ CHANGELOG. +* \+ CHANGELOG_ru. +* \+ Composer.json. + + ## Версия 2.1.2 (2014-07-13) * \* Исправлена ошибка с обращением к не объявленным переменным (PHP 5.3). * \* Удалён избыточный код. diff --git a/README.md b/README.md index 94105f2..98f195f 100644 --- a/README.md +++ b/README.md @@ -23,7 +23,7 @@ Snippet returns the date in a specified format. It can also: #### 1. Elements → Snippets: Create a new snippet with the following data 1. Snippet name: `ddGetDate`. -2. Description: `2.1.2 Snippet returns the date in a specified format.`. +2. Description: `2.2 Snippet returns the date in a specified format.`. 3. Category: `Core`. 4. Parse DocBlock: `no`. 5. Snippet code (php): Insert content of the `ddGetDate_snippet.php` file from the archive. diff --git a/README_ru.md b/README_ru.md index d9d3ec1..11ee40c 100644 --- a/README_ru.md +++ b/README_ru.md @@ -23,7 +23,7 @@ #### 1. Элементы → Сниппеты: Создайте новый сниппет со следующими параметрами 1. Название сниппета: `ddGetDate`. -2. Описание: `2.1.2 Сниппет выводит дату по заданному формату.`. +2. Описание: `2.2 Сниппет выводит дату по заданному формату.`. 3. Категория: `Core`. 4. Анализировать DocBlock: `no`. 5. Код сниппета (php): Вставьте содержимое файла `ddGetDate_snippet.php` из архива. diff --git a/composer.json b/composer.json index 5117401..c92abe1 100644 --- a/composer.json +++ b/composer.json @@ -1,7 +1,7 @@ { "name": "dd/evolutioncms-snippets-ddgetdate", "type": "modxevo-snippet", - "version": "2.1.2", + "version": "2.2.0", "description": "Snippet returns the date in a specified format.", "keywords": [ "modx", diff --git a/ddGetDate_snippet.php b/ddGetDate_snippet.php index c300f72..0ae094e 100644 --- a/ddGetDate_snippet.php +++ b/ddGetDate_snippet.php @@ -1,13 +1,13 @@