sergeykasyanov/oc-popups-plugin

OctoberCMS 的 PopupController 行为插件。

安装: 7

依赖者: 0

建议者: 0

安全: 0

星标: 6

关注者: 3

分支: 1

开放问题: 0

类型:october-plugin

1.0.2 2021-05-20 16:03 UTC

This package is auto-updated.

Last update: 2024-09-20 23:53:34 UTC


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 是渲染打开弹出窗口按钮必需的。

消息

消息弹出窗口的配置必须包含这两个选项。

内容

内容弹出窗口的配置必须包含 contentcontentPartial

表单

表单弹出窗口的配置必须包含 actionOnClickform 选项。

覆盖

有两种覆盖方法。

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') ?>