Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
当我有唯一的URL参数时,如何让Magento提供页面的缓存版本?_Magento_Url_Caching_Parameters_Fpc - Fatal编程技术网

当我有唯一的URL参数时,如何让Magento提供页面的缓存版本?

当我有唯一的URL参数时,如何让Magento提供页面的缓存版本?,magento,url,caching,parameters,fpc,Magento,Url,Caching,Parameters,Fpc,这是一个在搜索中没有答案的简单问题(google/bing/stackoverflow)。答案当然可能很复杂 我在Magento中读过几篇关于FPC的文章,但还没有真正确定我需要在哪里添加或创建代码,以便在发送某些URL参数时,它提供页面的缓存版本,而不是尝试使用URL参数重新缓存 例如,当您转到它时,将加载正确的缓存版本。然而,使用google analytics和任何其他类型的第三方报告,尤其是具有唯一标识符的报告,它将重新加载页面,就像它没有被缓存一样。因此将创建该页面的新缓存版本,等等

这是一个在搜索中没有答案的简单问题(google/bing/stackoverflow)。答案当然可能很复杂

我在Magento中读过几篇关于FPC的文章,但还没有真正确定我需要在哪里添加或创建代码,以便在发送某些URL参数时,它提供页面的缓存版本,而不是尝试使用URL参数重新缓存

例如,当您转到它时,将加载正确的缓存版本。然而,使用google analytics和任何其他类型的第三方报告,尤其是具有唯一标识符的报告,它将重新加载页面,就像它没有被缓存一样。因此将创建该页面的新缓存版本,等等

我希望能够排除某些URL参数,而不是全部。主要是我用于跟踪客户的任何参数

就代码而言,由于FPC的复杂性以及目前没有可供测试的开发站点,我还没有提出任何建议

任何关于我可以在哪里添加此例外的线索都会很有帮助,谢谢


编辑:我想补充一点,我正在使用企业版。并使用Redis进行缓存。

我在修复程序上开发了自己的扩展

简而言之,get参数用于缓存ID。因此,为了绕过此问题,我创建了一个扩展,该扩展更改了以下内容:

/app/code/core/Enterprise/PageCache/Model/Processor/Category.php

两个功能发生了变化

protected function _getQueryParams()

/app/code/core/Enterprise/PageCache/Model/Processor/Default.php

一个功能被改变了

public function getPageIdWithoutApp(Enterprise_PageCache_Model_Processor $processor)
一旦更改,它将不再使用我指定的跟踪参数创建缓存ID

例如:

public function getPageIdWithoutApp(Enterprise_PageCache_Model_Processor $processor)
{
    $queryParams = $_GET;
    ksort($queryParams);
    /**
    * unset known tracking codes
    */
    unset($queryParams["trk_msg"]);
    unset($queryParams["trk_contact"]);
    unset($queryParams["utm_source"]);
    unset($queryParams["utm_medium"]);
    unset($queryParams["utm_term"]);
    unset($queryParams["utm_campaign"]);
    unset($queryParams["utm_content"]);
    /** End Edit */
    $queryParamsHash = md5(serialize($queryParams));
    return $processor->getRequestId() . '_' . $queryParamsHash;
}

这是从创建您自己的FPC解决方案的角度来看的吗?不,这只是在FPC之前添加一层。您做了哪些更改?扩展只是改变了GetPageId Without App的工作方式。我将补充回答。
public function getPageIdWithoutApp(Enterprise_PageCache_Model_Processor $processor)
{
    $queryParams = $_GET;
    ksort($queryParams);
    /**
    * unset known tracking codes
    */
    unset($queryParams["trk_msg"]);
    unset($queryParams["trk_contact"]);
    unset($queryParams["utm_source"]);
    unset($queryParams["utm_medium"]);
    unset($queryParams["utm_term"]);
    unset($queryParams["utm_campaign"]);
    unset($queryParams["utm_content"]);
    /** End Edit */
    $queryParamsHash = md5(serialize($queryParams));
    return $processor->getRequestId() . '_' . $queryParamsHash;
}