pd/async-control

异步控制渲染特性

v2.0.0 2024-01-10 14:37 UTC

This package is auto-updated.

Last update: 2024-09-16 14:37:53 UTC


README

异步控制渲染特性。

Downloads total Build Status Latest Stable Version

适用于从外部来源加载数据或任何耗时的控件。

AsyncControl

需求

安装

安装PeckaDesign/AsyncControl的最佳方式是使用Composer

$ composer require pd/async-control

使用方法

特性

<?php
class CommentsControl extends Nette\Application\UI\Control {

	use Pd\AsyncControl\UI\AsyncControlTrait;

	public function render() {
		//control rendering
	}
}

如果您想调用除render以外的不同方法,则设置自定义渲染回调

<?php
$this->setAsyncRenderer([$this, 'customRender']);
//or
$this->setAsyncRenderer(function () {
	//control rendering
});

模板

{control comments:async}

或使用自定义消息

{control comments:async 'Show comments'}

前端

不使用任何javascript,此特性将只显示加载按钮。使用简单的脚本,您可以使用nette ajax扩展src/assets/async.nette.ajax.js在页面加载时自动加载所有异步组件。或者,您可以实现自己的处理,例如,在滚动页面时加载数据组件。如果您有很长的页面,这很方便。您不需要等待所有数据都加载完成,可以更快地显示主要数据。附加数据将在页面加载后或按需根据您的JS实现加载。

配置

您可以在bootstrap.php中设置默认消息和用于加载链接的属性

<?php
Pd\AsyncControl\UI\AsyncControlLink::setDefault('Load content', ['class' => ['btn', 'ajax']]);

或在应用设置中

services:
	application:
		setup:
			- Pd\AsyncControl\UI\AsyncControlLink::setDefault('Load content', {class: [btn, ajax]})

搜索引擎

要允许爬虫索引您的网站,您需要向页面添加元标签。

<meta name="fragment" content="!" n:if="$presenter->getParameter('_escaped_fragment_') === NULL">

如果您在页面中放置www.example.com,爬虫将暂时将此URL映射到www.example.com?_escaped_fragment_,并从您的服务器请求此内容。然后您的服务器应返回对应于www.example.com的HTML快照

当url中存在_escaped_fragment_参数时,AsyncControlTrait将始终渲染其内容。

如果您想为禁用JS的页面访问者提供相同的行为,请在noscript标签内添加额外的元标签

<noscript n:if="$presenter->getParameter('_escaped_fragment_') === NULL">
	<meta http-equiv="refresh" content="0;url=?_escaped_fragment_="/>
</noscript>

为了避免对服务器和爬虫的额外负载,请仅在包含具有AsyncControlTrait特性的控件页面上使用这些标签。