Документация для разработчиков
Темная тема

InitComponentVariables

Описание и параметры

void
InitComponentVariables(
 string componentPage ,
 array arComponentVariables ,
 array arVariableAliases ,
 array & arVariables
);

Метод служит для поддержки псевдонимов переменных в комплексных компонентах (как в ЧПУ режиме, так и в обычном). Метод восстанавливает истинные переменные из $_REQUEST на основании их псевдонимов. Статический метод.

Параметры

ПараметрОписание
componentPage Для ЧПУ режима: код шаблона пути, который был получен методом CComponentEngine::ParseComponentPath. Если компонент работает не в ЧПУ режиме, этот параметр должен быть равен False.
arComponentVariables Массив имен переменных, которые компонент может получать из запроса. Этот параметр имеет вид array("имя переменной 1", "имя переменной 2", ...).
arVariableAliases Массив псевдонимов переменных.

Для режима ЧПУ имеет формат:
array(
    "код шаблона пути 1" => array(
        "название переменной 11" => "псевдоним переменной 11",
        "название переменной 12" => "псевдоним переменной 12",
        * * *
    ), 
    "код шаблона пути 2" => array(
        "название переменной 21" => "псевдоним переменной 21",
        "название переменной 22" => "псевдоним переменной 22",
        * * *
    ),
    * * *
)    
Для не ЧПУ режима:
array(
    "название переменной" => "псевдоним переменной",
    * * *
)    
arVariables Переменная, в которой возвращаются восстановленные переменные.

Пример

// Для ЧПУ режима

// В этой переменной будем накапливать значения истинных переменных
$arVariables = array();

// Соберем массив шаблонов путей из массива шаблонов путей 
// "по-умолчанию" $arDefaultUrlTemplates404
// и массива, переданного во входных параметрах $arParams["SEF_URL_TEMPLATES"]
$arUrlTemplates = 
    CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, 
                                                $arParams["SEF_URL_TEMPLATES"]);

// Соберем массив псевдонимов переменных из массива псевдонимов
// "по-умолчанию" $arDefaultVariableAliases404
// и массива, переданного во входных параметрах $arParams["VARIABLE_ALIASES"]
$arVariableAliases = 
    CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, 
                                                   $arParams["VARIABLE_ALIASES"]);

// Определим код шаблона, которому соответствует текущая запрошенная страница
$componentPage = CComponentEngine::ParseComponentPath(
    $arParams["SEF_FOLDER"],
    $arUrlTemplates,
    $arVariables
);

// Если запрошенная страница не соответствует ни одному шаблону, 
// то установим явно что показывать
if (StrLen($componentPage) <= 0)
    $componentPage = "list";

// Теперь у нас установлен код шаблона пути и переменные, 
// которые пришли в виде пути к запрошенной 
// странице, записаны в $arVariables

// Восстановим переменные, которые пришли в параметрах запроса 
// и допишем их в $arVariables
CComponentEngine::InitComponentVariables($componentPage, 
                                         $arComponentVariables,
                                         $arVariableAliases,
                                         $arVariables);

// Теперь на основании кода шаблона пути $componentPage 
// и истинных переменных $arVariables
// можно определить, какую страницу шаблона компонента нужно показать

if ($componentPage == "element")
    $componentPage = "element";
elseif ($componentPage == "section1" || $componentPage == "section2")
    $componentPage = "section";
else
    $componentPage = "list";

$arResult = [
    'FOLDER' => $SEF_FOLDER,
    'URL_TEMPLATES' => $arUrlTemplates,
    'VARIABLES' => $arVariables,
    'ALIASES' => $arVariableAliases,
];
$this->IncludeComponentTemplate($componentPage);
);
// Для не ЧПУ режима

// В этой переменной будем накапливать значения истинных переменных
$arVariables = array();

// Соберем массив псевдонимов переменных из массива псевдонимов
// "по-умолчанию" $arDefaultVariableAliases
// и массива, переданного во входных параметрах $arParams["VARIABLE_ALIASES"]
$arVariableAliases = 
    CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases, 
                                                   $arParams["VARIABLE_ALIASES"]);

// Восстановим переменные, которые пришли в параметрах запроса 
// и допишем их в $arVariables
CComponentEngine::InitComponentVariables(False, $arComponentVariables, 
                                         $arVariableAliases, $arVariables);

// Теперь на основании истинных переменных $arVariables
// можно определить, какую страницу шаблона компонента нужно показать

$componentPage = "";
if (IntVal($arVariables["ELEMENT_ID"]) > 0)
    $componentPage = "element";
elseif (IntVal($arVariables["IBLOCK_ID"]) > 0 || 
        IntVal($arVariables["SECTION"]) > 0)
    $componentPage = "section";
else
    $componentPage = "list";

$this->IncludeComponentTemplate(
    array(
        "VARIABLES" => $arVariables,
        "ALIASES" => $arVariableAliases
    ),
    $componentPage
);


Пользовательские комментарии

Мы будем рады, если разработчики добавят свои комментарии по практическому использованию методов системы.

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
© «Битрикс», 2001-2020, «1С-Битрикс», 2020
Наверх