Field Popover
Popover là dạng field data cho phép bạn tìm kiếm và chọn data với giao diện đẹp mắt

Field mặc định
Popover page
Popover page cho phép bạn tìm kiếm và chọn trang nội dung
$form = form();
$form->popoverAdvance('field_name', [
'label' => 'popover page',
'search' => 'page',
])
Thuộc tính bổ sung
| Params | Type | Description | Default |
|---|---|---|---|
| multiple | bool | Cho phép chọn nhiều đối trượng | false |
Popover post
Popover post cho phép bạn tìm kiếm và chọn bài viết
$form = form();
$form->popoverAdvance('field_name', [
'label' => 'popover post',
'search' => 'post',
])
Thuộc tính bổ sung
| Params | Type | Description | Default |
|---|---|---|---|
| multiple | bool | Cho phép chọn nhiều đối trượng | false |
| taxonomy | string | post_type của bài viết cần lấy | post |
Popover Category
Popover Category cho phép bạn tìm kiếm và chọn danh mục bài viết
$form = form();
$form->popoverAdvance('field_name', [
'label' => 'popover category',
'search' => 'category',
])
Thuộc tính bổ sung
| Params | Type | Description | Default |
|---|---|---|---|
| multiple | bool | Cho phép chọn nhiều đối trượng | false |
| taxonomy | string | cate_type của danh mục cần lấy | post_categories |
Popover user
Popover user cho phép bạn tìm kiếm và chọn thành viên
$form = form();
$form->popoverAdvance('field_name', [
'label' => 'popover user',
'search' => 'user',
]);
Thuộc tính bổ sung
| Params | Type | Description | Default |
|---|---|---|---|
| multiple | bool | Cho phép chọn nhiều đối trượng | false |
Thêm Field Popover
Bước 1 — Tạo class PopoverHandle
Tạo file PHP trong Plugin của bạn (ví dụ app/Cms/Form/Popovers/MyPopover.php) kế thừa class PopoverHandle:
<?php
namespace MyPlugin\Cms\Form\Popovers;
use MyPlugin\Models\MyModel;
use SkillDo\Cms\Form\PopoverHandle;
use SkillDo\Cms\Support\Image;
use SkillDo\Http\Request;
class MyPopover extends PopoverHandle
{
public function __construct()
{
$this->setModule('myPopover');
}
public function search(Request $request): array
{
$items = [];
$query = MyModel::select('id', 'name', 'image')
->limit($this->limit)
->offset($this->page * $this->limit);
if (!empty($this->keyword)) {
$query->where('name', 'like', '%' . $this->keyword . '%');
}
$objects = $query->get();
if (hasItems($objects)) {
foreach ($objects as $value) {
$items[] = [
'id' => $value->id,
'name' => $value->name,
'image' => Image::medium($value->image)->link(),
];
}
}
return $items;
}
public function value(Request $request, $listId): array
{
$items = [];
if (hasItems($listId)) {
$objects = MyModel::whereIn('id', $listId)->select('id', 'name', 'image')->get();
foreach ($objects as $value) {
$items[] = [
'id' => $value->id,
'name' => $value->name,
'image' => Image::medium($value->image)->link(),
];
}
}
return $items;
}
}
search()— xử lý truy vấn khi người dùng gõ từ khoá tìm kiếm. Trả về array các item.value()— truy vấn lại các item theo danh sách ID đã lưu để render lại khi load trang.- Mỗi item trả về bắt buộc có key
idvàname. Keyimagelà tuỳ chọn — nếu có thì template img sẽ được dùng.
Bước 2 — Đăng ký vào plugin.json
Mở plugin.json của Plugin và thêm key cms.form.popover:
{
"cms": {
"form": {
"popover": {
"myPopover": "MyPlugin\\Cms\\Form\\Popovers\\MyPopover"
}
}
}
}
- Key (
"myPopover") là định danh dùng ở thuộc tínhsearchkhi khai báo field. - Value là Namespace đầy đủ của class vừa tạo (phải được map đúng trong
autoload).
Bước 3 — Sử dụng field
$form = form();
$form->popoverAdvance('field_name', [
'label' => 'My Popover Field',
'search' => 'myPopover',
]);