Как я могу передать переменные в кэшированный контент в PHP?

StackOverflow https://stackoverflow.com/questions/87468

  •  01-07-2019
  •  | 
  •  

Вопрос

По сути, у меня есть страница PHP, которая вызывает другой HTML-код для визуализации с помощью метода объекта.Это выглядит так:

МОЯ PHP-СТРАНИЦА:

// some content...

<?php
    $GLOBALS["topOfThePage"] = true;
    $this->renderSomeHTML();
?>

// some content...

<?php
    $GLOBALS["topOfThePage"] = false;
    $this->renderSomeHTML();
?>

Первый вызов метода кэшируется, но мне нужно, чтобы renderSomeHTML() отображался немного по-другому в зависимости от его местоположения на странице.Я попытался перейти к $GLOBALS, но значение не изменилось, поэтому я предполагаю, что оно кэшируется.

Разве это невозможно без передачи аргумента через метод или без его кэширования?Любая помощь приветствуется.Это не мое приложение — это Magento.

Редактировать:

Это Magento, и похоже, что он использует memcached.Я пытался передать аргумент через renderSomeHTML(), но когда я использую func_get_args() для PHP-включения для рендеринга, получается не то, что я в него вложил.

Редактировать:

В дальнейшем я смог «аннулировать» кеш, вызвав другой метод, который извлек тот же контент, и передав аргумент, отключающий кеширование.Спасибо всем за вашу помощь.

Это было полезно?

Решение

Очевидно, что вы не можете.Весь смысл кэширования в том, что «вещь», которую вы кэшируете, не изменится.Итак, вы либо:

  • укажите параметр
  • избегать кэширования
  • сделать кеш недействительным, если вы установите другой параметр

Или вы сами переписываете механизм кэширования — для поддержки некоторой динамической привязки.

Другие советы

В разных платформах чачирование обрабатывается по-разному, поэтому вам придется помочь нам, предоставив дополнительную информацию.Но мне также интересно, можно ли передать это как параметр вместо использования $GLOBALS.

$this->renderSomeHTML(true);

Ваш вопрос кажется неясным, но кеширование в значительной степени означает «сохранено, чтобы нам не приходилось вычислять его снова».Если вы хотите, чтобы содержимое отличалось, вам нужно кэшировать больше результатов и выбрать правильный кэшированный объект для отправки обратно.

Чтобы дать лучший ответ, нужно больше информации.Что кэширует документ, Умник?И что вы подразумеваете под «его расположением на странице»?Что это такое'?

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top