netresearch/contexts

TYPO3 的上下文 - 可以根据多个条件在前端修改页面行为

安装量: 15,394

依赖者: 1

建议者: 0

安全性: 0

星标: 9

关注者: 15

分支: 11

开放性问题: 0

类型:typo3-cms-extension

v3.1.0 2023-10-26 13:38 UTC

This package is auto-updated.

Last update: 2024-08-23 07:51:12 UTC


README

Latest version License PHPStan PHPCodeSniffer CodeQL

多渠道上下文

根据可配置的 "上下文" 显示和隐藏页面和内容元素。使用上下文,TYPO3 能够实现多渠道输出。

上下文示例

  • 屏幕尺寸小于 500px
  • 浏览器在平板电脑或手机上运行
  • 位置在某个地方附近 15km
  • 用户来自某些国家之一
  • 用户通过 GET 参数 affID=foo 访问网站
  • 用户 IP 与给定的规则匹配
  • 已设置会话变量
  • 任何其他规则的组合

除了上下文规则之外,此扩展还提供了一个 API,可以在自己的扩展中使用上下文。

设置

  1. 安装并激活扩展 contexts
  2. 清除 TYPO3 缓存

可选:安装扩展 contexts_geolocation 以使用基于位置的上下文规则(大陆、国家、区域)和 contexts_wurfl 以使用基于设备的规则(类型检查:手机、平板电脑、电视等;屏幕尺寸、设备/浏览器类型)。

创建和使用上下文

创建上下文

  1. 以管理员身份登录 TYPO3 后台

  2. 转到 Web/列表视图,根页面(ID 0)

  3. 创建新记录:TYPO3 上下文 -> 上下文

    • 给它一个标题,例如 "Affiliate ID: foo"
    • 选择类型:"GET 参数"
    • GET 参数名称:affID
    • 参数值:foo
    • 激活 "将结果存储在用户会话中"
    • 保存并关闭

使用上下文

  1. 转到 Web/页面,选择一个页面
  2. 编辑内容元素
  3. 选择 "上下文" 选项卡
  4. 对于上下文 "Affiliate ID: foo",选择 "可见:是"
  5. 保存

查看页面。内容元素不可见。

现在将 ?affID=foo 添加到 URL 并加载它。内容元素现在可见。

现在您可以访问其他页面。当您回来时,内容元素仍然可见 - 即使 GET 参数不再在 URL 中 - 因为已激活 "将结果存储在用户会话中"。

上下文类型

contexts 扩展附带了一些简单的上下文。所有这些都存储在表 tx_contexts_contexts 中。

域名

当用户访问的域名在配置的列表中时,将匹配域名上下文。

如果网站在多个域名上可用,或者在开发/测试/生产系统上部署,这很有用 - 您可以选择仅在开发系统上显示内容元素。

域名匹配

您可以每行使用一个域名。

如果域名不以点开头,它将仅完全匹配:www.example.org 不会匹配配置的域名 example.org

可以在域名名前使用点。在这种情况下,所有子域名都将匹配:some.www.example.org 匹配配置的域名 .example.org

GET 参数

检查是否存在可用的 GET 参数并具有特定的值。

激活 "将结果存储在用户会话中" 以在页面之间导航时保持上下文。

当参数值字段为空时,任何非空参数值都会激活上下文。

IP 地址

匹配用户的IP地址。支持IPv4和IPv6。

支持的表示法

  • 完整地址:80.76.201.32
  • 前缀:80.76.201.32/27FE80::/16
  • 通配符:80.76.201.*80.76.*.3780.76.*.*

HTTP 头部

检查HTTP头是否可用并具有特定值。

激活 "将结果存储在用户会话中" 以在页面之间导航时保持上下文。

当参数值字段为空时,任何非空参数值都会激活上下文。

逻辑上下文组合

使用逻辑运算符组合其他上下文。

通过其别名引用上下文,并且可以使用以下符号组合

  • 逻辑与:&&
  • 逻辑或:||
  • 否定:!
  • 括号用于分组表达式的一部分:(...)

会话变量

此上下文检查是否存在具有给定名称的会话变量(不是NULL)。

Fluid 模板实现

在流体模板中实现上下文查询的示例:

<div xmlns="http://www.w3.org/1999/xhtml" xmlns:contexts="http://typo3.org/ns/Tx_Contexts_ViewHelpers">
    <f:if condition="{contexts:matches(alias:'mobile')}">
        <f:then>is Mobile</f:then>
        <f:else>is not Mobile</f:else>
    </f:if>
</div>

TypoScript 实现

在TypoScript中实现上下文查询的示例:

[contextMatch("mobile")]
    # do something, it's a mobile browser
[END]

测试

composer update
vendor/bin/phpcs Classes/ --standard=PSR12
vendor/bin/phpstan analyse --configuration phpstan.neon
vendor/bin/rector --dry-run