Fields
Field cơ bản
Field Text, Password, Number, Email, Tel, Url, Textarea, hidden
Sử dụng phương thức động
$form = new Form();
$form
->text('username', ['label' => 'Tên đăng nhập'])
->password('password', ['label' => 'Mật khẩu'])
->email('email', ['label' => 'email của bạn'])
->tel('phone', ['label' => 'Số điện thoại'])
->number('age', ['label' => 'Số tuổi', 'min' => 18])
->textarea('note', ['label' => 'Ghi chú'])
->hidden('token', [], 'y99dkdQLu9856zh');
Sử dụng phương thức add
$form = new Form();
$form
->add('username', 'text', ['label' => 'Tên đăng nhập'])
->add('password', 'password', ['label' => 'Mật khẩu'])
->add('email', 'email', ['label' => 'email của bạn'])
->add('phone', 'tel', ['label' => 'Số điện thoại'])
->add('age', 'number', ['label' => 'Số tuổi', 'min' => 18])
->add('note', 'textarea', ['label' => 'Ghi chú'])
->add('token', 'hidden', [], 'y99dkdQLu9856zh');
Field Checkbox, Radio, Select
$options = [
'value1' => 'Label 1',
'value2' => 'Label 2',
'value3' => 'Label 3'
];
$form = new Form();
//Sử dụng phương thức `động`
$form
->checkbox('field_name_checkbox', ['label' => 'Label Checkbox'])->options($options)
->radio('field_name_radio', ['label' => 'Label Radio'])->options($options)
->select('field_name_select', ['label' => 'Label Select'])->options($options);
//Sử dụng phương thức `add`
$form
->add('field_name_checkbox', 'checkbox', ['label' => 'Label Checkbox'])->options($options)
->add('field_name_radio', 'radio', ['label' => 'Label Radio'])->options($options)
->add('field_name_select', 'select', ['label' => 'Label Select'])->options($options);
Field đặt biệt
Wysiwyg Editor
Input Wysiwyg sử dụng thư viện tinymce nên bạn cần nhúng vào theme thư viện này nếu muốn sử dụng field Wysiwyg ở theme
$footer->add('tinymce', 'node_modules/tinymce/tinymce.min.js');
Input Wysiwyg với đầy đủ các thuộc tính plugin
$form = new Form();
//Sử dụng phương thức `động`
$form->wysiwyg('field_name', ['label' => 'Label Field']);
Input Wysiwyg với nhỏ gọn hạn chế thuộc tinh plugin
//Sử dụng phương thức `động`
$form->wysiwygShort('field_name', ['label' => 'Label Field']);
//Sử dụng phương thức `add`
$form->add('field_name', 'wysiwyg-short', ['label' => 'Label Field']);
Radio Icon, Checkbox Icon
$options = [
'left' => [
'label' => 'Label 1',
'icon' => '<i class="fa-light fa-align-left"></i>'
],
'center' => [
'label' => 'Label 2',
'icon' => '<i class="fa-light fa-align-justify"></i>'
],
'right' => [
'label' => 'Label 3',
'icon' => '<i class="fa-light fa-align-right"></i>'
],
];
$form = new Form();
//Sử dụng phương thức `động`
$form
->checkboxIcon('field_name_checkbox', ['label' => 'Label Checkbox'])->options($options)
->radioIcon('field_name_radio', ['label' => 'Label Radio'])->options($options);
//Sử dụng phương thức `add`
$form
->add('field_name_checkbox', 'checkbox-icon', ['label' => 'Label Checkbox'])->options($options)
->add('field_name_radio', 'radio-icon', ['label' => 'Label Radio'])->options($options);
Checkbox Tree
Tạo danh sách checkbox dạng cây (cha - con), trả về mảng giá trị (name tự thêm []).
Mỗi option có dạng ['label' => ..., 'value' => ..., 'children' => [...]], nếu không truyền value sẽ lấy key làm value
$options = [
['label' => 'Cha 1', 'value' => 1, 'children' => [
['label' => 'Con 1', 'value' => 2],
]],
];
//Sử dụng phương thức `động`
$form->checkboxTree('field_name', ['label' => 'Label Tree'])->options($options);
//Sử dụng phương thức `add`
$form->add('field_name', 'checkbox-tree', ['label' => 'Label Tree'])->options($options);
Select Img
Tạo danh sách lựa chọn hiển thị bằng hình ảnh. Mỗi option có dạng ['label' => ..., 'img' => ..., 'value' => ..., 'width' => ..., 'height' => ...] (hoặc 'icon' thay cho 'img'), nếu không truyền value sẽ lấy key làm value
$options = [
'layout1' => ['label' => 'Layout 1', 'img' => 'assets/img/layout1.png'],
'layout2' => ['label' => 'Layout 2', 'img' => 'assets/img/layout2.png'],
];
//Sử dụng phương thức `động`
$form->selectImg('field_name', ['label' => 'Label Select Img'])->options($options);
//Sử dụng phương thức `add`
$form->add('field_name', 'select-img', ['label' => 'Label Select Img'])->options($options);
Tab (Select Tabs)
Tạo lựa chọn dạng các tab/nút bấm nằm ngang (thường dùng chọn icon align, direction...), value là key của option được chọn
//Sử dụng phương thức `động`
$form->tab('field_name', ['label' => 'Align'], 'left')->options([
'left' => '<i class="fa-light fa-align-left"></i>',
'center' => '<i class="fa-light fa-align-center"></i>',
'right' => '<i class="fa-light fa-align-right"></i>',
]);
//Sử dụng phương thức `add`
$form->add('field_name', 'tab', ['label' => 'Align'], 'left')->options([...]);
Code
Tạo textarea soạn thảo code (CodeMirror). Hỗ trợ attribute language (thêm class code-{language}) và rows
//Sử dụng phương thức `động`
$form->code('field_name', ['label' => 'Label Code', 'language' => 'css']);
//Sử dụng phương thức `add`
$form->add('field_name', 'code', ['label' => 'Label Code', 'language' => 'css']);
Switch (On/Off)
Mặt định input Switch sẽ trả về giá trị 1 nếu bật và 0 nếu tắt
//Sử dụng phương thức `động`
$form
->switch('field_name_switch', ['label' => 'Label switch']);
//Sử dụng phương thức `add`
$form
->add('field_name_switch', 'switch', ['label' => 'Label switch']);
Nếu bạn muốn truyền vào 2 giá trị khác có thể sử dụng biến options, biến options phải có 2 phần tử và key phải là 0 và 1,
$form->switch('field_name_switch', ['label' => 'Label switch'])->options([
0 => 'off', //Giá trị trả về khi tắt
1 => 'on', //Giá trị trả về khi bật
]);
Mặc định label của 2 lựa chọn field switch là bật và tắt nếu muốn thay đổi bạn có thể sử dụng attribute label-true và label-false để thay đổi
$form->switch('field_name_switch', ['label' => 'Label switch', 'label-true' => 'Ok', 'label-false' => 'No']);
Color
Input color sử dụng thư viện melloware/coloris nên bạn cần nhúng vào theme thư viện này nếu muốn sử dụng field color ở theme
$header->add('color', 'node_modules/@melloware/coloris/dist/coloris.min.css');
$footer->add('color', 'node_modules/@melloware/coloris/dist/umd/coloris.min.js');
//Sử dụng phương thức `động`
$form->color('field_name_color', ['label' => 'Label color']);
//Sử dụng phương thức `add`
$form->add('field_name_color', 'color', ['label' => 'Label color']);
Image, File, Video
Ba field này tạo input chọn file từ trình quản lý file (File Manager) của admin, mỗi field mở File Manager với bộ lọc tương ứng (ảnh, file, video) và lưu đường dẫn file vào input
//Sử dụng phương thức `động`
$form->image('field_name_image', ['label' => 'Label Image']);
$form->file('field_name_file', ['label' => 'Label File']);
$form->video('field_name_video', ['label' => 'Label Video']);
//Sử dụng phương thức `add`
$form->add('field_name_image', 'image', ['label' => 'Label Image']);
$form->add('field_name_file', 'file', ['label' => 'Label File']);
$form->add('field_name_video', 'video', ['label' => 'Label Video']);
Nếu muốn dùng input upload mặc định của trình duyệt (<input type="file">) thay vì File Manager, thêm attribute default bằng true:
$form->image('field_name_image', ['label' => 'Label Image', 'default' => true]);
Select2
Input select2 sử dụng thư viện select2 nên bạn cần nhúng vào theme thư viện này nếu muốn sử dụng field select2 ở theme
$header->add('select2', 'node_modules/select2/dist/css/select2.min.css');
$footer->add('select2', 'node_modules/select2/dist/js/select2.min.js');
$options = [
'value1' => 'Label 1',
'value2' => 'Label 2',
'value3' => 'Label 3'
];
//Sử dụng phương thức `động`
$form->select2('field_name_select2', ['label' => 'Label Select 2'])->options($options);
//Sử dụng phương thức `add`
$form->add('field_name_select2', 'select2', ['label' => 'Label Select 2'])->options($options);
Nếu bạn muốn chọn nhiều option thì thêm multiple bằng true vào attributes hoặc gọi method
$form->select2('field_name_select2', ['label' => 'Label Select 2'])->options($options)->multiple(true);
Date, Time Và Datetime
Field Date, Time Và Datetime sử dụng thư viện air-datepicker nên bạn cần nhúng vào theme thư viện này nếu muốn sử dụng field Date, Time Và Datetime ở theme
$header->add('air-datepicker', 'node_modules/air-datepicker/air-datepicker.css');
$footer->add('air-datepicker', 'node_modules/air-datepicker/air-datepicker.js');
Field Date trả về giá trị có format là dd/mm/yyyy
Field Time trả về giá trị có format là HH:mm
Field Datetime trả về giá trị có format là dd/mm/yyyy HH:mm
//Sử dụng phương thức `động`
$form->date('field_name_date', ['label' => 'Label Date']);
$form->time('field_name_time', ['label' => 'Label Time']);
$form->datetime('field_name_datetime', ['label' => 'Label Datetime']);
//Sử dụng phương thức `add`
$form->add('field_name_date', 'date', ['label' => 'Label Date']);
$form->add('field_name_time', 'time', ['label' => 'Label Time']);
$form->add('field_name_datetime', 'datetime', ['label' => 'Label Datetime']);
Date range
Field Date range sử dụng thư viện daterangepicker nên bạn cần nhúng vào theme thư viện này nếu muốn sử dụng field Date range ở theme
$header->add('dateRangePicker', 'node_modules/daterangepicker/daterangepicker.css');
$footer->add('dateRangePicker', 'node_modules/daterangepicker/moment.min.js');
$footer->add('dateRangePicker', 'node_modules/daterangepicker/daterangepicker.js');
Field DateRange trả về giá trị có format là dd/mm/yyyy - dd/mm/yyyy
//Sử dụng phương thức `động`
$form->daterange('field_name_date_range', ['label' => 'Label Date Range']);
//Sử dụng phương thức `add`
$form->add('field_name_date_range', 'daterange', ['label' => 'Label Date Range']);
Range
Field Range nhận vào 2 options là min và max mặc định min sẽ là 0 và max sẽ là 100
//Sử dụng phương thức `động`
$form->range('field_name_range', ['label' => 'Label Range'])->min(10)->max(200);
//Sử dụng phương thức `add`
$form->add('field_name_range', 'range', ['label' => 'Label Range'])->min(10)->max(200);
Repeater
Field Repeater tạo một giao diện để thêm và xóa một nhóm input có thể lặp lại.
//Sử dụng phương thức `động`
$form->repeater('items', ['label' => 'Label Range'])->fields(function ($repeater) {
$repeater->text('title', ['label' => __('Tiêu đề'), 'start' => 6]);
$repeater->image('image', ['label' => __('Images'), 'start' => 6]);
$repeater->textarea('des', ['label' => __('Mô tả'), 'start' => 12]);
});
//Sử dụng phương thức `add`
$form->add('items', 'repeater', ['label' => 'Label Test'])->fields(function ($repeater) {
$repeater->text('title', ['label' => __('Tiêu đề'), 'start' => 6]);
$repeater->image('image', ['label' => __('Images'), 'start' => 6]);
$repeater->textarea('des', ['label' => __('Mô tả'), 'start' => 12]);
});
Font Icon
Field font icon tạo một giao diện để bạn có thể chọn icon nhanh từ font icon cms hỗ trợ
//Sử dụng phương thức `động`
$form->fontIcon('field_name_range', ['label' => 'Label icon']);
//Sử dụng phương thức `add`
$form->add('field_name_range', 'font-icon', ['label' => 'Label icon']);
Price
Field price tạo một input nhập số tự động chèn thêm "," cho phần ngàn
//Sử dụng phương thức `động`
$form->price('field_name_range', ['label' => 'Label price']);
//Sử dụng phương thức `add`
$form->add('field_name_range', 'price', ['label' => 'Label price']);
Số chữ số thập phân (từ 8.1.2) — mặc định 0 vì cột giá của CMS là số nguyên (VND không có phần lẻ). Site dùng tiền tệ có xu (USD…) khai qua filter hoặc tham số decimals (nhận giá trị 0–4):
//Đặt cho toàn hệ thống
add_filter('form_price_decimals', fn() => 2);
//Hoặc đặt riêng từng ô
$form->price('price', ['label' => 'Giá', 'decimals' => 2]);
Ô nhập luôn là tiền tệ cơ sở; cột
decimalscủa bảngcurrencieschỉ dùng khi quy đổi để hiển thị ngoài site. Phần lẻ chỉ giữ được nếu cột tương ứng đổi sangdecimal— cộtintegervẫn bị cắt.
Tags
Ô nhập thẻ tự do có gợi ý (select2), gợi ý lấy động qua ajax. Có từ phiên bản 8.1.3.
//Sử dụng phương thức `động`
$form->tags('tags', ['label' => 'Thẻ']);
//Sử dụng phương thức `add`
$form->add('tags', 'tags', [
'label' => 'Thẻ',
'placeholder' => 'Nhập thẻ rồi nhấn Enter',
'tag_type' => 'post', // bộ từ vựng thẻ, mặc định "post"
]);
Giá trị gửi lên server là TÊN thẻ, không phải id — thẻ chưa tồn tại sẽ được tạo mới khi lưu. Tối đa 30 thẻ cho một nội dung. Xem Thẻ (Tag).
Field lấy dữ liệu
Gallery
Lấy danh sách thư viện (Admin > Thư viện) dưới dạng select2
//Sử dụng phương thức `động`
$form->gallery('field_name_gallery', ['label' => 'Label Gallery']);
//Sử dụng phương thức `add`
$form->add('field_name_gallery', 'gallery', ['label' => 'Label Gallery']);
Gallery Item
Tạo thư viện ảnh (chọn được danh sách ảnh thành thư viện)
//Sử dụng phương thức `động`
$form->galleryItem('field_name_gallery', ['label' => 'Label list Image']);
Menu
Lấy danh sách menu (Admin > giao diện > menu) dưới dạng select2
//Sử dụng phương thức `động`
$form->menu('field_name_menu', ['label' => 'Label Menu']);
//Sử dụng phương thức `add`
$form->add('field_name_menu', 'menu', ['label' => 'Label Menu']);
Page
Lấy danh sách Trang Nội Dung (Admin > Trang nội dung) dưới dạng select2
//Sử dụng phương thức `động`
$form->page('field_name_page', ['label' => 'Label Page']);
//Sử dụng phương thức `add`
$form->add('field_name_page', 'page', ['label' => 'Label Page']);
Posts
Tìm kiếm và chọn Bài viết (Admin > Bài viết) dưới dạng popover (kế thừa field popover-advance, xem Popover)
Field posts nhận options post_type để xác định post_type của bài viết, nếu không truyền mặc định post_type là post.
Có thể thêm options multiple (mặc định là true) để chọn nhiều bài viết.
//Sử dụng phương thức `động`
$form->posts('field_name_post', ['label' => 'Label Post', 'post_type' => 'post']);
//Sử dụng phương thức `add`
$form->add('field_name_post', 'posts', ['label' => 'Label Post', 'post_type' => 'post']);
postCategory
Lấy danh sách danh mục bài viết (Admin > Bài viết > Danh mục) dưới dạng select2
Field postCategory nhận options cate_type để xác định cate_type của danh mục bài viết, nếu không truyền mặc định cate_type là post_categories
//Sử dụng phương thức `động`
$form->postCategory('field_name_category', ['label' => 'Label Category', 'cate_type' => 'post_categories']);
//Sử dụng phương thức `add`
$form->add('field_name_category', 'postCategory', ['label' => 'Label Category', 'cate_type' => 'post_categories']);
postCategoryTree
Chọn nhiều danh mục bài viết dưới dạng cây checkbox (giống checkbox-tree nhưng dữ liệu lấy tự động từ danh mục), trả về mảng id danh mục.
Nhận options cate_type giống field postCategory, mặc định là post_categories
//Sử dụng phương thức `động`
$form->postCategoryTree('field_name', ['label' => 'Label Category Tree', 'cate_type' => 'post_categories']);
//Sử dụng phương thức `add`
$form->add('field_name', 'post-category-tree', ['label' => 'Label Category Tree']);
Popover Advance
Field tìm kiếm và chọn dữ liệu (bài viết, danh mục, trang, thành viên hoặc dữ liệu tùy chỉnh) với giao diện popover.
Xem chi tiết tại Popover
$form->popoverAdvance('field_name', ['label' => 'Label', 'search' => 'post']);
Field giao diện
none
none cho phép chèn html vào form
$form->none(Admin::button('red', ['text' => 'Xóa']));