Кешування динамічного вмісту
============================

Коли ми використовуємо [кешування фрагментів](/doc/guide/caching.fragment) або [кешування сторінок](/doc/guide/caching.page), то часто потрапляємо в ситуацію, коли цілі частини вмісту на виході відносно статичні, крім одного або кількох місць. Наприклад, сторінка допомоги може відображати статичну допоміжну інформацію поряд з імʼям авторизованого користувача, яке відображається вгорі.

Для вирішення цієї проблеми ми можемо варіювати вміст кешу залежно від імені користувача, але це було б дуже великою витратою дорогоцінного місця (на диску) для кешування практично однакового вмісту, крім імені користувача. Ми також можемо розділити сторінку на кілька фрагментів і кешувати їх окремо, але це ускладнює наше представлення і робить код занадто складним. Найкращий спосіб — використання можливості *динамічного вмісту*, яку забезпечує клас [CController].

Динамічний вміст означає фрагмент вмісту на виході, який не повинен кешуватися, навіть якщо він включений у кешований фрагмент. Для забезпечення динамічності вмісту, її потрібно генерувати кожен раз, навіть якщо навколишній контент узятий із кешу. Для вирішення цього завдання, нам потрібно, щоб динамічний вміст генерувався деякою функцією або методом.

Ми викликаємо метод [CController::renderDynamic()] для вставки динамічного вмісту у потрібне місце.

~~~
[php]
…інший HTML-вміст…
<?php if($this->beginCache($id)) { ?>
…фрагмент кешованого вмісту…
	<?php $this->renderDynamic($callback); ?>
…фрагмент кешованого вмісту…
<?php $this->endCache(); } ?>
…інший HTML-вміст…
~~~

У коді вище, `$callback` — це коректний зворотний PHP-виклик. Це може бути рядок з імʼям методу поточного контролера або глобальної функції. Також це може бути масив, який посилається на метод класу. Будь-які додаткові параметри у методі [renderDynamic()|CController::renderDynamic()] повинні бути передані зворотньому виклику. Зворотний виклик повинен не відображати динамічний вміст, а повернути його.