sergeykasyanov / oc-popups-plugin
OctoberCMS 的 PopupController 行为插件。
1.0.2
2021-05-20 16:03 UTC
Requires
- php: >=7.2
- composer/installers: ~1.0
README
插件为 OctoberCMS 后端页面提供 PopupController 控制器行为,以便轻松创建弹出窗口。
创建弹出窗口
将 PopupController 行为添加到您的控制器中。
use SergeyKasyanov\Popups\Behaviors\PopupController; class MyController extends Controller { public $implement = [ PopupController::class ]; public $popupConfig = 'config_popup.yaml'; }
您可以添加多个配置。
public $popupConfig = [ 'popup1' => 'config_popup_1.yaml', 'popup2' => 'config_popup_2.yaml', ];
要渲染打开弹出窗口按钮,请从控制器中调用 popupRenderOpenBtn()
方法,其中定义作为可选参数。
<?= $this->popupRenderOpenBtn('popup1') ?>
或者您也可以自己编写 HTML。
<button class="btn btn-primary" data-control="popup" data-handler="onOpenPopup" data-size="medium" data-request-data="popupDefinition: 'popup1'"> Open popup </button>
弹出窗口类型
PopupController 支持三种类型的弹出窗口:内容、消息 和 表单。
内容弹出窗口是包含静态内容的弹出窗口。
消息弹出窗口是类似于静态闪存消息的消息弹出窗口。
表单弹出窗口是包含自定义表单的弹出窗口。
弹出窗口配置
通用选项
所有类型弹出窗口的通用选项
type 是每个弹出窗口配置必需的。
openBtnLabel 是渲染打开弹出窗口按钮必需的。
消息
消息弹出窗口的配置必须包含这两个选项。
内容
内容弹出窗口的配置必须包含 content 或 contentPartial。
表单
表单弹出窗口的配置必须包含 actionOnClick 和 form 选项。
覆盖
有两种覆盖方法。
public function getPopupFormModel(string $definition, ?string $modelClass): \October\Rain\Database\Model { }
public function getPopupContent(string $definition, ?bool $below = false): ?string { }
您可以使用它来覆盖弹出窗口的内容和 form 弹出窗口的表单模型。
以下 getPopupContent() 的参数用于覆盖 contentBelow。
复杂示例
以下是一个使用 PopupController 制作简单向导的示例。为此,您可以使用弹出窗口 ID。
# vendor/plugin/controllers/mycontroller/step1_popup.yaml type: form openBtnLabel: Start wizard actionBtnLabel: Submit step1 actionOnClick: onSubmitStep1 form: fields: first_name: label: Name last_name: label: Surname popupId: wizard
# vendor/plugin/controllers/mycontroller/step2_popup.yaml type: form actionBtnLabel: Submit step2 actionOnClick: onSubmitStep2 inset: true form: fields: bio: label: Bio
# vendor/plugin/controllers/mycontroller/result_popup.yaml type: content content: Will be overriden in controller inset: true
// vendor/plugin/controllers/MyController.php use SergeyKasyanov\Popups\Behaviors\PopupController; class MyController extends Controller { public $implement = [ PopupController::class ]; public $popupConfig = [ 'step1' => 'step1_popup.yaml', 'step2' => 'step2_popup.yaml', 'result_popup' => 'result_popup.yaml', ]; public function index() { } public function onSubmitStep1() { // do something with post() // #wizard - popupId of step1 popup return [ '#wizard' => $this->popupRender('step2') ]; } public function onSubmitStep2() { // do something with post() // #wizard - popupId of step1 popup return [ '#wizard' => $this->popupRender('result_popup') ]; } public function getPopupContent(string $definition, ?bool $below = false): ?string { if ($definition === 'result_popup') { return '<pre>' . print_r(post(), true) . '</pre>'; } return $this->asExtension(PopupController::class)->getPopupContent($definition, $below); } }
<!-- vendor/plugin/controllers/mycontroller/index.htm --> <?= $this->popupRenderOpenBtn('step1') ?>