Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

не срабатывает метод CComponentEngine::ParseComponentPath

00 голосов
0
Возникла потребность написать простенький компонент фотогалереи, где нет ничего лишнего. Код component.php без ЧПУ такой:
Код
//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);
}


Т.е. просто формируются два массива результатов (для страницы со списком альбомов и со списком фотографий в альбоме).

Но вместо вот этого
Код
if(empty($_REQUEST["sid"]))
   $componentPage = "sections";
else
   $componentPage = "section";


хотелось бы добавить для компонента ЧПУ. Поэтому добавил в код компонента соответствующие методы (пока все параметры задал вручную):
Код
$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
);


В результате в переменной $componentPage содержится значение sections как для списка разделов, так и для выбранного раздела. Получается что я неправильно задаю шаблон для раздела "section" => "sid=#SECTION_ID#"
Не могу пока сам разобраться с проблемой. Может кто сможет подсказать как сформировать правильно шаблон для раздела?
спросил 21 Сен, 13 от Hohat (720 баллов)

Ваш ответ

Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.

Похожие вопросы

0 голосов
2 ответов
спросил 16 Апр, 14 от Exumer (360 баллов)
0 голосов
5 ответов
0 голосов
4 ответов
0 голосов
7 ответов
спросил 06 Авг, 13 от FoCuS (360 баллов)