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

问题描述 投票:0回答:1

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

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

早些时候,在同一个 result_modifier 中,我在

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

Bitrix高手请帮我找到正确的解决方案,google目前无法帮助。

php caching components bitrix
1个回答
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

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.