In-Portal Developers Guide

This is a wiki-based Developers Guide for In-Portal Open Source CMS. The purpose of this guide is to provide advanced users, web developers and programmers with documentation on how to expand, customize and improve the functionality and the code the In-Portal software. Please consider contributing to our documentation writing effort.

K4:Переменная окружения

From In-Portal Developers Guide

Jump to: navigation, search
(Changing back to Russian)
Line 1: Line 1:
{{toc | category = Структура приложения | sortkey = 004.001}}
{{toc | category = Структура приложения | sortkey = 004.001}}
<!-- Пишите ПОСЛЕ этой строки, пожалуйста. Ничего не стирать! -->
<!-- Пишите ПОСЛЕ этой строки, пожалуйста. Ничего не стирать! -->
 +
Переменная окружения представляет из себя обычную переменную из запроса к серверу с названием "<code>env</code>". Само название данной переменной задано в константе [[K4:Константы#ENV_VAR_NAME|ENV_VAR_NAME]]. Она была введена для того, чтобы реализовать возможность компактной передачи большого количества переменных между страницами сайта. В большинстве случаев в ней будет содержаться информация, при помощи которой можно будет загрузить объект из [[K4:Работа с базой данных|базы данных]] на странице (т.е. [[K4:Unit Configs#Prefix|префикс]] и <code>ID</code>), но это совсем не обязательно.
 +
The Environment variable is a standard query variable called "<code>env</code>". Name of this variable is defined in [[K4:Константы#ENV_VAR_NAME|ENV_VAR_NAME]] constant. The purpose of <code>env</code> variable is to pass a large number of variables in a compact way through the website pages. In most cases <code>env</code> variable will carry the values to load the object from the [[K4:Работа с базой данных|database]] on the current page (т.е. [[K4:Unit Configs#Prefix|Prefix]] и <code>ID</code>), but usage is not limited by that.
The Environment variable is a standard query variable called "<code>env</code>". Name of this variable is defined in [[K4:Константы#ENV_VAR_NAME|ENV_VAR_NAME]] constant. The purpose of <code>env</code> variable is to pass a large number of variables in a compact way through the website pages. In most cases <code>env</code> variable will carry the values to load the object from the [[K4:Работа с базой данных|database]] on the current page (т.е. [[K4:Unit Configs#Prefix|Prefix]] и <code>ID</code>), but usage is not limited by that.
 +
 +
Если в [[K4:Unit Configs|конфигурационном файле]] переданного [[K4:Unit Configs#Prefix|префикс]]а разрешена [[K4:Unit_Configs#AutoLoad|автоматическая загрузка]], то при первом обращении к объекту [[K4:Unit Configs#Prefix|префикс]] которого передан и при наличии его <code>ID</code> в запросе к серверу он будет автоматически загружен.
Note that in case if in [[K4:Unit Configs|Configuration file]] of passed the [[K4:Unit Configs#Prefix|Prefix]] is allowed [[K4:Unit_Configs#AutoLoad|auto-loading]], then at the time of first call to that object of [[K4:Unit Configs#Prefix|Prefix]] and existence of object <code>ID</code> in the <code>env</code> variable then that object will be loaded automatically.
Note that in case if in [[K4:Unit Configs|Configuration file]] of passed the [[K4:Unit Configs#Prefix|Prefix]] is allowed [[K4:Unit_Configs#AutoLoad|auto-loading]], then at the time of first call to that object of [[K4:Unit Configs#Prefix|Prefix]] and existence of object <code>ID</code> in the <code>env</code> variable then that object will be loaded automatically.
-
== Structure ==
+
== Структура ==
-
The value contained in the environment variable has the following structure:
+
Значение,  содержащееся в переменной окружения имеет следующую структуру:
  <session_id>-<template>:m<main_prefix_variables>[:<prefix[.special]>-<value1>[-<value2>...[-<valueN>]]]
  <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:
+
Как видно из приведённой выше схемы в переменной окружения всегда присутствуют следующие компоненты:
-
 
+
* <code>session_id</code> - [[K4:UserSession#SessionKey|идентификатор сессии]] [[K4:PortalUser|пользователя]];
-
* <code>session_id</code> - [[K4:UserSession#SessionKey|session identifier]] [[K4:PortalUser|user]];
+
* <code>template</code> - путь к шаблону, результат обработки которого будет показан на экране;
-
* <code>template</code> - path to the template, the rendering of which will be shown on the screen;
+
* <code>main_prefix_variables</code> - ряд системных переменных, среди которых в том числе присутствуют [[K4:Theme#ThemeId|ID темы]] и [[K4:Language|ID языка]], которые будут использованы для вывода информации на странице (об этом позже).
-
* <code>main_prefix_variables</code> - system variables, among which are [[K4:Theme#ThemeId|theme ID]] and [[K4:Language|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 [[K4:Unit Configs#Prefix|prefix]]es. Data sets from different [[K4:Unit Configs#Prefix|prefix]]es are separated with a colon ("<code>:</code>"). The first value in each set is the [[K4:Unit Configs#Prefix|prefix]] of the configuration file. If necessary, then the "<code>special</code>" can be indicated in the following format: "<code>prefix.special</code>".
+
Также в ней могут присутствовать данные неограниченного количества [[K4:Unit Configs#Prefix|префикс]]ов. Наборы данных разных [[K4:Unit Configs#Prefix|префикс]]ов друг от друга отделяются двоеточием ("<code>:</code>"). Первое значение внутри каждого набора - [[K4:Unit Configs#Prefix|префикс]] конфигурационного файла. Если необходимо, то можно указать и "<code>special</code>" следующим образом: "<code>prefix.special</code>".
-
The following is a list of parameters of the [[K4:Unit Configs#Prefix|prefix]] that can be passed through the environment variable, delimited using a hyphen ("<code>-</code>"). Parameter names and their order in a single set of a [[K4:Unit Configs#Prefix|prefix]] is set in the key [[K4:Unit Configs#QueryString|QueryString]] of its Configs|configuration file]]. For example:
+
Далее следует список параметров [[K4:Unit Configs#Prefix|префикс]]а, которые могут передаваться через переменную окружения, разделённых при помощи дефиса ("<code>-</code>"). Названия параметров, а также их порядок в пределах одного набора [[K4:Unit Configs#Prefix|префикс]]а задаётся в ключе [[K4:Unit Configs#QueryString|QueryString]] его [[K4:Unit Configs|конфигурационного файла]]. Например:
<source lang="php">
<source lang="php">
'QueryString' => Array(
'QueryString' => Array(
Line 27: Line 30:
</source>
</source>
-
The above key value [[K4:Unit Configs#QueryString|QueryString]] is the standard for most [[K4:Unit Configs#Prefix|prefix]]es and therefore will be described below.
+
Пиведённое выше значение ключа [[K4:Unit Configs#QueryString|QueryString]] является стандартным для большинства [[K4:Unit Configs#Prefix|префикс]]ов и поэтому будет описано ниже.
{| class="prettytable"
{| class="prettytable"
-
! Name || Description
+
! название || описание
|-
|-
-
| <code>id</code> || Object ID (<code>Item</code>) that can be used for [[K4:Unit Configs#AutoLoad|automatic loading]] of an object.
+
| <code>id</code> || ID объекта (<code>Item</code>), которое может быть использовано для [[K4:Unit Configs#AutoLoad|автоматической загрузки]] объекта.
|-
|-
-
| <code>Page</code> || Page number of the object list (<code>List</code>).
+
| <code>Page</code> || Номер страницы списка объектов (<code>List</code>).
|-
|-
-
| <code>event</code> || [[EventHandler:About|Event]], that needs to be executed from a given [[K4:Unit Configs#Prefix|prefix]].
+
| <code>event</code> || [[EventHandler:About|Событие]], которое требуется выполнить у данного [[K4:Unit Configs#Prefix|префикс]]а.
|-
|-
| <code>mode</code>
| <code>mode</code>
-
| Three types of values are possible:
+
| Режим редактирования записей. Возможны 3 вида значений:
-
* "" - values will be edited in the original table;
+
* "" - данные будут редактироваться в оригинальной таблице;
-
* "<code>t</code>" - values will be edited in a temporary table in the main window;
+
* "<code>t</code>" - данные будут редактироваться во временной таблице в основном окне;
-
* "<code>t<wid></code>" - values will be edited in a temporary table that was created as the result of a <code>popup</code>, where the <code>window id</code> is "<code><wid></code>".
+
* "<code>t<wid></code>" - данные будут редактироваться во временной таблице, которая была создана при открытии всплывающего окна (<code>popup</code>) с идентификатором окна (<code>window id</code>) равным "<code><wid></code>".
|}
|}
-
{{InfoBox|The values in this array are (<code>case-sensitive</code>).}}
+
{{InfoBox|Значения данного массива чувствительны к регистру (<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. The result of processing '''each''' of the passed [[K4:Unit Configs#Prefix|prefixes]] creates variables, e.g. "<code>'''prefix[.special]_VariableName'''</code>". One variable will be created for each '''value''' in the [[K4:Unit Configs#QueryString|QueryString]] array  of the passed [[K4:Unit Configs#Prefix|prefix]]. Variables created by this process can then be used just like any other variables passed in a request to the server (i.e. use the method <code>'''Application::GetVar'''</code>). This will be demonstrated in the below example.
+
-
* Variables defined in the [[K4:Unit Configs|configuration file]]:
+
 +
== Получение данных из переменной окружения ==
 +
Если в ссылке, используемой для посещения сайта находиться переменная окружения, то её значение будет автоматически обработано системой. Доступ напрямую к значению переменной окружения не рекомендуется. В результате обработки '''для каждого''' из переданных [[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|конфигурационном файле]]:
<source lang="php">
<source lang="php">
'Prefix' => 'sample-prefix',
'Prefix' => 'sample-prefix',
Line 58: Line 60:
</source>
</source>
-
* Environment Variable Values:
+
* Значение переменной окружения:
<source lang="xml">-template:m0--1--s-:sample\-prefix-15-testing</source>
<source lang="xml">-template:m0--1--s-:sample\-prefix-15-testing</source>
-
There are two variables defined in the above example for the "<code>sample-prefix</code>" prefix in the [[K4:Unit Configs|configuration file]]: "<code>sample_variable</code>" and "<code>another_variable</code>". The values that are passed in the environment variable for this prefix are  "<code>15</code>" and "<code>testing</code>", respectively. Two variables will be created after processing the environment variable for this prefix:
+
В выше приведённом примере у префикса "<code>sample-prefix</code>" в [[K4:Unit Configs|конфигурационном файле]] определены 2 переменные: "<code>sample_variable</code>" и "<code>another_variable</code>". В переменной окружения для данного префикса переданы значения этих переменных, равные "<code>15</code>" и "<code>testing</code>" соответственно. После обработки переменной окружения для данного префикса буду созданы 2 переменные:
{| class="prettytable"
{| class="prettytable"
-
! Name || Value
+
! название || значение
|-
|-
| <code>sample-prefix_sample_variable</code> || <code>15</code>
| <code>sample-prefix_sample_variable</code> || <code>15</code>
Line 69: Line 71:
| <code>sample-prefix_another_variable</code> || <code>testing</code>
| <code>sample-prefix_another_variable</code> || <code>testing</code>
|}
|}
-
{{TipBox|The variable will be created even if a value isn't passed.}}
+
{{TipBox|Переменная будет создана, даже если её значение не передано.}}
-
The following code will allow getting the value of either of the variables created above:
+
Получить значение любой из созданных выше переменных можно будет используя код вида:
{| class="prettytable"
{| class="prettytable"
-
! <code>PHP</code> Example || Template Example
+
! пример для <code>PHP</code> || пример для шаблона
|-
|-
| <source lang="php">$sample_variable = $this->Application->GetVar('sample-prefix_sample_variable');</source>
| <source lang="php">$sample_variable = $this->Application->GetVar('sample-prefix_sample_variable');</source>
| <source lang="xml">value: <inp2:m_Get name="sample-prefix_sample_variable"/></source>
| <source lang="xml">value: <inp2:m_Get name="sample-prefix_sample_variable"/></source>
|}
|}
-
{{InfoBox|To avoid hard-coding the value of the prefix, it can be obtained dynamically using the following methods:<code>'''kEvent::getPrefixSpecial()'''</code> (for [[EventHandler:About|events]]) and <code>'''TagProcessor:getPrefixSpecial()'''</code> (for [[TagProcessor:About|tags]]).}}
+
{{InfoBox|Чтобы не "зашивать" значение префикса в коде его можно получить динамически используя методы <code>'''kEvent::getPrefixSpecial()'''</code> (для [[EventHandler:About|событий]]) и <code>'''TagProcessor:getPrefixSpecial()'''</code> (для [[TagProcessor:About|тэгов]]).}}
-
== Building Links ==
+
== Построение ссылок ==
-
Since the environment variable is used to compactly pass data between the pages of a site, the only way to to add something to it is by building a link. All links in K4 are built using the method "<code>'''Application::HREF'''</code>". For example, it's used in the method code>'''Application::Redirect'''</code> and in the [[TagProcessor:About|tags]] [[TagProcessor:m_Link|m_Link]], [[TagProcessor:st_ContentBlock|st_ContentBlock]], [[TagProcessor:lang_LanguageLink|lang_LanguageLink]] and [[TagProcessor:m_FormAction|m_FormAction]]. This method accepts the following four parameters.
+
Т.к. переменная окружения используется только для компактной передачи данных между страницами сайта, то единственным способом в неё что-либо записать является построение ссылки. Все ссылки в K4 строятся используя метод "<code>'''Application::HREF'''</code>". Например он используется в методе <code>'''Application::Redirect'''</code>, а также в [[TagProcessor:About|тэгах]] [[TagProcessor:m_Link|m_Link]], [[TagProcessor:st_ContentBlock|st_ContentBlock]], [[TagProcessor:lang_LanguageLink|lang_LanguageLink]] и [[TagProcessor:m_FormAction|m_FormAction]]. Этот метод принимает 4 описанных ниже параметра.
{| class="prettytable"
{| class="prettytable"
-
! Parameter || Description
+
! параметр || описание
|-
|-
-
| {{ConfigProperty|$t|string}} || Name of the template to which a link needs to be built (for example "<code>custom/tests/test_edit</code>"). This parameter is required, but if a blank value is passed, then the current template will be used (the one the user opened).
+
| {{ConfigProperty|$t|string}} || Название шаблона, ссылку на который требуется построить (напр. "<code>custom/tests/test_edit</code>"). Параметр обязательный, но если передать пустое значение, то будет использован текущий (тот, на который зашёл пользователь) шаблон.
|-
|-
-
| {{ConfigProperty|$prefix|string}} || This optional parameter is available to make it possible to build a link to the front end of the site while located in the administrative console. To do this, it's value has to be passed as "<code>_FRONT_END_</code>". {{InfoBox|Currently, this functionality doesn't work (see [[Question:How to tell the m Link tag to build a link to the Front-End?|this question]]) and to build a link to the front-end, "<code>index.php</code>" has to be passed as the value of the [[#index_file|index_file]] parameter.}}
+
| {{ConfigProperty|$prefix|string}} || Данный необязательный параметр предназначен для того, чтобы можно было находясь в административной консоли построить ссылку на пользовательскую часть сайта. Для того, чтобы это сделать нужно передать в него значение "<code>_FRONT_END_</code>". {{InfoBox|На текущий момент данная функциональность не работает (см. [[Вопрос:Как принудительно указать тегу m Link строить линк на Front-End?|этот вопрос]]) и чтобы построить ссылку на пользовательскую часть сайта нужно передать "<code>index.php</code>" в качестве значения параметра [[#index_file|index_file]].}}
|-
|-
-
| {{ConfigProperty|$params|array}} || This is a set of parameters that should be passed in a link. In addition to passing general application parameters, it's also possible to pass many special purpose parameters, which are described in [[#Special Purpose Parameters|below]].
+
| {{ConfigProperty|$params|array}} || Набор параметров, которые следует передать в ссылку. Помимо параметров общего применения можно также передать ряд параметров специального назначения, описанных [[#Параметры специального назначения|ниже]].
|-
|-
-
| {{ConfigProperty|$index_file|string}} || Optional name of the <code>php</code> file that should be used in the resulting link. By default, it's set to "<code>index.php</code>" (for the front-end) and "<code>admin/index.php</code>" (for the administrative console).
+
| {{ConfigProperty|$index_file|string}} || Необязательное название <code>php</code> файла, который следует использовать в результирующей ссылке. По умолчанию равен "<code>index.php</code>" (для пользовательской части сайта) и "<code>admin/index.php</code>" (для административной консоли).
|}
|}
-
=== Special Purpose Parameters ===
+
=== Параметры специального назначения ===
{| class="prettytable"
{| class="prettytable"
-
| {{ConfigProperty|pass|string}} || In this parameter are passed the names of the [[K4:Unit Configs#Prefix|prefix]] tags (comma delimited) that will be used for building the value of the environment variable in the resulting link. It's also possible to pass the value "<code>'''all'''</code>" so that all [[K4:Unit Configs#Prefix|prefix]]es in a link are used on the page of a site. For example, "<code>m,sample-prefix</code>" or "<code>all</code>". {{TipBox|'''Always''' when writing a list of prefixes, the first one must be the [[K4:Unit Configs#Prefix|prefix]] "<code>m</code>".}}
+
| {{ConfigProperty|pass|string}} || В данном параметре передаются названия тех [[K4:Unit Configs#Prefix|префикс]]ов (через запятую), которые будут использоваться при построении значения переменной окружения в результирующей ссылке. Также можно передать значение "<code>'''all'''</code>", чтобы были использованы все [[K4:Unit Configs#Prefix|префикс]]ы из ссылки на текущую страницу сайта. Например, "<code>m,sample-prefix</code>" или "<code>all</code>". {{TipBox|Также следует отметить, что '''всегда''', когда указывается список префиксов первым из них должен быть [[K4:Unit Configs#Prefix|префикс]] "<code>m</code>".}}
|-
|-
| {{ConfigProperty|index_file|string}}
| {{ConfigProperty|index_file|string}}
-
| An alternative way to set the value of the "<code>index_file</code>" parameter for the <code>Application::HREF</code> method through the template. For example (if passing "<code>another_index.php</code>"):
+
| Альтернативный способ задания значения параметра "<code>index_file</code>" методу <code>Application::HREF</code> через шаблон. Например (если передать "<code>another_index.php</code>"):
<source lang="xml">
<source lang="xml">
-
http://www.sample-site.com/another_index.php?env=-template:m0--1--s- (with parameter)
+
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- (without parameter)
+
http://www.sample-site.com/index.php?env=-template:m0--1--s- (без параметра)
</source>
</source>
|-
|-
| {{ConfigProperty|escape|int}}
| {{ConfigProperty|escape|int}}
-
| If this parameter is defined, then the [http://php.prod.intechnic.lv/manual/en/function.addslashes.php addslashes] function will be applied to the resulting link. When using in a template, use "<code>'''js_escape'''</code>" instead of this parameter because it's the latest version of this parameter and will work for all tags. For example (if passing "<code>1</code>"):
+
| Если указать данный параметр, то на результирующую ссылку будет применена функция [http://php.prod.intechnic.lv/manual/en/function.addslashes.php addslashes]. Только при использовании на шаблонах вместо данного параметра следует использовать параметр "<code>'''js_escape'''</code>", т.к. он является усовершенствованной версией данного параметра и будет работать для всех тэгов. Например (если передать "<code>1</code>"):
<source lang="xml">
<source lang="xml">
-
http://www.sample-site.com/index.php?env=-template:m0--1--s-:sample\\-prefix-15-testing (with parameter)
+
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 (without parameter)
+
http://www.sample-site.com/index.php?env=-template:m0--1--s-:sample\-prefix-15-testing (без параметра)
</source>
</source>
-
Usually the "<code>'''js_escape'''</code>" (in templates) is used to build links that are used in <code>JavaScript</code>.
+
Обычно параметр "<code>'''js_escape'''</code>" (в шаблонах) следует использовать для построения ссылок, используемых в <code>JavaScript</code>.
|-
|-
| {{ConfigProperty|anchor|string}}
| {{ConfigProperty|anchor|string}}
-
| This parameter allows adding the value defined in it as an anchor in the resulting link. For example (passing "<code>sample_anchor</code>"):
+
| Данный параметр позволяет добавить указанное в нём значение, как якорь к результирующей ссылке. Например (если передать "<code>sample_anchor</code>"):
<source lang="xml">
<source lang="xml">
-
http://www.sample-site.com/index.php?env=-template:m0--1--s-#sample_anchor (with parameter)
+
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- (without parameter)
+
http://www.sample-site.com/index.php?env=-template:m0--1--s- (без параметра)
</source>
</source>
|-
|-
| {{ConfigProperty|no_amp|int}}
| {{ConfigProperty|no_amp|int}}
-
| If this parameter is passed, then all variables, used in the resulting link will be combined with the "<code>&</code>" symbol (compatible with <code>JavaScript</code>). In all other cases, the variables will be combined using the "<code>&amp;amp;</code>" characters (compatible with <code>HTML</code>). For example, (if passing "<code>1</code>"):
+
| Если передать данный параметр, то все переменные, используемые в результирующей ссылке будут объединены используя символ "<code>&</code>" (совместимо с <code>JavaScript</code>). Во всех остальных случаях переменные будут объединены при помощи строки "<code>&amp;amp;</code>" (совместимо с <code>HTML</code>). Например (если передать "<code>1</code>"):
<source lang="xml">
<source lang="xml">
-
http://www.sample-site.com/index.php?env=-template:m0--1--s-&amp;sample_parameter=value1&amp;another_parameter=value2 (with parameter)
+
http://www.sample-site.com/index.php?env=-template:m0--1--s-&amp;sample_parameter=value1&amp;another_parameter=value2 (с параметром)
-
http://www.sample-site.com/index.php?env=-template:m0--1--s-&sample_parameter=value1&another_parameter=value2 (without parameter)
+
http://www.sample-site.com/index.php?env=-template:m0--1--s-&sample_parameter=value1&another_parameter=value2 (без параметра)
</source>
</source>
|}
|}
-
=== Using Passed Parameters ===
+
=== Использование переданных параметров ===
Сначала все переданные параметры делятся на '''3 группы''':
Сначала все переданные параметры делятся на '''3 группы''':
* параметры [[#Параметры специального назначения|специального назначения]];
* параметры [[#Параметры специального назначения|специального назначения]];
Line 207: Line 209:
| {{ConfigProperty|m_wid|int}} || Идентификатор окна, который используется только для всплывающих окон (<code>popups</code>). Для основного окна значение данной переменной равно пустоте. Также идентификатор окна используется в формировании названия массива "<code>'''opener_stack_<m_wid>'''</code>", управляемого через значение переменной [[#m_opener|m_opener]].
| {{ConfigProperty|m_wid|int}} || Идентификатор окна, который используется только для всплывающих окон (<code>popups</code>). Для основного окна значение данной переменной равно пустоте. Также идентификатор окна используется в формировании названия массива "<code>'''opener_stack_<m_wid>'''</code>", управляемого через значение переменной [[#m_opener|m_opener]].
|}
|}
 +
 +
[[ru:{{FULLPAGENAME}}]]
 +
[[en:K4:Environment Variable]]

Revision as of 23:12, 27 November 2010

Структура приложения Структура приложения
Статьи в этой категории

Переменная окружения представляет из себя обычную переменную из запроса к серверу с названием "env". Само название данной переменной задано в константе ENV_VAR_NAME. Она была введена для того, чтобы реализовать возможность компактной передачи большого количества переменных между страницами сайта. В большинстве случаев в ней будет содержаться информация, при помощи которой можно будет загрузить объект из базы данных на странице (т.е. префикс и ID), но это совсем не обязательно.

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.

Если в конфигурационном файле переданного префикса разрешена автоматическая загрузка, то при первом обращении к объекту префикс которого передан и при наличии его ID в запросе к серверу он будет автоматически загружен.

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

Структура

Значение, содержащееся в переменной окружения имеет следующую структуру:

<session_id>-<template>:m<main_prefix_variables>[:<prefix[.special]>-<value1>[-<value2>...[-<valueN>]]]

Как видно из приведённой выше схемы в переменной окружения всегда присутствуют следующие компоненты:

  • session_id - идентификатор сессии пользователя;
  • template - путь к шаблону, результат обработки которого будет показан на экране;
  • main_prefix_variables - ряд системных переменных, среди которых в том числе присутствуют ID темы и ID языка, которые будут использованы для вывода информации на странице (об этом позже).

Также в ней могут присутствовать данные неограниченного количества префиксов. Наборы данных разных префиксов друг от друга отделяются двоеточием (":"). Первое значение внутри каждого набора - префикс конфигурационного файла. Если необходимо, то можно указать и "special" следующим образом: "prefix.special".

Далее следует список параметров префикса, которые могут передаваться через переменную окружения, разделённых при помощи дефиса ("-"). Названия параметров, а также их порядок в пределах одного набора префикса задаётся в ключе QueryString его конфигурационного файла. Например:

'QueryString' => Array(
    1 => 'id',
    2 => 'Page',
    3 => 'event',
    4 => 'mode',
),

Пиведённое выше значение ключа QueryString является стандартным для большинства префиксов и поэтому будет описано ниже.

название описание
id ID объекта (Item), которое может быть использовано для автоматической загрузки объекта.
Page Номер страницы списка объектов (List).
event Событие, которое требуется выполнить у данного префикса.
mode Режим редактирования записей. Возможны 3 вида значений:
  • "" - данные будут редактироваться в оригинальной таблице;
  • "t" - данные будут редактироваться во временной таблице в основном окне;
  • "t<wid>" - данные будут редактироваться во временной таблице, которая была создана при открытии всплывающего окна (popup) с идентификатором окна (window id) равным "<wid>".
Image:Infobox Icon.gif Значения данного массива чувствительны к регистру (case-sensitive).

Получение данных из переменной окружения

Если в ссылке, используемой для посещения сайта находиться переменная окружения, то её значение будет автоматически обработано системой. Доступ напрямую к значению переменной окружения не рекомендуется. В результате обработки для каждого из переданных префиксов будут искуственно созданы переменные вида "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
Image:Tipbox Icon.gif Переменная будет создана, даже если её значение не передано.

Получить значение любой из созданных выше переменных можно будет используя код вида:

пример для PHP пример для шаблона
$sample_variable = $this->Application->GetVar('sample-prefix_sample_variable');
value: <inp2:m_Get name="sample-prefix_sample_variable"/>
Image:Infobox Icon.gif Чтобы не "зашивать" значение префикса в коде его можно получить динамически используя методы 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_".
Image:Infobox Icon.gif На текущий момент данная функциональность не работает (см. этот вопрос) и чтобы построить ссылку на пользовательскую часть сайта нужно передать "index.php" в качестве значения параметра index_file.
$params (array) Набор параметров, которые следует передать в ссылку. Помимо параметров общего применения можно также передать ряд параметров специального назначения, описанных ниже.
$index_file (string) Необязательное название php файла, который следует использовать в результирующей ссылке. По умолчанию равен "index.php" (для пользовательской части сайта) и "admin/index.php" (для административной консоли).

Параметры специального назначения

pass (string) В данном параметре передаются названия тех префиксов (через запятую), которые будут использоваться при построении значения переменной окружения в результирующей ссылке. Также можно передать значение "all", чтобы были использованы все префиксы из ссылки на текущую страницу сайта. Например, "m,sample-prefix" или "all".
Image:Tipbox Icon.gif Также следует отметить, что всегда, когда указывается список префиксов первым из них должен быть префикс "m".
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 (без параметра)

Обычно параметр "js_escape" (в шаблонах) следует использовать для построения ссылок, используемых в JavaScript.

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). Во всех остальных случаях переменные будут объединены при помощи строки "&amp;" (совместимо с HTML). Например (если передать "1"):
http://www.sample-site.com/index.php?env=-template:m0--1--s-&amp;sample_parameter=value1&amp;another_parameter=value2 (с параметром)
http://www.sample-site.com/index.php?env=-template:m0--1--s-&sample_parameter=value1&another_parameter=value2 (без параметра)

Использование переданных параметров

Сначала все переданные параметры делятся на 3 группы:

Берётся список префиксов из значения параметра pass и для каждого префикса выстраивается фрагмент переменной окружения, который будет его представлять. В случае, если значение той или иной переменной префикса не задано в параметрах, то берётся значение, полученное из запроса к серверу или пустая строка, если ничего передано небыло. Все параметры, которые были использованы при построении значения переменной окружения убираются из общего списка параметров (чтобы они не попали в результирующую ссылку).

Остальные, не использованные в переменной окружения параметры (кроме параметров специального назначения) добавляются к результирующей ссылке используя строку "&amp;" или "&" (если используется параметр специального назначения 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');").
Image:Tipbox Icon.gif Последним элементом в этом массиве будет шаблон, с которого пользователь попал на текущий.

Данный массив храниться в сессии. Значение, переданное в данной переменной будет рассматриваться как команда к изменению содержания массива "opener_stack_<m_wid>" для текущего окна:

  • r (reset) - стереть массив (используется для построения ссылок для секций в дереве);
  • d (down) - добавить текущий шаблон в массив (используется при переходе на шаблон редактирования записи с шаблона списка записей);
  • u (up) - удалить последний шаблон из массива (используется при возвращении с шаблона редактирования записи на шаблон списка записей);
  • p (popup) - добавить текущий шаблон в массив и создать новый идентификатор окна (тоже самое, что "d", но только с поправкой на то, что форма редактирования будет открыта в новом всплывающем окне);
  • s (stay) - ничего не делать с массивом (значение по умолчанию).
m_wid (int) Идентификатор окна, который используется только для всплывающих окон (popups). Для основного окна значение данной переменной равно пустоте. Также идентификатор окна используется в формировании названия массива "opener_stack_<m_wid>", управляемого через значение переменной m_opener.