真正的网址不适用于javascript TYPO3建立的网址

时间:2018-12-05 06:43:35

标签: javascript jquery typo3 realurl

我在页面中配置了扩展名tt_address。我需要按年份过滤地址。所以我建立了一个选择框。我需要将一些查询参数及其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;
    });
}

我的realurl配置

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

2 个答案:

答案 0 :(得分:1)

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

我的建议是生成url后端并将其附加到选项属性(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
  ]);

答案 1 :(得分:0)

如果您认为ext:realurl是停用ext:realurl的罪魁祸首,然后看看它是否有效。

我认为它仍然无法正常工作,但是您会在url中看到一些可以给您必要提示的信息。
您可能偶然发现了TYPO3的安全功能:cHash
使用cHash URL参数TYPO3可以保护其URL避免注入不相关的参数来存储页面的缓存版本。如果TYPO3构建URL,则它会哈希所有参数并将此哈希值附加到URL。如果在URL中找到这样的cHash,则将从数据库中获取参数,并且将忽略所有当前URL参数。特别是任何其他参数。因此,缓存的页面与给定的URL匹配。

如果使用ext:realurl,则此cHash参数隐藏在“常规” URL路径中。如果您像在javascript中那样添加参数,则会将其删除,因为它们未在cHash中进行编码,而cHash是在口语URL中进行编码。

在您的情况下,附加参数将更改页面的内容。如果cHash中包含其他参数,则可以缓存此页面。
在这里,您必须帮助realurl来构建不带cHash的URL,或者构建包含以下各个cHashes的URL:
您可以构建可用年份的菜单,还可以配置年份的路径细分。通过这种方式,您可以每年获得单独的哈希值。您需要更改JavaScript以添加路径段而不是参数。