mtownsend/read-time

一个PHP包,展示用户阅读内容所需的时间。

2.0.0 2021-01-11 13:46 UTC

This package is auto-updated.

Last update: 2024-09-19 04:07:58 UTC


README

一个PHP包,展示用户阅读内容所需的时间。

安装

通过composer安装

composer require mtownsend/read-time

此包旨在与任何PHP 7.0+应用程序一起工作,但特别支持Laravel。

注册服务提供者(Laravel)

对于Laravel 5.4及以下版本,将以下行添加到您的config/app.php

/*
 * Package Service Providers...
 */
Mtownsend\ReadTime\Providers\ReadTimeServiceProvider::class,

对于Laravel 5.5及以上版本,该包将自动为您注册提供者。

使用Lumen

要注册服务提供者,请将以下行添加到app/bootstrap/app.php

$app->register(Mtownsend\ReadTime\Providers\ReadTimeServiceProvider::class);

发布配置文件(Laravel)

ReadTime为Laravel应用程序提供了特殊的配置支持。您可以发布单个配置文件,并自定义您想要显示的阅读时间文本。

php artisan vendor:publish --provider="Mtownsend\ReadTime\Providers\ReadTimeServiceProvider" --tag="read-time-config"

这是read-time.php配置文件的内容

return [

    /*
     * Whether or not minute/second should be abbreviated as min/sec
     */
    'abbreviate_time_measurements' => false,

    /*
     * Omit seconds from being displayed in the read time estimate
     */
    'omit_seconds' => true,

    /*
     * Whether or not only the time should be displayed
     */
    'time_only' => false,

    /*
     * The average words per minute reading time
     */
    'words_per_minute' => 230,
];

发布翻译文件(Laravel)

ReadTime支持Laravel的本地化。如果您使用Laravel,您可能希望使用预制的翻译。

php artisan vendor:publish --provider="Mtownsend\ReadTime\Providers\ReadTimeServiceProvider" --tag="read-time-language-files"

快速入门

使用类

以下是最基本的用法示例

use Mtownsend\ReadTime\ReadTime;

$readTime = (new ReadTime($content))->get();

如果您希望在运行时更改设置,也可以向构造函数传递多个参数

use Mtownsend\ReadTime\ReadTime;

$readTime = (new ReadTime($content, $omitSeconds = true, $abbreviated = false, $wordsPerMinute = 230))->get();
// or
$readTime = (new ReadTime($content))
				->omitSeconds()
				->abbreviated()
				->wpm($wordsPerMinute)
				->get();

ReadTime类可以接受字符串内容或多个内容片段的平面数组。如果您尝试显示正文内容和侧边栏内容的总阅读时间,这可能会很有用。例如

use Mtownsend\ReadTime\ReadTime;

$readTime = (new ReadTime([$content, $moreContent, $evenMoreContent]))->get();

方法和参数

方法

->abbreviated(bool $abbreviated = true)

将“分钟”和“秒”缩写为“min”和“sec”。

->get()

检索阅读时间。注意:您也可以将类作为函数调用或将其转换为字符串来检索与get()相同的结果。

->getTranslation($key = null)

通过省略此方法中的任何参数,您可以返回类当前使用的当前翻译数组,或者通过传递参数获取特定的翻译键。

->ltr(bool $ltr = true)

将阅读时间结果的文本方向设置为左(默认)与true,和rightfalse。或者,您也可以不带任何参数简单地调用->rtl()方法。

->omitSeconds(bool $omitSeconds = true)

让阅读时间显示省略秒。传递false以包含秒。

->rtl(bool $rtl = true)

将阅读时间结果的文本方向设置为右(默认)与true,和leftfalse。或者,您也可以不带任何参数简单地调用->ltr()方法。

->setTranslation(array $translations)

手动设置类要使用的翻译文本。如果没有传递键,它将默认为英语对应项。完整的翻译数组将包含以下内容

[
    'reads_left_to_right' => true,
    'min' => 'min',
    'minute' => 'minute',
    'sec' => 'sec',
    'second' => 'second',
    'read' => 'read'
]

->timeOnly(bool $timeOnly = true)

省略阅读时间结果中的任何单词。传递false以包含单词。

->toArray()

将类的内容和设置作为数组获取。

->toJson()

将类的内容和设置作为JSON字符串获取。

->wpm(int $wordsPerMinute)

设置每分钟阅读的平均速度。

使用全局助手(Laravel)

如果您使用Laravel,此包提供了一个方便的全局助手函数,可在全局范围内访问。

read_time($content);

全局助手在您的Laravel应用程序中非常有用。它可以在视图中使用(记住,如果调用或将其转换为字符串,它将输出阅读时间,这是Blade的双大括号所执行的)

<h1>Some blog title</h1>
<small>{{ read_time($content) }}</small>
<hr>

全局助手还会尝试智能检测您传递给它的信息。例如,如果您传递一个<强>非关联数组,它会假设您正在传递一个内容数组。

<h1>Some blog title</h1>
<small>{{ read_time([$content, $moreContent]) }}</small>
<hr>

但您仍然可以使用全局助手动态自定义ReadTime类的设置。只需传递一个设置关联数组即可。

{{ read_time([
    'content' => $content,
    // or
    // 'content' => [$content, $moreContent],
    'omit_seconds' => true,
    'time_only' => false,
    'abbreviated' => true,
    'words_per_minute' => 230,
    'ltr' => true,
    'translation' => [
        'reads_left_to_right' => true,
        'min' => 'min',
        'minute' => 'minute',
        'sec' => 'sec',
        'second' => 'second',
        'read' => 'read'
    ]
]) }}

目的

Medium.com等网站已经普及了为用户提供阅读内容所需时间估算的概念。考虑到这一便利性,ReadTime为PHP开发者提供了同样的工具,用于他们的可读内容。这是一个简单的功能,将为您的PHP应用程序增添美好的触感。

贡献翻译

鼓励提交翻译的拉取请求。请确保遵循现有格式。

致谢

测试

您可以使用以下命令运行测试

./vendor/bin/phpunit

许可

MIT许可(MIT)。有关更多信息,请参阅许可文件