violet88 / silverstripe-tinymce-premium
一个SilverStripe模块,用于在SilverStripe中集成TinyMCE高级插件,包括添加JavaScript函数作为配置选项。
Requires
- php: >=7.4|^8.0
- mrclay/jsmin-php: ^2.4
- silverstripe/admin: ^1|^2
- silverstripe/framework: ^4|^5
Requires (Dev)
- phpunit/phpunit: >=7.0
- squizlabs/php_codesniffer: ^3.0
README
本模块提供了一种使用自己的TinyMCE Cloud API密钥与SilverStripe TinyMCE字段一起使用的方法,包括使用JavaScript作为配置值。
要求
- SilverStripe 4.0+
- PHP >= 7.4, >= 8.0
- TinyMCE Cloud API密钥
- TinyMCE Premium 订阅
安装
使用composer安装此模块。
composer require violet88/silverstripe-tinymce-premium
配置
TinyMCE
模块需要配置TinyMCE Cloud API密钥。在使用API密钥之前,请确保批准您的域名。您的API密钥可以在TinyMCE Cloud控制台中找到。
SilverStripe
配置文件
您可以在tinymce.yml
文件中配置您的云API密钥。
--- name: tinymce-premium --- Violet88\TinyMCE\TinyMCEPremiumHandler: api_key: # Your TinyMCE Cloud API key
此外,您还可以在tinymce.yml
文件中配置TinyMCE Premium插件选项。如果您不知道自己在做什么,请不要这样做,默认选项已配置为与SilverStripe 4协同工作。
Violet88\TinyMCE\TinyMCEPremiumHandler: tinymce_version: 4 # TinyMCE version tinymce_cdn: "https://cdn.tiny.cloud/1" # TinyMCE CDN
环境变量
此外,您还可以使用环境变量配置上述所有内容。如果您想在多个环境中使用相同的配置,这很有用。环境变量以TINYMCE_PREMIUM_
为前缀,并且全部为大写。必须配置api_key
环境变量。
TINYMCE_PREMIUM_API_KEY="your-api-key" TINYMCE_PREMIUM_TINYMCE_VERSION="4" TINYMCE_PREMIUM_TINYMCE_CDN="https://cdn.tiny.cloud/1"
环境变量始终优先于配置文件。
用法
可以在_config.php
文件中使用此模块来启用TinyMCE高级插件并设置JavaScript配置值。
启用高级插件
启用高级插件就像启用任何其他插件一样简单。以下示例启用了tinymcespellchecker
、advcode
和mentions
插件。
$editorConfig = HTMLEditorConfig::get('cms'); if ($editorConfig instanceof TinyMCEConfig) { $handler = TinyMCEPremiumHandler::create(); $editorConfig->enablePlugins([ 'tinymcespellchecker' => $handler->getPluginUrl('tinymcespellchecker'), 'advcode' => $handler->getPluginUrl('advcode'), 'mentions' => $handler->getPluginUrl('mentions') ]); }
设置JavaScript配置值
大多数高级插件允许您设置回调和其他JavaScript配置值。由于这在内置的基于PHP的SilverStripe TinyMCE配置管理器中不是原生支持的,因此此模块提供了一种使用setJsConfig
方法设置JavaScript配置值的方法。以下示例将mentions
插件配置值mentions_fetch
设置为演示回调。
$editorConfig = HTMLEditorConfig::get('cms'); if ($editorConfig instanceof TinyMCEConfig) { $handler = TinyMCEPremiumHandler::create(); $editorConfig->enablePlugins([ 'mentions' => $handler->getPluginUrl('mentions') ]); $handler->setJsOptions([ 'mentions_fetch' => <<<JS function (query, success) { // Fetch your full user list from somewhere var users = [ { id: '1', name: 'wyatt', fullName: 'Wyatt Wilson' }, { id: '2', name: 'gabriel', fullName: 'Gabriel Brown' }, { id: '3', name: 'hazel', fullName: 'Hazel Lee' }, { id: '4', name: 'owen', fullName: 'Owen Johnson' }, { id: '5', name: 'lily', fullName: 'Lily Davis' }, ]; users = users.filter(function (user) { return user.name.toLowerCase().indexOf(query.term.toLowerCase()) !== -1; }); window.setTimeout(function () { success(users); }, 0); } JS ]); }