Widget Element
Element là thành phần cơ bản nhất trong hệ thống Page Builder, đại diện cho một block nội dung có thể cấu hình và tái sử dụng. Mỗi Element được định nghĩa bởi một class PHP, cung cấp form cấu hình trong admin và render HTML trên frontend.
1. Tổng Quan Kiến Trúc
1.1 Hệ thống phân cấp Class
1.2 Ba loại Element trong Builder
| Loại | Vị trí trong widget.json | Sử dụng |
|---|---|---|
| Header Elements | elements.header | Chỉ dùng trong Header Builder |
| Footer Elements | elements.footer | Chỉ dùng trong Footer Builder |
| General Elements | elements.general | Dùng được trong cả Header, Footer và Home/Page Builder |
1.3 Element Methods
Một lớp khung xương widget đơn giản sẽ trông như sau:
<?php
use SkillDo\Cms\Element\Element;
use SkillDo\Cms\Support\Theme;
class MyElementWidget extends Element
{
function __construct() {}
public function icon(): string {}
public function category(): string {}
public function form(): void {}
public function widget(): void {}
public function default(): void {}
public function cssBuilder(): string {}
}
2. Element Data
2.1 Id và Name
Để đặt id duy nhất cho element và tên hiển thị trong admin, bạn cần gọi hàm khởi tạo của parent trong constructor:
<?php
use SkillDo\Cms\Element\Element;
use SkillDo\Cms\Support\Theme;
class MyElementWidget extends Element
{
function __construct()
{
// Tham số 1: Key duy nhất (tên class)
// Tham số 2: Tên hiển thị trong admin
parent::__construct('MyElementWidget', 'Tên Element');
}
}
2.2 Element Category
Danh mục Element được sử dụng để sắp xếp các element thành các nhóm.
<?php
use SkillDo\Cms\Element\Element;
use SkillDo\Cms\Support\Theme;
class MyElementWidget extends Element
{
/**
* Category để nhóm element trong sidebar admin
* Các category có sẵn: layout, basic, general, header,
* heading, footer, ecommerce
*/
public function category(): string
{
return 'basic';
}
}
Khi Builder được khởi tạo, nó sẽ đăng ký một số danh mục mặc định.
| Key | Tên hiển thị | Mô tả |
|---|---|---|
layout | Bố cục | Container, Inner Section |
basic | Cơ bản | Heading, Image, Text, Video, Button |
general | Chung | Elements chung |
header | Header | Logo, Cart, Search |
heading | Tiêu đề | Các kiểu heading |
footer | Footer | Footer blocks |
ecommerce | Thương mại điện tử | Products, Cart |
2.3 Element Icon
Mỗi Element không chỉ có tên mà còn có một biểu tượng. Các biểu tượng này được hiển thị ở các vị trí khác nhau trong Trình chỉnh sửa
<?php
use SkillDo\Cms\Element\Element;
use SkillDo\Cms\Support\Theme;
class MyElementWidget extends Element
{
/**
* Icon hiển thị trong danh sách elements
* Trả về key trong danh sách icons đã đăng ký (ElementManager::getIcon)
* Các key có sẵn: heading, image, text-editor, video, button,
* icon, icon-box, divider, counter, tabs,
* accordion, form, nav-menu, google-maps, ...
*/
public function icon(): string
{
return 'icon-box';
}
}
Danh sách icon mặc định
container
inner-section
heading
image
text-editor
video
video-list
button
star-rating
divider
google-maps
facebook
icon
image-box
icon-box
icons-box
basic-gallery
image-carousel
icon-list
counter
tabs
accordion
toggle
social-icons
progress-bar
menu-anchor
gallery
dual-image
list
form
nav-menu
menu-mega-vertical
loop-carousel
media-carousel
reviews
logo
login
search-bar
products
product-images
cart
3. Cấu Trúc Thư Mục
3.1 Cấu trúc chuẩn cho một Element
views/theme-store/widget/elements/{element-name}/
├── {element-name}.widget.php # Class chính (extends Element)
├── views/
│ └── view.blade.php # Template hiển thị
└── assets/ # (Tùy chọn) CSS/LESS/JS riêng
├── {element-name}.css
├── {element-name}.less
└── {element-name}.js
3.2 Ví dụ thực tế
widget/elements/video/
├── video.widget.php # VideoWidgetElement class
├── views/
│ └── view.blade.php
└── assets/
├── video-widget.less
├── video-widget.css
└── video-widget.css.map