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

Узнать SECTION_ID по ID элемента

00 голосов
2
Столкнулся с такой проблемой
после изменения структуры сайта пришлось делать редирект на новые папки/адреса
старая ссылка выглядела вот так
http://мой_сайт/catalog/programs/detail.php?ID=5869
новая ссылка выглядит следующим образом
http://мой_сайт/e-store/programs/594/5869 , где 594 SECTION_ID а 5869 ID элемента
выход один редирект , так как старые ссылки в индексе у поисковиков.
Но проблема в том что в старой ссылке передается всего один параметр ID , а SECTION_ID не известен и с помощью htacess такой редирект как я понял осуществить не удасться.
ведь в новой ссылке уже 2 параметра :(

Решел пойти другим путем и установить PHP редирект со страницы сайта с компонентом детального просмотра в надежде что там легко удастся получить SECTION_ID.
Получилось пока следующее
Код
<?
Header( "HTTP/1.1 301 Moved Permanently" );
$section = КАК в эту переменную записать SECTON_ID текущего элемента?????
Header("Location: http://мой_сайт/e-store/programs/$section/$ID"); //id элемента получается а вот раздела нет.
?>

<?$APPLICATION->IncludeFile("iblock/catalog/element.php", Array(
   'IBLOCK_TYPE'   =>   'catalog',   // Тип инфо-блока
   'IBLOCK_ID'   =>   '32',   // Инфо-блок
   'ELEMENT_ID'   =>   $_REQUEST["ID"],   // ID элемента
   'SECTION_URL'   =>   '/catalog/programs/section.php?', // URL ведущий на страницу с содержимым раздела
   'LINK_IBLOCK_TYPE'   =>   '',   // Тип инфо-блока, элементы которого связаны с текущим элементом
   'LINK_IBLOCK_ID'   =>   '',   // ID инфо-блока, элементы которого связаны с текущим элементом
   'LINK_PROPERTY_SID'   =>   '',   // Свойство в котором хранится связь
   'LINK_ELEMENTS_URL'   =>   '/catalog/accessory/byphone.php?',   // URL на страницу где будут показан список связанных элементов
   'arrFIELD_CODE'   =>   Array('NAME','PREVIEW_TEXT','DETAIL_TEXT','DETAIL_PICTURE'),   // Поля
   'arrPROPERTY_CODE'   =>   '',   // Свойства
   'CACHE_TIME'   =>   '0',   // Время кэширования (сек.)
   'DISPLAY_PANEL'   =>   'Y',   // Добавлять в админ. панель кнопки для данного компонента
   ));?>

<?$APPLICATION->IncludeFile("catalog/price_table.php", Array(
   'PRODUCT_ID'   =>   $GLOBALS["ID"],   // Код товара
   'PRICE_TYPE_OLD'   =>   '1',   // Тип "старой" цены
   'PRICE_TYPE_NEW'   =>   '1',   // Тип "новой" цены
   'BASKET_PAGE'   =>   '/personal/cart',   // Страница корзины
   'CACHE_TIME'   =>   '600',   // Время кэширования данных (секунд)
   ));?>


И опять наткнулся на туже проблему нет SECTION_ID :(
перепробовал несколько вариантов , пытался смотреть в коде компонентов , но наверное просто не понял как там это реализуется. :(
Очень был бы рад хоть какой нибудь подсказке как всетаки записать в мою переменную ID раздела для элемента
Заранее спасибо.
спросил 08 Апр, 14 от Gad (160 баллов)

2 Ответы

00 голосов
ИМХО извращение.
Раньше ссылка выводила ELEMENT_ID , в новой добавилась еще SECTION_ID
Теперь маленький анализ.
Компонент (комплексный в том числе) новостей bitrix.news - выводит содержимое ИБ которое может состоять из элементов и разделов, но при этом разделы не выводит считая что разделы созданы чтобы новости группировать.
Компонент bitrix.catalog - выводит содержимое ИБ , выводит в структурированом виде и разделы и элементы.
Подитожем.
Если у тебя вот тут: http://мой_сайт/e-store/programs/ - каталог НО! при этом не интернет магазин, для его вывода можно воспользоватся комплексным компонентом bitrix.news вместо bitrix.catalog
тогда твоя проблема с сылками легко решаема.
Вариант второй если все таки настаиваешь на своем:
Код
<?

$res = CIBlockElement::GetByID($_GET["PID"]);// $_GET["PID"] - ID элемента.
if($ar_res = $res->GetNext())
  echo $ar_res['IBLOCK_SECTION_ID']; /*ID группы. Если не задан, то элемент не привязан к группе. Если элемент привязан к нескольким группам, то в этом поле ID одной из групп.*/
?>
ответил 29 Окт, 14 от Grimmi (2,560 баллов)
00 голосов
не знаю толи или нет, но я так делаю

Код
   function GetElementSectionsID($ID)
   {
      $res   =   CIBlockElement::GetByID($ID);
      $ar_res   =   $res->GetNext();
      return($ar_res['IBLOCK_SECTION_ID']);
   }
ответил 27 Фев, 15 от WETERa (800 баллов)

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

0 голосов
2 ответов
0 голосов
6 ответов
0 голосов
7 ответов
спросил 30 Май, 13 от Bambocho (300 баллов)
0 голосов
3 ответов
0 голосов
2 ответов