Как я могу передать переменные в кэшированный контент в PHP?
Вопрос
По сути, у меня есть страница 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);
Ваш вопрос кажется неясным, но кеширование в значительной степени означает «сохранено, чтобы нам не приходилось вычислять его снова».Если вы хотите, чтобы содержимое отличалось, вам нужно кэшировать больше результатов и выбрать правильный кэшированный объект для отправки обратно.
Чтобы дать лучший ответ, нужно больше информации.Что кэширует документ, Умник?И что вы подразумеваете под «его расположением на странице»?Что это такое'?