Nhảy tới nội dung
Phiên bản: 7.2.0

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 img.png

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

ParamsTypeDescriptionDefault
multipleboolCho phép chọn nhiều đối trượngfalse

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

ParamsTypeDescriptionDefault
multipleboolCho phép chọn nhiều đối trượngfalse
taxonomystringpost_type của bài viết cần lấypost

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

ParamsTypeDescriptionDefault
multipleboolCho phép chọn nhiều đối trượngfalse
taxonomystringcate_type của danh mục cần lấypost_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

ParamsTypeDescriptionDefault
multipleboolCho phép chọn nhiều đối trượngfalse

Thêm Field Popover

Create

Để tạo một field popover mới bạn tạo đường dẫn thư mục như sau (trong theme hiện tại hoặc một plugin cụ thể nào đó):

core/Form/Popover

Tạo class field của bạn kế thừa lại class PopoverHandle của cms

use SkillDo\Form\PopoverHandle;
use SkillDo\Http\Request;

class MyPopover extends PopoverHandle {

public function __construct()
{
$this->setModule('myPopover');
}

public function search(Request $request): array
{
$items = [];

$args = Qr::set()->select('id', 'name', 'image')->limit($this->limit)->offset($this->page* $this->limit);

if(!empty($this->keyword)) {

$args->where('name', 'like', '%' . $this->keyword . '%');
}

$objects = ModelOfYou::gets($args);

if(have_posts($objects)) {
foreach ($objects as $value) {
$items[] = [
'id' => $value->id,
'name' => $value->name,
'image' => Template::imgLink($value->image),
];
}
}

return $items;
}

public function value(Request $request, $listId): array
{
$items = [];

if(have_posts($listId)) {

$objects = ModelOfYou::gets(Qr::set()->whereIn('id', $listId)->select('id', 'name', 'image'));

foreach ($objects as $value) {

$items[] = [
'id' => $value->id,
'name' => $value->name,
'image' => Template::imgLink($value->image),
];
}
}

return $items;
}
}

Với method search xử lý khi bạn tìm kiếm đối tượng, method value xử lý hiển thị đối tượng đã được chọn

Nếu ở chế độ DEBUG = false bạn cần xóa cache core_form_fields_popover_classescore_files_loader để cập nhật lại danh sách field popover

CacheHandler::delete('core_form_fields_popover_classes')
CacheHandler::delete('core_files_loader')

Sau đó bạn có thể sử dụng field mới bằng cách

$form = form();
$form->popoverAdvance('field_name', [
'label' => 'popover my field',
'search' => 'myPopover',
]);

Template

Mặt định popover sẽ sử dụng các file giao diện mặc định của cms nếu bạn muốn sử dụng file riêng mình có thể khai bái thêm

Khơi tạo id cho các template mới

public function __construct()
{
$this->setModule('myPopover');
//Template review value có hình ảnh
$this->setTemplateId('valueImg', 'popover_advance_my_field_load_template');
//Template review value không có hình ảnh
$this->setTemplateId('valueNoImg', 'popover_advance_my_field_load_template');
//Template hiên thị đối tượng khi search có hình ảnh
$this->setTemplateId('searchImg', 'popover_advance_my_field_search_template');
//Template hiên thị đối tượng khi search không có hình ảnh
$this->setTemplateId('searchNoImg', 'popover_advance_my_field_search_template');
}

Khai báo file giao diện, function Theme::makeView chỉ là demo có thể sử dụng các function khách như Plugin::makeView tùy vào vị trí đặt file template

public function templateValueImg(): string
{
return Theme::partial('admin/popover/template-popover');
}

public function templateValueNoImg(): string
{
return Theme::partial('admin/popover/template-popover');
}

public function templateSearchImg(): string
{
return Theme::partial('admin/popover/template-popover');
}

public function templateSearchNoImg(): string
{
return Theme::partial('admin/popover/template-popover');
}

* Tham khảo các file template mặc định để code file template mới cho bạn