pd / async-control
异步控制渲染特性
v2.0.0
2024-01-10 14:37 UTC
Requires
- php: ~7.4 | ~8.0
- nette/application: ^2.4
Requires (Dev)
- mockery/mockery: ^1.0
- nette/tester: ^2.0
- phpstan/phpstan: ^1.0
This package is auto-updated.
Last update: 2024-09-16 14:37:53 UTC
README
异步控制渲染特性。
适用于从外部来源加载数据或任何耗时的控件。
需求
安装
安装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
特性的控件页面上使用这些标签。