2

我在我的 Typo3 4.5.16 项目中使用 RealURL 来朗读某个页面的 URL。为此,我使用了一个查找表,它将一定数量的 ID 与其对应的 URL 相匹配。

例如
http://www.example.com/path/to/catalog/chapter1/section1/group1/prod-123/
,将映射到页面“目录”,参数分别映射为chaptersectiongroupproduct。请注意,这些参数中只有最后一个是相关的并且具有真实映射,其他参数仅用于“漂亮”路径。

现在我的问题是:并非每个产品都有所有级别的前面路径段。例如,另一个产品可能有这样的 URL:
http://www.example.com/path/to/catalog/chapter1/section4/prod-789/

数据库将如下所示:

Id  | seg0      | seg1      | seg2      | seg3      | dummy0    | dummy1    | dummy2    | MapId
----|-----------|-----------|-----------|-----------|-----------|-----------|-----------|-----------
1   | chapter1  | section1  | group1    | prod-123  | 1         | 1         | 1         | 123
2   | chapter1  | section4  |           | prod-789  | 1         | 4         | 0         | 789

您会看到到段名称的映射只是空的。

然而,RealURL 将使用空字符串作为组,并产生
chapter1/section4//prod-789

有没有办法抑制这种空映射?将解码将段传递给下一个参数(如noMatch => bypass值映射)

如果不是,是否可以使用查找表一次映射多个路径段?(即将整个路径映射到真实ID)?

4

2 回答 2

1

您可能想尝试 realUrl 提供的钩子, 请参阅这篇文章

于 2012-06-21T22:48:39.847 回答
0

好吧,我自己找到了一个 hacky 解决方法。

它使用userFunc基本上模仿lookupTable 的行为的tions。每个级别都有一个这样的功能。它修改$params['pathParts']传递给 unser 函数的数组

编码:

  • 对于“父”级别,只需映射到段。如果未映射,这将返回空字符串。
  • $params['pathParts']对于映射级别,删除传递数组末尾的所有空元素
  • => 删除空白部分

解码:

  • 对于“父”级别,检查$params['pathParts']. 如果不是,这是一个“跳过”的父级。只需将当前值附加到$params['pathParts'],它将由 RealURL 传递到下一个级别
  • 最终使用正确的值调用映射的级别。只是地图

只要 RealURL 对 userFunctions 的处理没有太大改变,它就可以工作......

于 2012-06-19T14:17:58.203 回答