@Ekaterina002

Как сохранить состояние checked не сбрасывая кэш?

Ребят, привет! У кого-нибудь есть идея, почему состояние checked срабатывает у input только после сброса кэша?
<input <?= (array_key_exists($arResult['ID'], $_SESSION["CATALOG_COMPARE_LIST"][5]["ITEMS"]) ? 'checked' : '') ?> type="checkbox" id="compareid_<?= $arResult['ID']; ?>" onchange="compare_tov(<?= $arResult['ID']; ?>);">
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 2
smilingcheater
@smilingcheater
Потому что вы используете значения из $_SESSION, но кеш вашего компонента (этот же код в компоненте у вас написан?) не учитывает значения из сессии.
И предупреждая ваш следующий вопрос - не надо делать зависимость кеша компонента от значений в сессии, весь смысл кеша пропадёт, он только лишнюю память/место занимать будет.
Из простого:
- либо отключайте кеш на компонете (быстрое, простое и плохое решение)
- либо выставляете этот checked через JS, который вы можете добавить в страницу в некешируемой части компонента (читайте про component_epilog.php)
Ответ написан
Комментировать
udjin123
@udjin123
PHP, Golang, React
Я знаю почему, кешируется потому что, логично?

Судая по всему это что связанное с добавлением товаров в сравнение, вызываете быстрее всего в компоненте раздела или карточки товара, html код там кешируется, путей решения проблемы несколько
  • не кешировать html, а только данные (кастомизировать компонент или писать свой)
  • использовать javascript чтобы поставить checked после отрисовки компонента
  • разметить как динамическую область, если включен композит
  • Отключить кеширование ;) (шучу так делать не надо)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы