Преимущества модуля:
Приведенный ниже код используйте в нужном месте вашего сайта, где $content
– это переменная, содержащая в себе ваш контент.
$content = "Ваш контент";
$words_per_minute = "250"; // Время чтения слов в минуту
$img_per_minute = "12"; // Время чтения изображения в секундах
$img_numb = preg_match_all("~<img~i", $content, $result_numb); // Получаем общее количество изображений в тексте
$text_read = round(count(preg_split("/s/", $content)) / $words_per_minute, 1); // Получаем общее время чтения текста
$img_read = floor((count($result_numb[0]) * $img_per_minute) / 60); // Получаем общее время чтения изображений
$all_read = $img_read + $text_read; // Получаем общее время чтения (текст + изображения)
function decl_of_numb($all_numb, $titles) {
$cases = array(2, 0, 1, 1, 1, 2);
return $all_numb." ".$titles[($all_numb%100>4 && $all_numb%100<20) ? 2 : $cases[min($all_numb%10, 5)]];
}
echo "<b>Время чтения статьи:</b> ".decl_of_numb(round($all_read), array(" минута", " минуты", " минут"));
Если вы хотите исключить время чтения для изображений, то переменную $img_per_minute
выставите в 0.
// @param float|null $k - коэффициент трудности, а точнее скорости чтения материала. С его помощью вносится поправка на время чтения
// @example [[readingTime? &k = `1,5`]] здесь в параметре ошибка (запятая вместо точки), которая будет исправлена в сниппете
// Если значение &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;