K4:Переменная окружения
From In-Portal Developers Guide
Line 46: | Line 46: | ||
{{InfoBox|The values in this array are (<code>case-sensitive</code>).}} | {{InfoBox|The values in this array are (<code>case-sensitive</code>).}} | ||
- | == | + | == Getting Data from the Environment Variable == |
- | + | If the URL used to open the site contains an environment variable, then its value will automatically be processed by the system. Direct access to the value of the environment variable isn't recommended. | |
+ | |||
+ | В результате обработки '''для каждого''' из переданных [[K4:Unit Configs#Prefix|префиксов]] будут искуственно созданы переменные вида "<code>'''prefix[.special]_VariableName'''</code>". Будет создано по одной переменной для каждого '''значения''' в массиве [[K4:Unit Configs#QueryString|QueryString]] у переданного [[K4:Unit Configs#Prefix|префикс]]а. Созданные таким образом переменные можно будет в последствии использовать также, как и любые другие переменные, переданные в запросе к серверу (т.е. при помощи метода <code>'''Application::GetVar'''</code>). Это будет наглядно показано на ниже приведённом примере. | ||
* Переменные, заданные в [[K4:Unit Configs|конфигурационном файле]]: | * Переменные, заданные в [[K4:Unit Configs|конфигурационном файле]]: | ||
<source lang="php"> | <source lang="php"> |
Revision as of 18:53, 28 October 2009
| ||
---|---|---|
Статьи в этой категории | ||
|
The Environment variable is a standard query variable called "env
". Name of this variable is defined in ENV_VAR_NAME constant. The purpose of env
variable is to pass a large number of variables in a compact way through the website pages. In most cases env
variable will carry the values to load the object from the database on the current page (т.е. Prefix и ID
), but usage is not limited by that.
Note that in case if in Configuration file of passed the Prefix is allowed auto-loading, then at the time of first call to that object of Prefix and existence of object ID
in the env
variable then that object will be loaded automatically.
Contents |
Structure
The value contained in the environment variable has the following structure:
<session_id>-<template>:m<main_prefix_variables>[:<prefix[.special]>-<value1>[-<value2>...[-<valueN>]]]
For the above scheme, it can be seen that the environment variable is always made up of the following components:
-
session_id
- session identifier user; -
template
- path to the template, the rendering of which will be shown on the screen; -
main_prefix_variables
- system variables, among which are theme ID and language ID, which will be used to output information on the page (will be explained later).
Also, it may contain data from an unlimited number of prefixes. Data sets from different prefixes are separated with a colon (":
"). The first value in each set is the prefix of the configuration file. If necessary, then the "special
" can be indicated in the following format: "prefix.special
".
The following is a list of parameters of the prefix that can be passed through the environment variable, delimited using a hyphen ("-
"). Parameter names and their order in a single set of a prefix is set in the key QueryString of its Configs|configuration file]]. For example:
'QueryString' => Array( 1 => 'id', 2 => 'Page', 3 => 'event', 4 => 'mode', ),
The above key value QueryString is the standard for most prefixes and therefore will be described below.
Name | Description |
---|---|
id | Object ID (Item ) that can be used for automatic loading of an object.
|
Page | Page number of the object list (List ).
|
event | Event, that needs to be executed from a given prefix. |
mode
| Three types of values are possible:
|
Getting Data from the Environment Variable
If the URL used to open the site contains an environment variable, then its value will automatically be processed by the system. Direct access to the value of the environment variable isn't recommended.
В результате обработки для каждого из переданных префиксов будут искуственно созданы переменные вида "prefix[.special]_VariableName
". Будет создано по одной переменной для каждого значения в массиве QueryString у переданного префикса. Созданные таким образом переменные можно будет в последствии использовать также, как и любые другие переменные, переданные в запросе к серверу (т.е. при помощи метода Application::GetVar
). Это будет наглядно показано на ниже приведённом примере.
- Переменные, заданные в конфигурационном файле:
'Prefix' => 'sample-prefix', 'QueryString' => Array ( 1 => 'sample_variable', 2 => 'another_variable', ),
- Значение переменной окружения:
-template:m0--1--s-:sample\-prefix-15-testing
В выше приведённом примере у префикса "sample-prefix
" в конфигурационном файле определены 2 переменные: "sample_variable
" и "another_variable
". В переменной окружения для данного префикса переданы значения этих переменных, равные "15
" и "testing
" соответственно. После обработки переменной окружения для данного префикса буду созданы 2 переменные:
название | значение |
---|---|
sample-prefix_sample_variable | 15
|
sample-prefix_another_variable | testing
|
Получить значение любой из созданных выше переменных можно будет используя код вида:
пример для PHP | пример для шаблона |
---|---|
$sample_variable = $this->Application->GetVar('sample-prefix_sample_variable'); | value: <inp2:m_Get name="sample-prefix_sample_variable"/> |
Чтобы не "зашивать" значение префикса в коде его можно получить динамически используя методы kEvent::getPrefixSpecial() (для событий) и TagProcessor:getPrefixSpecial() (для тэгов).
|
Построение ссылок
Т.к. переменная окружения используется только для компактной передачи данных между страницами сайта, то единственным способом в неё что-либо записать является построение ссылки. Все ссылки в K4 строятся используя метод "Application::HREF
". Например он используется в методе Application::Redirect
, а также в тэгах m_Link, st_ContentBlock, lang_LanguageLink и m_FormAction. Этот метод принимает 4 описанных ниже параметра.
параметр | описание | ||
---|---|---|---|
$t (string) | Название шаблона, ссылку на который требуется построить (напр. "custom/tests/test_edit "). Параметр обязательный, но если передать пустое значение, то будет использован текущий (тот, на который зашёл пользователь) шаблон.
| ||
$prefix (string) | Данный необязательный параметр предназначен для того, чтобы можно было находясь в административной консоли построить ссылку на пользовательскую часть сайта. Для того, чтобы это сделать нужно передать в него значение "_FRONT_END_ ".
| ||
$params (array) | Набор параметров, которые следует передать в ссылку. Помимо параметров общего применения можно также передать ряд параметров специального назначения, описанных ниже. | ||
$index_file (string) | Необязательное название php файла, который следует использовать в результирующей ссылке. По умолчанию равен "index.php " (для пользовательской части сайта) и "admin/index.php " (для административной консоли).
|
Параметры специального назначения
pass (string) | В данном параметре передаются названия тех префиксов (через запятую), которые будут использоваться при построении значения переменной окружения в результирующей ссылке. Также можно передать значение "all ", чтобы были использованы все префиксы из ссылки на текущую страницу сайта. Например, "m,sample-prefix " или "all ".
| ||
index_file (string)
| Альтернативный способ задания значения параметра "index_file " методу Application::HREF через шаблон. Например (если передать "another_index.php "):
http://www.sample-site.com/another_index.php?env=-template:m0--1--s- (с параметром) http://www.sample-site.com/index.php?env=-template:m0--1--s- (без параметра) | ||
escape (int)
| Если указать данный параметр, то на результирующую ссылку будет применена функция addslashes. Только при использовании на шаблонах вместо данного параметра следует использовать параметр "js_escape ", т.к. он является усовершенствованной версией данного параметра и будет работать для всех тэгов. Например (если передать "1 "):
http://www.sample-site.com/index.php?env=-template:m0--1--s-:sample\\-prefix-15-testing (с параметром) http://www.sample-site.com/index.php?env=-template:m0--1--s-:sample\-prefix-15-testing (без параметра) Обычно параметр " | ||
anchor (string)
| Данный параметр позволяет добавить указанное в нём значение, как якорь к результирующей ссылке. Например (если передать "sample_anchor "):
http://www.sample-site.com/index.php?env=-template:m0--1--s-#sample_anchor (с параметром) http://www.sample-site.com/index.php?env=-template:m0--1--s- (без параметра) | ||
no_amp (int)
| Если передать данный параметр, то все переменные, используемые в результирующей ссылке будут объединены используя символ "& " (совместимо с JavaScript ). Во всех остальных случаях переменные будут объединены при помощи строки "& " (совместимо с HTML ). Например (если передать "1 "):
http://www.sample-site.com/index.php?env=-template:m0--1--s-&sample_parameter=value1&another_parameter=value2 (с параметром) http://www.sample-site.com/index.php?env=-template:m0--1--s-&sample_parameter=value1&another_parameter=value2 (без параметра) |
Использование переданных параметров
Сначала все переданные параметры делятся на 3 группы:
- параметры специального назначения;
- параметры, которые будут использоваться в переменной окружения;
- остальные параметры.
Берётся список префиксов из значения параметра pass и для каждого префикса выстраивается фрагмент переменной окружения, который будет его представлять. В случае, если значение той или иной переменной префикса не задано в параметрах, то берётся значение, полученное из запроса к серверу или пустая строка, если ничего передано небыло. Все параметры, которые были использованы при построении значения переменной окружения убираются из общего списка параметров (чтобы они не попали в результирующую ссылку).
Остальные, не использованные в переменной окружения параметры (кроме параметров специального назначения) добавляются к результирующей ссылке используя строку "&
" или "&
" (если используется параметр специального назначения no_amp).
После выполнения всех выше описанных шагов на полученную ссылку применяются переданные параметры специального назначения.
Запись данных
Запись значений в переменную окружения из шаблонов сводится к формированию ссылки, по которой в последствии перейдёт пользователь. Формирование ссылок внутри шаблонов производится с помощью тэга m_Link. В ниже приведённом примере продемонстрировано его использование.
Запись данных из шаблонов
<a href="<inp2:m_Link template='cart' cart_event='OnAddProduct' pass='m,cart,product'/>">Add To Cart</a>
Ниже приведено описание параметров тэга m_Link, использованных в выше приведённом примере.
параметр | пояснение |
---|---|
template (string) | Путь к шаблону. В пользовательской части сайта это путь относительно директории с темой. |
cart_event (string) | Название события для префикса cart . Указанное событие будет выполнено только в том случае, когда префикс cart указан в параметре pass .
|
pass (string) | Параметр указывает на то, данные каких префиксов необходимо передать в переменной окружения. |
Запись данных из событий
После успешного выполнения каждого события происходит автоматическое перенаправление на шаблон, с которого данное событие было вызвано. Для того, чтобы в ссылке построенной для этого перенаправления присутствовали дополнительные параметры нужно использовать метод kEvent:setRedirectParam
. В свою очередь свойство kEvent:redirect
позволит задать альтернативный шаблон, использующийся в ссылке на перенаправление. Это будет наглядно показано на ниже приведённом примере.
function OnCreate(&$event) { parent::OnCreate($event); if ($event->status == erSUCCESS) { return ; } $event->redirect = 'alternative_destination_template'; $event->setRedirectParam('pass', 'm,test'); $event->setRedirectParam('param_name', 'param_value'); }
В данном примере значение переменной "param_name
" будет доступно на шаблоне "alternative_destination_template
". Подробнее о последующем получении значений переданных параметров написано в этой, выше описанной главе.
Системные переменные окружения
Помимо данных от пользовательских префиксов в переменной окружения всегда передаётся префикс "m
" (main
), содержащий системные переменные окружения. Конфигурационный файл от данного префикса находиться в папке "core/units/general
" и соответственно называется "general_config.php
" (название папки плюс "_config.php
"). В данном конфигурационном файле используется ключ PortalStyleEnv, из-за которого в результирующей переменной окружения для данного префикса не будет дефиса ("-
") между названием префикса и значением его первой переменной (т.е. "m5
", а не "m-5
" как обычно). При помощи данного префикса передаются следующие переменные:
название | описание |
---|---|
m_cat_id (int) | ID текущей категории, т.е. той категории, данные из которой пользователь просматривает в данный момент. |
m_cat_page (int) | Номер страницы в списке категорий, находящихся в категории, заданной в переменной m_cat_id. |
m_lang (int) | ID языка, на котором нужно показывать содержание сайта (также работает и в административной консоли). Если не задать, то будет использовано ID основного языка, заданное в секции "Configuration -> Regional ".
|
m_theme (int) | ID темы, которую нужно использовать для показывания пользовательской части сайта. Значение данной переменной не используется в административной консоли. Если не задать, то будет использовано ID основной темы, заданное в секции "Configuration -> Themes ".
|
m_opener (int)
| Данная переменная используется для того, чтобы после при нажатии на кнопки "Save " (события OnSave, OnCreate, OnUpdate) и "Cancel " (события OnCancelEdit, OnCancel) на панели инструментов на формах редактирования автоматически происходил возврат на тот шаблон, с которого пользователь попал на эту форму редактирования. Для этого используется массив "opener_stack_<m_wid> ", содержащий шаблоны, заходя на которые пользователь в итоге попал на данный шаблон (напр. "Array ('users/user_list', 'users/user_edit_groups'); ").
Данный массив храниться в сессии. Значение, переданное в данной переменной будет рассматриваться как команда к изменению содержания массива "
|
m_wid (int) | Идентификатор окна, который используется только для всплывающих окон (popups ). Для основного окна значение данной переменной равно пустоте. Также идентификатор окна используется в формировании названия массива "opener_stack_<m_wid> ", управляемого через значение переменной m_opener.
|