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

Фотогалерея и новости: где взять SECTION_ID?

00 голосов
3
Есть блоки новостей и фотогалерей.
На каждую новость в фотогалерее создается раздел, элементы которого - отдельные фотографии.

В новостях добавил привязку к разделу. Захожу в конкретную новость и привязываю нужную фотогалерею.
Код свойства: PHOTO_GALLERY_ID.

Для вывода фотографий конкретной новости, а не всего раздела, нужен SECTION_ID.
По совету http://dev.1c-bitrix.ru/community/forums/messages/forum6/topic6177/message37536/#message37536 сделал передачу глобального параметра.

Вся проблема в том, что $arResult["IBLOCK_SECTION_ID"] пустой (распечатывал массив:[IBLOCK_SECTION_ID] =>).

В теории можно запросом к базе получить SECTION_ID фотогалереи для новости по свойству PHOTO_GALLERY_ID, но должен быть человеческий способ сделать это средствами битрикса.

Возможно, я что-то забыл сделать, чтобы код прописался в IBLOCK_SECTION_ID для раздела фотогалереи (альбом).
Для элементов альбома в этом поле пишется код раздела, а для новости, по идее, должен быть записан код альбома.

Каким образом получить код фотогалереи, привязанной к новости?
спросил 27 Июль, 13 от Casperito (160 баллов)

3 Ответы

00 голосов
А может у данного элемента просто нет раздела? => IBLOCK_SECTION_ID не заполняется.
ответил 27 Июль, 13 от LEDOKOL (740 баллов)
00 голосов
Новости соответствует раздел в фотогалереях.

Получилось взять код фотогалереи таким образом:
1. result_modifier.php:
Код
<?
   $db_props = CIBlockElement::GetProperty($arResult["IBLOCK_ID"], $arResult["ID"], Array(), Array("CODE"=>"PHOTO_GALLERY_ID"));
   if($ar_props = $db_props->Fetch()){
      $GLOBALS["PHOTO_GALLERY_ID"] = IntVal($ar_props["VALUE"]);
   }
?>
2. detail.php:
Код
$APPLICATION->IncludeComponent(
   "bitrix:photogallery.detail.list",
   "photoGallary",
   Array(
      "IBLOCK_TYPE" => "photo",
      "IBLOCK_ID" => "4",
      "BEHAVIOUR" => "SIMPLE",
      "SECTION_ID" => $GLOBALS["PHOTO_GALLERY_ID"],
 ...
В итоге фотогалереи нормально выводятся в новостях.

Есть только один косяк: все работает, если залогинен. Незалогиненным пользователям отображаются все фотографии фотогалерей, т.е. не приходит код фотогалереи, привязанной к новости.
ответил 23 Сен, 13 от Casperito (160 баллов)
00 голосов
Получилось сделать таким образом:
1. Снес созданный result_modifier.php.
2. В шаблоне detail.php:
Код
$PHOTO_GALLERY_ID=0;
$res=CIBlockElement::GetByID($_REQUEST["ID"]);
if($arResult = $res->GetNext())
{
   $db_props=CIBlockElement::GetProperty($arResult["IBLOCK_ID"], $arResult["ID"], Array(), Array("CODE"=>"PHOTO_GALLERY_ID"));
   if($ar_props=$db_props->Fetch()){
      $PHOTO_GALLERY_ID=IntVal($ar_props["VALUE"]);
   }
}
...
$APPLICATION->IncludeComponent("bitrix:photogallery.detail.list", "photoGallary", array(
   "IBLOCK_TYPE" => "photo",
   "IBLOCK_ID" => "4",
   "BEHAVIOUR" => "SIMPLE",
   "SECTION_ID" => $PHOTO_GALLERY_ID,
...
3. В шаблоне фотогалереи дополнил условие, чтобы в случае отсутствия привязки не выводились все фото из разделов:
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die(); ?>
   <? if (!empty($arResult) && $arResult["SECTION"] && $arResult["SECTION"]["ID"]): ?>
<? $i=0; ?>
... 

В итоге фотогалереи выводятся правильно в зависимости от привязки к новостям.
ответил 22 Дек, 13 от Casperito (160 баллов)

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

0 голосов
1 ответ
спросил 08 Окт, 15 от аноним
+1 голос
1 ответ
0 голосов
2 ответов
0 голосов
1 ответ
спросил 27 Сен, 14 от NskRonin (120 баллов)