真正的 url 不适用于 javascript TYPO3 构建的 url

Real url not working for url build by javascript TYPO3

我在我的页面中配置了扩展程序 tt_address。我需要按年份过滤地址。所以我构建了一个 select 框。我需要附加一些查询参数及其 url 以在控制器中访问以实现过滤器。 该功能已成功完成。但 realurl 不适用于此特定功能。

main.js

function initYearFilter() {
    var selectedItem = sessionStorage.getItem('year');
    if (selectedItem !== null) {
        $('.year-filter select').val(selectedItem);
    }
    $('.year-filter select').on('change', function () {
        var loc = location.href.match(/.*people\/alumni\/+/)[0],
            url;


        if ($(this).val() == 'reset') {
            url = loc + '?no_cache=1';
        } else {
            url = loc + '?ts_address[year]=' + $(this).val() + '&no_cache=1';
        }

        sessionStorage.setItem("year", $(".year-filter select").first().val());

        window.location.href = url;
    });
}

我的真实url 配置

'postVarSets' => array(
            '_DEFAULT' => array(
                'year' => array(
                    array(
                       'GETvar' => 'ts_address[year]',
                    ),
                ),
              ),
              )

如果您认为 ext:realurl 是罪魁祸首,请停用 ext:realurl 并查看它是否有效。

我认为它仍然无法正常工作,但您会在 url 中看到一些内容,应该会为您提供必要的提示。
您可能偶然发现了 TYPO3 的安全功能:cHash.
使用 cHash URL 参数,TYPO3 确保它的 URLs 不会为页面的缓存版本注入不相关的参数。如果 TYPO3 构建了一个 URL 它会散列所有参数并将此散列附加到 url。如果在 URL 中找到这样的 cHash,则从数据库中获取参数并忽略所有当前 URL 参数。特别是任何附加参数。所以缓存的页面匹配给定的 url.

如果使用ext:realurl,这个cHash参数隐藏在'normal'URL路径中。如果你添加参数,比如在你的 javascript 中,它们将被删除,因为它们没有在 cHash 中编码,而 cHash 在说话 URL.

中编码

在您的情况下,附加参数会更改页面的内容。如果附加参数包含在 cHash 中,则可以缓存此页面。
在这里你必须帮助 realurl 构建一个没有 cHash 的 URL,或者构建包含这些单独 cHash 的 URLs:
您可以构建一个可用年份的菜单,还可以为该年份配置一个路径段。通过这种方式,您可以获得每年的单独 cHashes。您需要更改 javascript 以添加路径段而不是参数。

不要让 urls 在前端手动生成,就像在 Javascript 中那样。

我的建议是生成 urls 后端并将其附加到选项属性(data-reset-urldata-url)。

// maybe a foreach here
  $GLOBALS['TSFE']->cObj->typolink_URL([
      'parameter' => '_PAGEUID_',
      'additionalParams' => '?ts_address[year]=' . $year, // suppose in foreach have year var
      'no_cache' => true
  ]);