Вопрос вот в чем: Имеются соответственно файлы .parameters.php
Код |
---|
//формирование массива с параметрами
$arComponentParameters = array(
"GROUPS" => array(
"REVIEW_SETTINGS" => array(
"SORT" => 140,
"NAME" => GetMessage("T_IBLOCK_DESC_REVIEW_SETTINGS"),
),
),
"PARAMETERS" => array(
"VARIABLE_ALIASES" => Array(
//"SECTION_ID" => Array("NAME" => GetMessage("VACANCIES_SECTION_ID_DESC")),
"ELEMENT_ID" => Array("NAME" => GetMessage("VACANCIES_ELEMENT_ID_DESC")),
),
//настройка ЧПУ
"SEF_MODE" => Array(
"vacancies" => array(
"NAME" => GetMessage("T_IBLOCK_SEF_PAGE_VACANCIES"),
"DEFAULT" => "",
"VARIABLES" => array(),
),
"vacancy" => array(
"NAME" => GetMessage("T_IBLOCK_SEF_PAGE_VACANCIES_DETAIL"),
"DEFAULT" => "#VACANT_ID#/",
"VARIABLES" => array("VACANT_ID"),
),
"resume" => array(
"NAME" => GetMessage("T_IBLOCK_SEF_PAGE_REZUME"),
"DEFAULT" => "#VACANT_ID#/resume/",
"VARIABLES" => array(),
),
), и т.д. |
Затем файл component.php
Код |
---|
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
/*************************************************************************
Processing of received parameters
*************************************************************************/
if(!isset($arParams["CACHE_TIME"]))
$arParams["CACHE_TIME"] = 180;
if(!is_array($arParams["IBLOCK_TYPE"]))
$arParams["IBLOCK_TYPE"] = trim($arParams["IBLOCK_TYPE"]);
if(!is_array($arParams["IBLOCK_ID"]))
$arParams['IBLOCK_ID'] = intval($arParams["IBLOCK_ID"]);
if(!is_array($arParams["USER_PROPERTY"]))
$arParams['USER_PROPERTY'] = intval($arParams['USER_PROPERTY']);
//задаем шаблоны страниц по умолчанию
if(!is_array($arParams["FORM_ID"]))
$arParams['FORM_ID'] = intval($arParams['FORM_ID']);
//задаем шаблоны страниц по умолчанию
$arDefaultUrlTemplates404 = array(
"vacancies" => "",
"vacancy" => "#VACANT_ID#/",
"resume" => "#VACANT_ID#/resume/",
);
//альтернативные шаблоны страниц
//dump($arParams);
$arDefaultVariableAliases404 = array("vacancy" => array("ELEMENT_ID" => "VACANT_ID"));
$arDefaultVariableAliases = array("ELEMENT_ID" => "VACANT_ID");
//задаем переменные по умолчанию
$arComponentVariables = array(
"VACANT_ID",
"ELEMENT_ID",
"FORM_ID"
);
//проверяем в каком режиме ЧПУ находимся
if($arParams["SEF_MODE"] == "Y")
{// Для ЧПУ режима
$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(!$componentPage)
{
$componentPage = "vacancies";
}
// Теперь у нас установлен код шаблона пути и переменные,
// которые пришли в виде пути к запрошеной
// странице, записаны в $arVariables
CComponentEngine::InitComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, $arVariables);
// Теперь на основании кода шаблона пути $componentPage
// и истинных переменных $arVariables
// можно определить, какую страницу шаблона компонента нужно показать
if ($componentPage == "vacancy")
$componentPage = "vacancy";
elseif ($componentPage == "resume" )
$componentPage = "resume";
else
$componentPage = "vacancies";
$arResult = array(
"FOLDER" => $arParams["SEF_FOLDER"],
"URL_TEMPLATES" => $arUrlTemplates,
"VARIABLES" => $arVariables,
"ALIASES" => $arVariableAliases,
);
}else
{
// В этой переменной будем накапливать значения истинных переменных
$arVariables = array();
// Соберем массив псевдонимов переменных из массива псевдонимов
// "по-умолчанию" $arDefaultVariableAliases
// и массива, переданого во входных параметрах $arParams["VARIABLE_ALIASES"]
$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases, $arParams["VARIABLE_ALIASES"]);
// Восстановим переменные, которые пришли в параметрах запроса
// и допишем их в $arVariables
CComponentEngine::InitComponentVariables(false, $arComponentVariables, $arVariableAliases, $arVariables);
// Теперь на основании истинных переменных $arVariables
// можно определить, какую страницу шаблона компонента нужно показать
$componentPage = "";
if(isset($arVariables["VACANT_ID"]) && intval($arVariables["VACANT_ID"]) > 0)
$componentPage = "vacancy";
elseif(isset($arVariables["ELEMENT_ID"]) && strlen($arVariables["ELEMENT_ID"]) > 0)
$componentPage = "vacancy";
elseif(isset($arVariables["FORM_ID"]) && intval($arVariables["FORM_ID"]) > 0 &&
(isset($arVariables["VACANT_ID"]) && intval($arVariables["VACANT_ID"]) > 0) ||
(isset($arVariables["ELEMENT_ID"]) && strlen($arVariables["ELEMENT_ID"]) > 0))
$componentPage = "resume";
else
$componentPage = "vacancies";
$arResult = array(
"FOLDER" => "",
"URL_TEMPLATES" => array(
"vacancies" => htmlspecialcharsbx($APPLICATION->GetCurPage()),
"vacancy" => htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arVariableAliases["VACANT_ID"]."=#VACANT_ID#"),
"resume" => htmlspecialcharsbx($APPLICATION->GetCurPage()."?".$arVariableAliases["VACANT_ID"]."=#VACANT_ID#&".$arVariableAliases["FORM_ID"]."=#FORM_ID#"),
),
"VARIABLES" => $arVariables,
);
}
$this->IncludeComponentTemplate($componentPage);
?> |
Структура компонента следующая: список_вакансий->просмотр_детальной_вакансии->форма_заполнения_резюме;
То есть ссылки эти должны осуществляться по шаблону. А в $arResult["DETAIL_URL"] вместо ссылки сам этот шаблон. Вроде все стараюсь делать, как и в стандартных компонентах, но не вышло.
И не знаю, как получается, что в стандартных компонентах, если выключить режим ЧПУ, то в адресной строке пишется ../?ELEMENT_ID=[id]/ а в собственном такое не подставляется.