-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathsnippet.readingTime.php
37 lines (30 loc) · 1.88 KB
/
snippet.readingTime.php
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<?php
/**
* readingTime
* Вывод времени, необходимого на чтение статьи
* в зависимости от кол-ва символов из поля content
*
* @category snippet
* @version 0.1
*
* @param float|null $k - коэффициент трудности, а точнее скорости чтения материала. С его помощью вносится поправка на время чтения.
*
* @example [[readingTime? &k = `1,5`]] здесь в параметре ошибка (запятая вместо точки), которая будет исправлена в сниппете
*
* @author Aharito http://aharito.ru
**/
// Если значение &k не указано в вызове сниппета, то делаем равным 1
// заодно исправляем, если вместо десятичной точки человек поставил запятую
$k = isset($k) ? str_replace(",", ".", $k) : 1;
// Время "чтения" одного знака. Исходя из моего эксперимента равно 0.042 сек.
$t = 0.042;
// Вычисляем кол-во знаков в статье, исключая теги
$symbolsCount = mb_strlen(strip_tags($modx->documentObject['content']));
// Вычисляем общее время чтения в секундах с учетом коэффициента трудности
$readingTime = $symbolsCount * $t * $k;
// Переводим в часы-минуты
$hours = floor($readingTime / 3600);
$min = ceil(($readingTime % 3600) / 60); // ceil вместо round для того, чтобы для очень короткой статьи не получилось 0 минут
$hours = ($hours >= 1) ? $hours." ч " : "";
$min = ($min >= 1) ? $min." мин " : "";
return $hours.$min;