chomenko / modal
该包的最新版本(v3.0.8)没有可用的许可证信息。
Nette Bootstrap 弹窗
v3.0.8
2020-09-08 17:45 UTC
Requires
- php: <=7.1
- latte/latte: ^2.4
- nette/application: ^2.4
- nette/di: ^2.4
- nette/utils: ^2.4
- nettpack/stage: ^1.0
- tracy/tracy: ^2.4
README
要求
- php 7.1
- Bootstrap
- JQuery
- chomenko/app-webloader
- nette/application
- nette/utils
- tracy/tracy
- latte/latte
- nettpack/stage
安装
composer require chomenko/modal
配置
添加扩展
extensions: modals: Chomenko\Modal\DI\ModalExtension
添加到 BasePresenter.php
namespace App; use Chomenko\Modal\IWrappedModal; abstract class BasePresenter extends Presenter /** * @var IWrappedModal @inject */ public $modalFactory; public function createComponentModal() { /** @var WrappedModal $wrapped */ $wrapped = $this->modalFactory->create(); return $wrapped; } }
添加到 layout.late
<!DOCTYPE html> <html> <head> {control css} </head> <body class="skin-purple sidebar-mini fixed"> {control modal} {control footerCss} {block scripts} {control js} {/block} </body> </html>
使用
创建您的第一个弹窗。创建文件 HelloWorldModal.php,参考 Chomenko\Modal\ModalControl
<?php namespace App\Components; use Chomenko\AutoInstall\AutoInstall; use Chomenko\AutoInstall\Config; use Chomenko\Modal\ModalHtml; use Chomenko\Modal\WrappedHtml; use Chomenko\Modal\ModalControl; use Chomenko\Modal\ModalFactory; use Chomenko\Modal\AccessAction; use Nette\Http\Url; /** * @Config\Tag({"modal.factory"}) */ class HelloWorldModal extends ModalControl implements AutoInstall { /** * @var $id */ private $id; /** * @param int $id */ public function create($id) { $this->id = $id; } /** * @param ModalFactory $factory * @param Url $url * @param array $parameters * @throws \Exception */ public static function onCreateUrl(ModalFactory $factory, Url $url, array $parameters = []) { } /** * @param AccessAction $accessAction * @return bool */ public function access(AccessAction $accessAction): bool { return $accessAction->getUser()->isLoggedIn(); } /** * @return string */ public function getTitle() :string { return "Hello World"; } /** * @param WrappedHtml $wrappedHtml */ public function renderBody(WrappedHtml $wrappedHtml, ModalHtml $body) { $this->template->id = $this->id; $this->template->setFile(__DIR__ . "/body.latte"); $this->template->render(); } }
创建文件 IHelloWorldModal.php
namespace App\Components; interface IHelloWorldModal { /** * @return HelloWorldModal */ public function create(); }
创建文件 body.latte
<div class="modal-body"> <h1>Hello World</h1> </div>
并创建弹窗链接
<a href="{mlink 'bf1318e1', id => 123}">Hello world modal</a> {* OR *} <a href="{mlink 'App\Components\IHelloWorldModal', id => 123}">Hello world modal</a> {* OR *} <a n:mlink="'bf1318e1', id => 123">Hello world modal</a> {* OR *} <a n:mlink="'App\Components\IHelloWorldModal', id => 123">Hello world modal</a>
链接也可以手动创建。
/** @var \Chomenko\Modal\ModalController $modalController */ $modalController = $this->container->getByType(ModalController::class); /** @var \Chomenko\Modal\ModalFactory $factory */ $factory = $modalController->getByInterface(IHelloWorldModal::class); /** @var \Nette\Http\Url $url */ $url = $factory->getUrl(["my" => "parameter"]);
如果您不使用 自动安装。
services: helloWorldModal: implement: App\Components\IHelloWorldModal tags: ["modal.factory"]
事件
事件列表
- Subscriber::CREATE
- Subscriber::ACCESS
- Subscriber::ACCESS_FAILURE
- Subscriber::ACCESS_SUCCESS
- Subscriber::AFTER_RENDER
- Subscriber::BEFORE_RENDER
namespace App\Components; use Chomenko\AutoInstall\AutoInstall; use Chomenko\AutoInstall\Tag; use Chomenko\Modal\AccessAction; use Chomenko\Modal\Events\Subscriber; use Chomenko\Modal\ModalControl; /** * @Tag({"modal.events"}) */ class ModalEvent extends Subscriber implements AutoInstall { public function getSubscribedEvents(): array { return [ Subscriber::ACCESS ]; } public function access(ModalControl $modalControl, AccessAction $accessAction): bool { return TRUE; } }