Browse Source

Refactor YAML frontmatter date parsing

You can now explicitly specify both the `date_formatted` and `time` meta values to overwrite Pico's page date handling. Specifying `time` doesn't make much sense in general, however, specifying `date_formatted` allows you to use `{{ meta.date_formatted }}` on all systems, even those where `strftime()` doesn't work as wished
Daniel Rudolf 8 years ago
parent
commit
b73e197ccb
1 changed files with 12 additions and 5 deletions
  1. 12 5
      lib/Pico.php

+ 12 - 5
lib/Pico.php

@@ -1229,21 +1229,28 @@ class Pico
                 }
             }
 
-            if (!empty($meta['date'])) {
+            if (!empty($meta['date']) || !empty($meta['time'])) {
                 // workaround for issue #336
                 // Symfony YAML interprets ISO-8601 datetime strings and returns timestamps instead of the string
                 // this behavior conforms to the YAML standard, i.e. this is no bug of Symfony YAML
                 if (is_int($meta['date'])) {
                     $meta['time'] = $meta['date'];
+                    $meta['date'] = '';
+                }
 
+                if (empty($meta['time'])) {
+                    $meta['time'] = strtotime($meta['date']) ?: '';
+                } elseif (empty($meta['date'])) {
                     $rawDateFormat = (date('H:i:s', $meta['time']) === '00:00:00') ? 'Y-m-d' : 'Y-m-d H:i:s';
                     $meta['date'] = date($rawDateFormat, $meta['time']);
-                } else {
-                    $meta['time'] = strtotime($meta['date']);
                 }
-                $meta['date_formatted'] = utf8_encode(strftime($this->getConfig('date_format'), $meta['time']));
             } else {
-                $meta['date'] = $meta['time'] = $meta['date_formatted'] = '';
+                $meta['date'] = $meta['time'] = '';
+            }
+
+            if (empty($meta['date_formatted'])) {
+                $dateFormat = $this->getConfig('date_format');
+                $meta['date_formatted'] = $meta['time'] ? utf8_encode(strftime($dateFormat, $meta['time'])) : '';
             }
         } else {
             // guarantee array key existance