From 2d8e8cbbc4fcc1ee9db06bf15d7bef7afdedffd3 Mon Sep 17 00:00:00 2001 From: lukeyouell <> Date: Thu, 21 Feb 2019 14:35:46 +0000 Subject: [PATCH 1/3] matrix field support --- src/twigextensions/ReadTimeTwigExtension.php | 89 ++++++++++++-------- 1 file changed, 54 insertions(+), 35 deletions(-) diff --git a/src/twigextensions/ReadTimeTwigExtension.php b/src/twigextensions/ReadTimeTwigExtension.php index 2179960..19388ce 100644 --- a/src/twigextensions/ReadTimeTwigExtension.php +++ b/src/twigextensions/ReadTimeTwigExtension.php @@ -48,48 +48,67 @@ public function readTimeFunction($element, $showSeconds = true) $totalSeconds = 0; $vals = ''; - foreach ($element->getFieldLayout()->getFields() as $field) { - try { - // If field is a matrix then loop through fields in block - if ($field instanceof \craft\fields\Matrix) { - foreach($element->getFieldValue($field->handle)->all() as $block) { - $blockFields = $block->getFieldLayout()->getFields(); - - foreach ($blockFields as $blockField) { - $value = $block->getFieldValue($blockField->handle); - $seconds = $this->valToSeconds($value); - $totalSeconds = $totalSeconds + $seconds; - } - } - } elseif($field instanceof \verbb\supertable\fields\SuperTableField) { - foreach($element->getFieldValue($field->handle)->all() as $block) { - $blockFields = $block->getFieldLayout()->getFields(); - - foreach ($blockFields as $blockField) { - if ($blockField instanceof \craft\fields\Matrix) { - foreach($block->getFieldValue($blockField->handle)->all() as $matrix) { - $matrixFields = $matrix->getFieldLayout()->getFields(); - - foreach ($matrixFields as $matrixField) { - $value = $matrix->getFieldValue($matrixField->handle); - $seconds = $this->valToSeconds($value); - $totalSeconds = $totalSeconds + $seconds; - } - } - } else { + if ($element instanceof \craft\elements\Entry) { + // Provided value is an entry + + foreach ($element->getFieldLayout()->getFields() as $field) { + try { + // If field is a matrix then loop through fields in block + if ($field instanceof \craft\fields\Matrix) { + foreach($element->getFieldValue($field->handle)->all() as $block) { + $blockFields = $block->getFieldLayout()->getFields(); + + foreach ($blockFields as $blockField) { $value = $block->getFieldValue($blockField->handle); $seconds = $this->valToSeconds($value); $totalSeconds = $totalSeconds + $seconds; } } + } elseif($field instanceof \verbb\supertable\fields\SuperTableField) { + foreach($element->getFieldValue($field->handle)->all() as $block) { + $blockFields = $block->getFieldLayout()->getFields(); + + foreach ($blockFields as $blockField) { + if ($blockField instanceof \craft\fields\Matrix) { + foreach($block->getFieldValue($blockField->handle)->all() as $matrix) { + $matrixFields = $matrix->getFieldLayout()->getFields(); + + foreach ($matrixFields as $matrixField) { + $value = $matrix->getFieldValue($matrixField->handle); + $seconds = $this->valToSeconds($value); + $totalSeconds = $totalSeconds + $seconds; + } + } + } else { + $value = $block->getFieldValue($blockField->handle); + $seconds = $this->valToSeconds($value); + $totalSeconds = $totalSeconds + $seconds; + } + } + } + } else { + $value = $element->getFieldValue($field->handle); + $seconds = $this->valToSeconds($value); + $totalSeconds = $totalSeconds + $seconds; + } + } catch (ErrorException $e) { + continue; + } + } + } elseif(is_array($element)) { + // Provided value is a matrix field + Craft::info('matrix field provided', 'readtime'); + + foreach ($element as $block) { + if ($block instanceof \craft\elements\MatrixBlock) { + $blockFields = $block->getFieldLayout()->getFields(); + + foreach ($blockFields as $blockField) { + $value = $block->getFieldValue($blockField->handle); + $seconds = $this->valToSeconds($value); + $totalSeconds = $totalSeconds + $seconds; } - } else { - $value = $element->getFieldValue($field->handle); - $seconds = $this->valToSeconds($value); - $totalSeconds = $totalSeconds + $seconds; } - } catch (ErrorException $e) { - continue; } } From 7a6f7340ecf6d3f1272b95067245de27e4d9cf18 Mon Sep 17 00:00:00 2001 From: lukeyouell <> Date: Thu, 21 Feb 2019 14:35:56 +0000 Subject: [PATCH 2/3] matrix field support --- README.md | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 65e8368..f2a804b 100644 --- a/README.md +++ b/README.md @@ -62,22 +62,18 @@ Returns: 3 minutes ## Using the Function -The `readTime()` function returns a [TimeModel](#timemodel) for the whole entry based on it's field layout. +The `readTime()` function returns a [TimeModel](#timemodel) for matrix fields or the whole entry based on it's field layout. Seconds are included by default, but can be disabled by adding a second parameter of `false` - this only affects the human time format. #### Examples ```twig -{{ readTime(entry) }} - -Returns: 9 minutes, 40 seconds +{{ readTime(entry) }} or {{ readTime(entry.matrixField.all()) }} ``` ```twig -{{ readTime(entry, false) }} - -Returns: 10 minutes +{{ readTime(entry, false) }} or {{ readTime(entry.matrixField.all(), false) }} ``` ## TimeModel @@ -92,6 +88,8 @@ Outputting a TimeModel object without attaching a property or method will return {{ string|readTime }} {{ readTime(entry) }} + +{{ readTime(entry.matrixField.all()) }} ``` ### Properties From c4e1766f41a82816498bd84c58aa2ebc6bb68932 Mon Sep 17 00:00:00 2001 From: lukeyouell <> Date: Thu, 21 Feb 2019 14:36:02 +0000 Subject: [PATCH 3/3] 1.5.0 --- CHANGELOG.md | 5 +++++ composer.json | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index fb4a0d7..aed8a4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,11 @@ All notable changes to this project will be documented in this file. +## 1.5.0 - 2019-02-21 + +### Added +- Matrix field support + ## 1.4.0 - 2018-07-31 ### Added diff --git a/composer.json b/composer.json index 23f51de..2250514 100644 --- a/composer.json +++ b/composer.json @@ -2,7 +2,7 @@ "name": "lukeyouell/craft-readtime", "description": "Calculate the estimated read time for content.", "type": "craft-plugin", - "version": "1.4.0", + "version": "1.5.0", "keywords": [ "craft", "cms",