mtownsend / read-time
一个PHP包,展示用户阅读内容所需的时间。
Requires
- php: ^7.4|^8.0
Requires (Dev)
- phpunit/phpunit: ^9.3
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,和right
与false
。或者,您也可以不带任何参数简单地调用->rtl()
方法。
->omitSeconds(bool $omitSeconds = true)
让阅读时间显示省略秒。传递false
以包含秒。
->rtl(bool $rtl = true)
将阅读时间结果的文本方向设置为右(默认)与true,和left
与false
。或者,您也可以不带任何参数简单地调用->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应用程序增添美好的触感。
贡献翻译
鼓励提交翻译的拉取请求。请确保遵循现有格式。
致谢
- Mark Townsend
- 所有贡献者
测试
您可以使用以下命令运行测试
./vendor/bin/phpunit
许可
MIT许可(MIT)。有关更多信息,请参阅许可文件