statamic / collaboration
Statamic Pro 的实时协作和多用户创作。
Requires
- pixelfear/composer-dist-plugin: ^0.1.4
- statamic/cms: ^5.0
README
协作
Statamic Pro 的实时协作和多用户创作。
功能
- 当多人打开相同条目时,显示存在指示器。
- 当其他人聚焦时,字段会被锁定。
- 字段值的更新会反映给所有人。
安装
您可以使用单个命令安装和配置 Collaboration 扩展插件
php please install:collaboration
该命令将安装 statamic/collaboration
扩展插件,设置 Laravel 的广播脚手架,并提示您选择要使用的广播驱动程序。
有关每个广播驱动的具体信息,请参阅以下内容
Laravel Reverb
install:collaboration
命令将 Laravel Reverb 安装到您的应用程序中。安装后,运行 php artisan reverb:start
以运行 Reverb 的 WebSocket 服务器,然后 Collaboration 扩展插件应在控制面板中开始工作。
当您将应用程序部署到服务器时,需要以守护进程运行 Reverb WebSocket 服务器(php artisan reverb:start
)。如果您使用 Laravel Forge,则在网站的 "应用程序" 面板中有一个 Reverb 开关。
有关 Reverb 的更多信息,请参阅 Laravel 文档。
Pusher
install:collaboration
命令将 Pusher 的 PHP SDK 安装到您的应用程序中。安装后,您应将 Pusher 凭据添加到您的 .env
文件。
PUSHER_APP_ID="your-pusher-app-id"
PUSHER_APP_KEY="your-pusher-key"
PUSHER_APP_SECRET="your-pusher-secret"
PUSHER_HOST=
PUSHER_PORT=443
PUSHER_SCHEME="https"
PUSHER_APP_CLUSTER="mt1"
您还应确保已启用 "Client Events" 设置(可在 Pusher 控制台的 "应用设置" 页面找到)。
有关更多信息,请参阅 Pusher。
其他
- 如果您计划使用不同的广播驱动程序,您需要执行以下额外步骤才能使其工作
- 安装并配置您的广播驱动程序(显然)
- 在您的
.env
中更新BROADCAST_DRIVER
- 有关更多信息,请参阅我们文档站点上的此指南
Statamic.booting(() => { Statamic.$echo.config(() => ({ broadcaster: "pusher", key: Statamic.$config.get('broadcasting.pusher.key'), cluster: Statamic.$config.get('broadcasting.pusher.cluster'), wsHost: Statamic.$config.get('broadcasting.pusher.host'), wsPort: Statamic.$config.get('broadcasting.pusher.port'), wssPort: Statamic.$config.get('broadcasting.pusher.port'), forceTLS: false, encrypted: true, disableStats: true, enabledTransports: ["ws", "wss"], })); });
配置
声音效果
默认情况下,Collaboration 扩展插件在其他用户加入和离开条目时播放声音效果。
如果您想禁用这些声音效果,可以发布配置文件(通过 php artisan vendor:publish --tag=collaboration
)并将 sound_effects
设置为 false
。
// config/collaboration.php return [ 'sound_effects' => false, ];
配置
声音效果
默认情况下,Collaboration 扩展插件在其他用户加入和离开条目时播放声音效果。
如果您想禁用这些声音效果,可以发布配置文件(通过 php artisan vendor:publish --tag=collaboration
)并将 sound_effects
设置为 false
。
// config/collaboration.php return [ 'sound_effects' => false, ];
高级用法
当字段的 "元数据" 更新时,它将被广播到频道中的其他用户。如果您有一个包含大量元数据的字段类型,并且它被更新(其中一些可能只提供初始状态而永远不会更改),您可以考虑指定应该广播的字段。这可以帮助保持消息大小较小并提高性能。
在字段类型的 preload
方法中,您可以使用特殊的 __collaboration
键来列出字段。
public function preload() { return [ 'hello' => 'world', 'foo' => 'bar', '__collaboration' => ['foo'], ]; }
当元数据更新时,只有 foo
值将被广播。其余值将自动合并。