Мощные VPS/VDS-сервера на новейшем поколении процессоров Intel от 210 ₽ в месяц   •   Реклама
Артём Мáлков

Время прочтения статьи на PHP

8 мар7 комм

В продолжение темы подсчета времени прочтения статьи хотел бы представить вам вариант реализации этого функционала на PHP. В отличие от похожего модуля на jQuery, он выполняется на стороне сервера, а потому более стабилен. И если ваш хостинг имеет поддержку PHP – смело ставьте именно этот вариант.

Время прочтения статьи на PHP

Преимущества модуля:

  1. Легкое использование.
  2. Возможность задать скорость чтения слов в минуту.
  3. Возможность включить изображения в общее время чтения.
  4. Склонение «минут» в зависимости от числа.
  5. Более стабильная работа модуля.

Установка модуля

Приведенный ниже код используйте в нужном месте вашего сайта, где $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.

7
комментариев
Форма комментирования этого поста скрыта. Авторизуйтесь, чтобы расширить привилегии гостевого посещения и получить необходимую помощь от сообщества Pandoge.
    • 0
    2
      •  Пользователь
    27 июл в 22:15

    нашел вариант по проще но не пойму как внедрить в DLE

    function reading_time() {
      $content = get_post_field( 'post_content', $post->ID );
      $word_count = str_word_count( strip_tags( $content ) );
      $readingtime = ceil($word_count / 200);
      $totalreadingtime = $readingtime . ' мин.';
      return $totalreadingtime;
    }
    <?php echo reading_time(); ?>
    cry

    • 0
    766
      •  Гости
    13 апр в 21:51

    Подключил последним способом.

    Но текст обработчика выводится в полной новости.

    • 8
    1021
      •  Команда Pandoge
    10 апр в 01:47

    Evgen, для этого, вам нужно текст передать через параметр {include file="/engine/modules/Readingtime.php?content=Ваш текст"}.

    А в самом скрипте вы удаляете $content = "Ваш контент"; и чисто теоретически - должно работать. Попробуйте, и о результате тут отпишитесь. "Ваш контент" вы заменяете либо доп полем, где у вас будет текст, либо {full-story}

      • 0
      2
        •  Пользователь
      27 июл в 13:34

      Артём Мáлков, Увы не работает на DLE ((( вставлял {full-story} и {short-story} выводит всю статью...

    • 0
    766
      •  Гости
    9 апр в 15:34

    А как насчет безопастности? Можно ли это реализовать как доп модулем? И вставить вот так {include file="/engine/modules/Readingtime.php"}

    • 8
    1021
      •  Команда Pandoge
    9 апр в 01:34

    Evgen, у вас разрешены php вставки из этой статьи - https://www.pandoge.com/haki/ispolzovanie-php-vstavok-v-shablonah-dle ?

    • 0
    766
      •  Гости
    8 апр в 22:47

    Здравствуйте. Подскажите что куда вставлять в dle?

Подняться наверх
«Pandoge» - помощник вебмастера