🍖
CKEditorのリンクをちゃんと調節する2
あれこれやりたい
かたつむりくんさんの記事を参考にCKEditorのリンクボタンに「別タブで開く」を追加した
そして前回の記事でエントリをリンクするオプションを消した
そうすると
target=_blank
のボタンが消えた...
.ck-list__item:nth-child(1){
display: none !important;
}
どうやらボタンにも掛かっているようだな...。
仕方ないのでちゃんとモジュール化したものを作ってみる
モジュール作成
ddevでやってます。
ddev ssh
php craft make module
対話していく。
Module ID: (kebab-case) ck-config
Base module class name: (PascalCase) [Module] CkConfig
Module location: module/
What should the root namespace for module/ be? [module]
Should the module be loaded during app initialization? (yes|no) [no]:no
最後noにしちゃったんですが後述の追記に関わってくるのかな?
yesにしときゃよかった。
モジュールをこうする。
module/CkConfig.php
<?php
namespace module;
use Craft;
use yii\base\Module as BaseModule;
use craft\ckeditor\events\DefineLinkOptionsEvent;
use craft\ckeditor\Field as CkEditorField;
use yii\base\Event;
/**
* CkConfig module
*
* @method static CkConfig getInstance()
*/
class CkConfig extends BaseModule
{
public function init(): void
{
Craft::setAlias('@module', __DIR__);
// Set the controllerNamespace based on whether this is a console or web request
if (Craft::$app->request->isConsoleRequest) {
$this->controllerNamespace = 'module\\console\\controllers';
} else {
$this->controllerNamespace = 'module\\controllers';
}
parent::init();
$this->attachEventHandlers();
// Any code that creates an element query or loads Twig should be deferred until
// after Craft is fully initialized, to avoid conflicts with other plugins/modules
Craft::$app->onInit(function() {
});
}
private function attachEventHandlers(): void
{
// Register event handlers here ...
// (see https://craftcms.com/docs/5.x/extend/events.html to get started)
Event::on(
CkEditorField::class,
CkEditorField::EVENT_DEFINE_LINK_OPTIONS,
function(DefineLinkOptionsEvent $event) {
// Remove Craft's injected links
$event->linkOptions = [];
}
);
}
}
Redactorのときに使うイベントはRegisterLinkOptionsEvent
だったんだけど
CKでそれに当たるのはDefineLinkOptionsEvent
(だと思う)
構成は全く同じでOK。
これで想定の動きになるかと思いきや全く動作していない。
よく見るとapp initializationのタイミングでイベントハンドラがアタッチされてない。
上のアタッチ処理をonInitに入れてあげる。
//$this->attachEventHandlers();
Craft::$app->onInit(function() {
$this->attachEventHandlers();
});
あとapp.php
でbootstrapの実行時に読み込むようにする。
'bootstrap' => [
'ck-config'
],
target=_blankが復活した!
けどプルダウンが消えた...けどWYSIWYG的に問題ないか。
おわり。
Discussion