Асинхронні врізання динамічне завантаження додаткових шаблонів - CMS NetCat

Починаючи з версії 5.8, існує можливість завантаження врізок (додаткових шаблонів макетів дизайну) окремо від усієї сторінки — «асинхронні врізки».

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

Вміст асинхронної врізки може бути вставлено в макет сторінки при його формуванні або може бути завантажено після основної частини сторінки окремим запитом. За будь-якого способу вставки на сторінку асинхронна врізка може бути перезавантажена пізніше.

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

При завантаженні врізки окремим запитом у ній буде визначено змінну $nc_partial_async, рівну true.

Автоматичне завантаження асинхронних врізок

Для того щоб врізка була завантажена окремим запитом, необхідно додати до коду її вставки в макет методdefer():

В якості аргументу метод defer() може бути переданий прапор включення або вимкнення відкладеного завантаження. Якщо цей аргумент не передано, метод включає відкладене завантаження (якби було передано true ).

За промовчанням до завантаження на місці врізки з відкладеним завантаженням не виводиться будь-який вміст. Щоб вивести заглушку на місці незавантаженої врізки, використовуйте методset_stub():

Щоб використовувати ту ж врізку як «заглушку», не використовуйте defer() , а додайте always_reload() . Всередині врізки можна відрізнити окреме завантаження за наявності змінної $nc_partial_async, рівної true.

Методи для управління відкладеним завантаженням у макеті дизайну

Використання локального сховища браузера (sessionStorage) для кешування асинхронних врізок

Методstore_in_browser()включає збереження (кешування) завантажених врізок у sessionStorage браузера. Такий кеш працює до закриття вікна браузера; він автоматично скидається при вході користувача до системи та виході з неї.

Зберігання врізок у браузері дозволяє прискорити відображення повної версії сторінки та знижує навантаження на сервер.

Можна передати true (для увімкнення) або false (для відключення) кешування в браузері. Якщо аргумент не передано, метод store_in_browser() включає кешування у браузері.

Врізки, збережені в браузері, не запитуються з сервера при перезавантаженні сторінки, якщо не встановлено режим always_reload .

Врізання з однаковим ключовим словом кешуються для всього сайту (але окремо для різних макетів дизайну). Якщо потрібно кешувати врізки залежно від зовнішніх стосовно них даних, передавайте їх через аргумент $data методу partial() або метод with() :

Оновлення врізки при кожному завантаженні сторінки

Методalways_reload()вказує, що врізка повинна бути оновлена ​​(отримана з сервера) при кожному завантаженні сторінки (навіть якщо вона вже вставлена ​​на сторінці або закешована у sessionStorage браузера).

Можна передати true або false для увімкнення або вимкнення примусового перезавантаження врізання. Якщо аргумент не передано, метод always_reload() включаєпримусове перезавантаження.

За замовчуванням примусове перезавантаження не використовується: якщо врізка вже вставлена ​​на сторінці, або закешована в sessionStorage, під час завантаження сторінки запит на оновлення такої врізки не буде виконуватися.

Якщо на сторінці є асинхронні врізки, до сторінки буде додано скрипт для роботи з ними, і будуть доступні функції nc_partial_load() і nc_partial_clear_cache() , які можна використовувати за необхідності реалізації нестандартної логіки роботи з асинхронними врізками.

nc_partial_load([partialConditions], [successCallback], [failureCallback])

Функція nc_partial_load() завантажує із сервера одну або кілька врізок.

  • PartialConditions (опціонально): правила вибору врізок для оновлення. Якщо правила не вказані (undefined, null, false, порожній рядок), будуть оновлені всі врізки на сторінці. При одночасному оновленні кількох врізок вони будуть завантажені одним запитом. Правила вибору врізок можуть бути вказані:
  • у вигляді рядка з одним ключовим словом врізання, наприклад: 'footer' (будуть оновлені всі врізки з ключовим словом footer , незалежно від наявності або відсутності у них додаткових параметрів data )
  • у вигляді рядка з кількома ключовими словами через пробіл або кому, наприклад: 'header footer'
  • у вигляді масиву, де кожен елемент також являє собою масив: 1) перший елемент - ключове слово врізки (або кілька через пробіл або кому); 2) другий елемент (опціонально) - параметри для вибірки за додатковими параметрами (data).

1) врізання 'header' з будь-якими параметрами або без них; 2) врізки 'footer' , які одночасно мають параметри show_menu = true і page_type = 'front' ; 3)врізання 'aside' без параметрів.

Зверніть увагу, що при заданні параметрів навіть для одного врізання масив має бути двовимірним.

Приклад використання функції nc_partial_load:

nc_partial_clear_cache()

Функція nc_partial_clear_cache() видаляє всі закешовані у браузері врізки (вони будуть запитані повторно при наступному перезавантаженні сторінки).

Подія ncPartialUpdate

При завантаженні врізки з сервера або локального кеша ( sessionStorage ) буде ініційовано подію ncPartialUpdate на елементі document . Подія не ініціюється, коли врізка не завантажується окремим запитом, а відразу вставлена ​​на сторінку (немає виклику defer() , врізка не оновлена ​​викликом функції nc_partial_load() ).

Властивість detail події містить об'єкт з властивістю newTemplateContent (event.detail.newTemplateContent). В об'єкті newTemplateContent ім'ям властивості є ключове слово врізання (і додаткові змінні у вигляді query-рядка, якщо вони були задані при виклику $this->partial() у макеті), значенням - новий вміст відповідної врізки. При використанні jQuery це значення доступне в event.originalEvent.detail.newTemplateContent .

Ручне завантаження асинхронних врізок

Для завантаження врізок на стороні сервера використовується скрипт /netcat/partial.php. Необхідно передати такі параметри:

  • template - ключове слово або ідентифікатор макета дизайну, до якого відноситься врізання;
  • partial - ключове слово врізки (може бути вказано кілька ключових слів у масиві, або через кому або пропуск);
  • json - якщо дорівнює 1, то результат буде відправлений у вигляді JSON-об'єкта, де ім'ям властивості є ключове слово врізання, а значенням - її вміст. Якщо параметр json непереданий, результат буде повернутий без додаткових перетворень — у тому вигляді, як зазначено у самому шаблоні (при запиті кількох врізок вони будуть виведені послідовно).

Інші передані параметри також будуть доступні всередині врізки.