chomenko/modal

该包的最新版本(v3.0.8)没有可用的许可证信息。

Nette Bootstrap 弹窗

安装: 675

依赖: 1

建议者: 0

安全: 0

星标: 0

关注者: 1

分支: 0

公开问题: 0

类型:扩展

v3.0.8 2020-09-08 17:45 UTC

This package is auto-updated.

Last update: 2024-08-31 00:32:11 UTC


README

要求

安装

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;
	}

}