Возникла потребность написать простенький компонент фотогалереи, где нет ничего лишнего. Код component.php без ЧПУ такой:
[CODE]//sections - список альбомов
//section - альбом со списком фотографий
if(empty($_REQUEST["sid"]))
$componentPage = "sections";
else
$componentPage = "section";
if ($this->StartResultCache(36000000,$componentPage.$_REQUEST["sid"])) // кэширование для нужной страницы
{
if (CModule::IncludeModule("iblock")) {
$iblock_id = $arParams['IBLOCK_ID'];
if($componentPage == "sections") // вывод альбомов
{
$arFilter = array('ACTIVE'=>"Y",'IBLOCK_ID'=>$iblock_id);
$db_list = CIBlockSection::GetList(array('NAME'=>'ASC'), $arFilter, true, array("ID", "NAME", "PICTURE","DATE_CREATE"));
while($ar_result = $db_list->GetNext())
{
$arResult[] = array(
"ID" => $ar_result['ID'],
"NAME" => $ar_result['NAME'],
"ELEMENT_CNT" => $ar_result['ELEMENT_CNT'],
"IMG" => CFile::GetPath($ar_result['PICTURE']),
"DATE_CREATE" => $DB->FormatDate($ar_result['DATE_CREATE'], "DD.MM.YYYY HH:MI:SS", "DD.MM.YYYY"),
);
}
}
elseif($componentPage == "section") // вывод фотографий в альбоме
{
$arFilter = array('ACTIVE'=>"Y",'IBLOCK_ID'=>$iblock_id, SECTION_ID=>$_REQUEST["sid"]);
$db_list = CIBlockElement::GetList(Array(), $arFilter, false, Array("nPageSize"=>$arParams["ITEMS_LIMIT"]), array("ID", "NAME", "PREVIEW_PICTURE", "DETAIL_PICTURE"));
$arIBlockSection = GetIBlockSection($_REQUEST["sid"]);
while($ar_result = $db_list->GetNext())
{
$arResult[] = array(
"ID" => $ar_result['ID'],
"NAME" => $ar_result['NAME'],
"IMG" => CFile::GetPath($ar_result['PREVIEW_PICTURE']),
"IMG_DETAIL" => CFile::GetPath($ar_result['DETAIL_PICTURE']),
"NAME_SEC" => $arIBlockSection["NAME"],
);
}
}
}
$this->IncludeComponentTemplate($componentPage);
}[/CODE]
Т.е. просто формируются два массива результатов (для страницы со списком альбомов и со списком фотографий в альбоме).
Но вместо вот этого
[CODE]if(empty($_REQUEST["sid"]))
$componentPage = "sections";
else
$componentPage = "section";[/CODE]
хотелось бы добавить для компонента ЧПУ. Поэтому добавил в код компонента соответствующие методы (пока все параметры задал вручную):
[CODE]$arDefaultUrlTemplates404 = array(
"sections" => "",
"section" => "sid=#SECTION_ID#",
);
$arParams["SEF_URL_TEMPLATES"] = array(
"sections" => "",
"section" => "sid=#SECTION_ID#",
);
$arParams["SEF_FOLDER"] = "#SITE_DIR#/photo-gallery/";
$arDefaultVariableAliases404 = array(
"SECTION_ID" => "sid",
);
$arDefaultVariableAliases = array(
"SECTION_ID" => "sid",
);
$arComponentVariables = array(
"SECTION_ID",
"sid",
);
$arVariables = array();
$arUrlTemplates = CComponentEngine::MakeComponentUrlTemplates($arDefaultUrlTemplates404, $arParams["SEF_URL_TEMPLATES"]);
$arVariableAliases = CComponentEngine::MakeComponentVariableAliases($arDefaultVariableAliases404, $arParams["VARIABLE_ALIASES"]);
$componentPage = CComponentEngine::ParseComponentPath(
$arParams["SEF_FOLDER"],
$arUrlTemplates,
$arVariables
);[/CODE]
В результате в переменной $componentPage содержится значение sections как для списка разделов, так и для выбранного раздела. Получается что я неправильно задаю шаблон для раздела "section" => "sid=#SECTION_ID#"
Не могу пока сам разобраться с проблемой. Может кто сможет подсказать как сформировать правильно шаблон для раздела?