پلاگین دکمههای ویرایشگر (XTD)
- محمد علایی
- منتشر شده در
- زمان خواندن 2 دقیقه
این بخش توضیح میدهد چگونه یک پلاگین دکمههای ویرایشگر (Editor XTD) توسعه بدهیم.
پلاگین به این صورت کار میکند: پلاگین یک دکمه ویرایشگر را در رویداد `onEditorButtonsSetup` ثبت میکند، سپس سیستم بسته به نحوه پیکربندی فیلد ویرایشگر در فرم از آن استفاده میکند.
رویدادهای این گروه:
onEditorButtonsSetup
این رویداد هر بار که ویرایشگر در حال رندر شدن است، اجرا میشود.
امضای رویداد:
function onEditorButtonsSetup(Joomla\CMS\Event\Editor\EditorButtonsSetupEvent $event){...}
ویژگیهای رویداد:
/**
* @var Joomla\CMS\Editor\Button\ButtonsRegistry $subject
* @var array $disabledButtons لیست نام دکمههای غیرفعال
* @var string $editorType نوع ویرایشگر
* @var integer $asset شناسه اختیاری Asset برای بررسی دسترسی
* @var integer $author شناسه اختیاری Author برای بررسی دسترسی
*/
$subject = $event->getButtonsRegistry();
$disabled = $event->getDisabledButtons();
$editorType = $event->getEditorType();
$asset = $event->getAsset();
$author = $event->getAuthor();
ساخت پلاگین دکمه ویرایشگر (XTD)
مثال زیر فرض میکند که شما قبلاً نحوه ساخت پلاگین جوملا را میدانید.
در این مثال، دو دکمه میسازیم که یکی 🍺 و دیگری 🐈 را در ویرایشگر وارد میکند. دکمه اول از عملیات درج تعریفشده استفاده میکند و دکمه دوم یک عملیات سفارشی است که همین کار را انجام میدهد.
برای شروع، یک پلاگین در مسیر `plugins/editors-xtd/example/` ایجاد کنید و نام آن را example بگذارید، فرض کنید namespace آن `JoomlaExample\Plugin\EditorsXtd\Example` باشد.
تنظیم دکمهها در رویداد onEditorButtonsSetup
namespace JoomlaExample\Plugin\EditorsXtd\Example\Extension;
use Joomla\CMS\Editor\Button\Button;
use Joomla\CMS\Event\Editor\EditorButtonsSetupEvent;
use Joomla\CMS\Plugin\CMSPlugin;
use Joomla\Event\SubscriberInterface;
final class Example extends CMSPlugin implements SubscriberInterface
{
/**
* بازگرداندن آرایهای از رویدادهایی که این مشترک به آنها گوش میدهد
*
* @return array
*/
public static function getSubscribedEvents(): array
{
return ['onEditorButtonsSetup' => 'onEditorButtonsSetup'];
}
/**
* @param EditorButtonsSetupEvent $event
* @return void
*/
public function onEditorButtonsSetup(EditorButtonsSetupEvent $event)
{
$subject = $event->getButtonsRegistry();
$disabled = $event->getDisabledButtons();
// اگر دکمه example-beer غیرفعال نیست، آن را اضافه کن
if (!\in_array('example-beer', $disabled)) {
$button1 = new Button('example-beer', [
'text' => 'درج 🍺',
'icon' => 'file-add',
'action' => 'insert', // عملیاتی که قبلاً توسط Joomla.EditorButton ارائه شده
], [
'content' => '🍺', // محتوای قابل درج
]);
$subject->add($button1);
}
// اگر دکمه example-cat غیرفعال نیست، آن را اضافه کن
if (!\in_array('example-cat', $disabled)) {
// ثبت اسکریپت برای عمل سفارشی
$this->getApplication()->getDocument()->getWebAssetManager()
->registerScript(
'editor-button.example-cat',
'plg_editors_xtd_example/example-cat.js',
[],
['type' => 'module'],
['editors']
);
$button2 = new Button('example-cat', [
'text' => 'درج 🐈',
'icon' => 'file-add',
'action' => 'insert-cat', // عمل سفارشی که بعداً کد میکنیم
]);
$subject->add($button2);
}
}
}
ایجاد اسکریپت جاوااسکریپت برای عمل insert-cat
یک فایل جاوااسکریپت در مسیر `media/plg_editors_xtd_example/js/example-cat.js` ایجاد کنید و هندلری برای عمل `insert-cat` در `JoomlaEditorButton` ثبت کنید:
// وارد کردن مؤلفههای لازم
import { JoomlaEditorButton } from 'editor-api';
// درج 🐈 در مکان کرسر
JoomlaEditorButton.registerAction('insert-cat', (editor, options) => {
editor.replaceSelection('🐈');
});
و تمام شد 🎉 پس از نصب و فعالسازی پلاگین، دکمهها باید قابل دسترس باشند و عملکرد خود را انجام دهند.