В настоящее время пытаюсь использовать функцию ESI для включения системы кэширования лака с проектом php. в моем сценарии мне нужно получить доступ к переменным php внутри тега esi. что-то вроде следующего …
<p class="dt5">This article was read <esi:include src="http://localhost/live24/esi/viewCount" /> times. </p>
Вот полный URL-адрес внутри тега ESI, и он работает нормально, то есть извлекает счетчик чтений с сервера, а остальная часть страницы обслуживается из кэша. но как я могу создать динамический URL, который я могу передать в тег ESI.
Я пробовал что-то вроде следующего ….
<?php $url = site_url() . "/esi/viewCount" ?>
или же
<?php $url = "http://localhost/live24/esi/viewCount" ?>
<p class="dt5">This article was read <esi:include src="$(url)" /> times. </p>
как $(variable_name)
или же $(variable_name{key_name})
это синтаксис для добавления переменной внутри тега esi, но кажется, что он не работает при доступе к переменной PHP.
Я попробовал что-то подобное также …
<p class="dt5">This article was read<esi:include src="http://$(SERVER{NAME})/live24/esi/viewCount" /> times. </p>
и это работает. показывая, что я могу получить доступ к суперглобалам из тега esi.
есть ли способ получить доступ к переменным php внутри тега esi или любой другой способ создать динамический URL для использования в esi include.
Нашел решение, и оно довольно простое и понятное на самом деле. должен был подумать об этом раньше.
сначала фрагмент кода ..
<p class="dt5">This article was read
<esi:remove>
<?php $esiUrl = "http://localhost/bdlive24/esi/viewCount"; ?>
</esi:remove>
<!--esi
<esi:include src=<?php echo $esiUrl; ?> />
-->
times</p>
здесь трюк представляет <esi:remove>
тег. любой код разметки внутри тега удаления будет просто проигнорирован и код php будет выполнен. Так что теперь возможно любое динамическое генерирование URL внутри тега esi: remove и связывание его внутри тега esi: include.
<!-- ... -->
этот тег будет просто скрыт лаком, когда включена обработка ESI, а в случае отключения обработки ESI этот тег вступит в действие и сделает тег esi: include неактивным.
Если у вас есть другие идеи, пожалуйста, поделитесь ….
Других решений пока нет …