Поставлена следующая задача:
сделать комплексный компонент, объединяющий 2 простых (список пользователей и детальная информация о пользователе), с шаблонами ссылок /users/ и /users/#USER_ID#/. При переходе на /users/#USER_ID#/, если пользователя с таким ID не существует, должен ставиться статус 404.
Я сделал 2 компонента отдельно, работают. А вот с комплексным завал, не могу заставить работать :(
Вот код компонента:
[CODE] if(!defined('B_PROLOG_INCLUDED') || B_PROLOG_INCLUDED!==true) die();
$arComponentVariables = array('list', 'user');
$arDefaultUrlTemplates404 = array('user' => 'user',
'list' => 'list');
$arDefaultVariableAliases404 = array();
$arDefaultVariableAliases = array();
if ($arParams['SEF_MODE'] == 'Y')
{
$arVariables = array();
$arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams["SEF_URL_TEMPLATES"]);
$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, $arParams["VARIABLE_ALIASES"]);
$engine = new CComponentEngine($this);
$componentPage = $engine->guessComponentPath(
$arParams["SEF_FOLDER"],
$arUrlTemplates,
$arVariables
);
CComponentEngine::InitComponentVariables($componentPage, $arComponentVariables, $arVariableAliases, $arVariables);
$arResult = array(
"FOLDER" => $arParams["SEF_FOLDER"],
"URL_TEMPLATES" => $arUrlTemplates,
"VARIABLES" => $arVariables,
"ALIASES" => $arVariableAliases
);
$arResult['PATH_TO_LIST'] = $arParams['SEF_FOLDER'].$arParams['SEF_URL_TEMPLATES']['list'];
$arResult['PATH_TO_USER'] = $arParams['SEF_FOLDER'].$arParams['SEF_URL_TEMPLATES']['user'];
}
else
{
$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases, $arParams['VARIABLE_ALIASES']);
CComponentEngine::InitComponentVariables(false, $arComponentVariables, $arVariableAliases, $arVariables);
if ($arVariables['user']!= '')
$componentPage = 'user';
else
$componentPage = 'list';
$arResult = array('VARIABLES' => $arVariables, 'ALIASES' => $arVariableAliases);
$arVarAliaces = $arParams['VARIABLE_ALIASES'];
$arResult['PATH_TO_LIST'] = $APPLICATION->GetCurPageParam($arParams['VARIABLE_ALIASES']['list'], $arForDel);
$arResult['PATH_TO_USER'] = $APPLICATION->GetCurPageParam($arParams['VARIABLE_ALIASES']['user'], $arForDel);
}
$this->IncludeComponentTemplate($componentPage);
?> [/CODE]Вот файл параметров (.parameters.php):
[CODE] <?
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true) die();
$arComponentParameters = array(
"GROUPS" => array(
"TEST" => array(
"NAME" => "TEST GROUPS",
),
),
"PARAMETERS" => array(
"VARIABLE_ALIASES" => Array(
"SECTION_ID" => "Идентификатор раздела",
"USER_ID" => "Идентификатор пользователя",
),
"SEF_MODE" => Array(
"folder_user" => array(
"NAME" => "Папка users",
"DEFAULT" => "/users/",
"VARIABLES" => array(),
),
"user_id" => array(
"NAME" => "ID пользователя",
"DEFAULT" => "#USER_ID#/",
"VARIABLES" => array(),
),
),
),
);
?>
[/CODE]также созданы файлы list.php, user.php
Вот сам компонент: [url]https://drive.google.com/file/d/0BxnkagfLXw7PVVNaLS1LNjg4M0U/edit?usp=sharing[/url]
На данный момент, если ЧПУ отключен, то отображается list.php, если включен, то Cannot find '.default' template with page ''
Также не могу понять, как сформировать ссылку на детальное описание пользователя, если рассмотреть компонент новости, то там href="<?=$arItem["DETAIL_PAGE_URL"]?>, но где формируется этот адрес я не нашел, где формируются переменные вида #USER_ID#?
Для компонента список новостей новости хранятся в инфоблоке, может и к моему комплексному компоненту должен прикручиваться инфоблок?
Если кто-нибудь поможет хоть частично разобраться буду благодарен :)