Глобальні ключі

Як Ви вже знаєте, в HTML-шаблонах можуть бути системні ключі з визначеними змінними та локальні ключі, що використовуються в модульних скриптах . Крім цих ключів, у шаблонах може бути ще один тип ключів зі значеннями глобального масиву парсеру gVars . Це особливий масив, в якому Ви можете зручно зберігати ключові змінні, які можуть бути використані в багатьох модулях та шаблонах. Доступ до цього масиву здійснюється через покажчик парсера (за замовчуванням це змінна $gParser ), наприклад, у скрипті сторінки можна визначити id поточного розділу:

 $gParser->gVars['topic']['id'] = $hash['id'];

Як бачите, у цьому рядку формується змінна id для масиву topic . Після того, як змінна визначена, Ви отримуєте можливість викликати в будь-якому HTML-шаблоні через такі ключі: {TOPIC:ID} та [TOPIC:ID] . Ключ складається з двох частин, розділених двокрапкою - TOPIC та ID, що відповідає вкладеності масиву: $gParser->gVars['topic']['id'] . Максимальна вкладеність – до третього рівня.

Важливо! У HTML-шаблонах ключі завжди мають бути вказані у верхньому регістрі!

Ще один важливий аспект - це відмінність ключів у фігурних та квадратних дужках. Справа в тому, що на місце ключів у фігурних дужках підставляються дані точнісінько такі самі, якими вони були занесені в масив gVars . На місце ж ключа в квадратних дужках підставляються дані, що переводяться в безпечне представлення (PHP-функція urlencode() ). Наприклад:

 $gParser->gVars['topic']['psu'] = 'sport eqip';

Тоді у шаблоні на місці ключа:

  • {TOPIC:PSU} буде " sport eqip "
  • [TOPIC:PSU] буде " sport%20eqip "

Використання ключів у квадратних дужках необхідне при виклику модулів, коли ключі виступають вхідними параметрами модуля або якщо значення необхідно вставити прямо в JavaScript-код або HTML-форму. Наприклад:

 {MELBIS:melbis_goods_search([SEARCH:KEYWORD])}

або

 var search_key = '[SEARCH:KEYWORD]';

або

 <INPUT type=text name=search_key VALUE="[SEARCH:KEYWORD]";

Використовуючи глобальний масив gVars , Ви зможете спростити виклик багатьох модулів. Наприклад, Ви можете визначити ключ id поточного розділу та за його допомогою викликати всі інші модулі (незалежно від їх вкладеності):

 {MELBIS:melbis_goods_in_topic([TOPIC:ID])}
 ...
 {MELBIS:melbis_action_in_topic([TOPIC:ID])}

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

 function MELBIS_SHOP_START($mVars) { global $gParser; $id = $gParser->gVars['topic']['id']; }
Важливо! Хоча така можливість і є, звертатися до глобального масиву gVars в модульних скриптах слід у вкрай поодиноких випадках! Потрібно враховувати, що система кешування модулів функціонує залежно від вхідних параметрів. Тому, якщо Ви увімкнете кешування модуля, в якому звертаєтеся до глобальної змінної безпосередньо, він буде працювати неправильно . До того ж, за загальноприйнятими правилами слід писати модулі таким чином, щоб результат роботи залежав тільки від вхідних параметрів .