0

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

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

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

Bitrix大师请帮我找到正确的解决方案,谷歌目前无能为力。

4

1 回答 1

0

如果你使用标准bitrix:catalog组件,你可能会使用标准bitrix:catalog.section。在那个component.php使用的标准组件缓存中。这意味着您可以在 custom 中描述其他参数.parameters.php,并将其设置在bitrix:catalog.sectionparams.xml 中。基于 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
);

当然更好的方式somethink like

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

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

于 2016-06-09T08:36:28.633 回答