sourcebroker / singleview
允许在不同于列表视图的页面上显示单个视图,同时保持URL对用户和SEO友好
Requires
- typo3/cms-core: ~10.4.0 || ~11.5.0
Replaces
- typo3-ter/singleview: 4.0.0
README
它做什么?
此扩展允许在不同于列表视图的页面上显示单个视图,同时保持URL对用户和SEO友好。
查看下面的示例以更好地理解。
让我们以以下列表视图URL为例
https://www.example.com/list/
TYPO3默认情况下,当你在不同的页面上放置单个视图时,没有简单的方法从slugified URL中删除它。你会得到如下内容(单个视图位于名为“detail”的单独页面上)
https://www.example.com/list/detail/title-of-single-item/
如果你使用ext:singleview
,则可以将单个视图放置在不同于列表视图的页面上,但slugified URL仍然看起来不错,如下所示 - 所以没有/detail/
部分。
https://www.example.com/list/title-of-single-item/
安装
使用composer
composer require sourcebroker/singleview
用法
ext:singleview的每个配置都必须使用\SourceBroker\Singleview\Service\SingleViewService::registerConfig()
静态方法在您的ext_localconf.php文件中注册,如下例所示(对于ext:news)
<?php \SourceBroker\Singleview\Service\SingleViewService::registerConfig( 1, 2, function() { $newsParams = \TYPO3\CMS\Core\Utility\GeneralUtility::_GET('tx_news_pi1'); return !empty($newsParams['news']); }, ['backend_layout'], );
registerConfig()方法的参数
- 第一个参数是列表视图页面的PID。
- 第二个参数是单个视图页面的PID。
- 第三个参数是返回布尔值(或布尔值条件)的闭包,需要满足在列表视图页面上显示单个页面。闭包在这里很有用,因为在ext_localconf.php级别,URL/slug尚未解码,所以
\TYPO3\CMS\Core\Utility\GeneralUtility::_GET('tx_news_pi1')
的值是空的。但是在闭包执行的地方,\TYPO3\CMS\Core\Utility\GeneralUtility::_GET('tx_news_pi1')
将返回良好的值。 - 第四个参数是可选的,它是一个包含字段名称的字符串数组,这些字段将从单个页面复制到列表页面。如果你使用backend_layouts来管理你的布局,那么你可能应该将其放在那里['backend_layout']
重要!
单个视图链接应指向与列表视图相同的页面uid。
技术背景
背后的思想是使用TYPO3内置功能“从pid显示内容”,你可以在页面属性中找到它。在此扩展中,“从pid显示内容”字段的值是基于$_GET参数动态设置的。当TYPO3渲染带有列表视图的页面时,ext:singleview会检查$_GET参数是否有单个视图请求。如果是真的,则将“content_from_pid”字段设置为单个视图页面的uid。这样,带有其内容和布局的单个视图页面就会显示在列表视图页面上。
为了确保TYPO3不会为列表视图和单个视图使用同一个缓存,添加了“content_from_pid”到hashBase。你可以通过以下方式禁用此行为: $GLOBALS['TYPO3_CONF_VARS']['EXT']['EXTCONF']['singleview']['hashBaseCustomization']['enabled'] = false;
变更日志
见 https://github.com/sourcebroker/singleview/blob/master/CHANGELOG.rst