Глобальные ключи

Как Вы уже знаете, в 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 в модульных скриптах следует в крайне редких случаях! Нужно учитывать, что система кеширования модулей функционирует в зависимости от их входных параметров. Поэтому, если Вы включите кеширование модуля, в котором обращаетесь к глобальной переменной напрямую, то он будет работать неправильно. К тому же, по общепринятым правилам следует писать модули таким образом, чтобы результат их работы зависел только от входных параметров.