Bitrix CMS,如何根据标准组件模板中的GET参数获取缓存数据?

时间:2016-06-07 19:10:09

标签: caching components bitrix

我正在使用组件bitrix:catalog(标准版)并遇到问题。我想添加一些额外的GET参数来切换视图模式。我认为没有必要重写整个组件来制作这样的切换器,所以我在result_modifier中添加了类似于以下方式的额外键:

$this->__component->arResultCacheKeys = array_merge($this->__component->arResultCacheKeys, array('key1', "key2"));

在同一result_modifier的早期,我执行了在$arResult['key1']等中添加这些额外的密钥。它们似乎已正确保存,但仅适用于当前查询,例如?view=listview=card,这意味着只保存一个变量值,它不会改变GET参数。是否有简单而正确的方法使该组件缓存并根据GET变量输出数据?我想到的唯一想法是通过添加额外的参数和检查GET来重写组件,但我认为必须在via模板中制作更简单和正确的解决方案。人类可读链接已打开。而且我想要开启自动现金。如果我将其关闭,它将按计划开始工作。 一种可能的解决方案是通过SetTemplateCachedData重写缓存,但对于这样简单的任务,它似乎仍然是粗略和错误的方式。

比特利斯大师请帮我找到正确的解决方案,谷歌此刻无法帮助。

1 个答案:

答案 0 :(得分:0)

如果您使用标准bitrix:catalog组件,则可以使用标准bitrix:catalog.section。在component.php使用的标准组件缓存中。 这意味着您可以在自定义.parameters.php中描述其他参数,并将其设置为bitrix:catalog.section参数。 标准组件缓存基于arParams设置cacheId。 因此,您包含的组件应如下所示:

$APPLICATION->IncludeComponent(
    "bitrix:catalog.section",
    "",
    array(
        "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
        "IBLOCK_ID" => $arParams["IBLOCK_ID"],
        "ELEMENT_SORT_FIELD" => $arParams["ELEMENT_SORT_FIELD"],
        "ELEMENT_SORT_ORDER" => $arParams["ELEMENT_SORT_ORDER"],
         ....
         ....
        "NEW_ADDITIONAL_GET_PARAMS"=> $_GET['view']
    ),
    $component
);

当然更好的方式就像

"NEW_ADDITIONAL_GET_PARAMS"=> (in_array($_GET['view'],array('list','card'))?$_GET['view']:'list')

但您可能需要设置正确的目录参数:SEF_MODE SEF_FOLDER SEF_URL_TEMPLATES