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

bitrix:catalog.section.list вместе с элементами

00 голосов
4
Нужно в компоненте bitrix:catalog.section.list в одном дереве вывести разделы с элементами. Сделал так

Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div class="catalog-section-list">
<ul>
<?
$CURRENT_DEPTH=$arResult["SECTION"]["DEPTH_LEVEL"]+1;
foreach($arResult["SECTIONS"] as $arSection):
   $this->AddEditAction($arSection['ID'], $arSection['EDIT_LINK'], CIBlock::GetArrayByID($arSection["IBLOCK_ID"], "SECTION_EDIT"));
   $this->AddDeleteAction($arSection['ID'], $arSection['DELETE_LINK'], CIBlock::GetArrayByID($arSection["IBLOCK_ID"], "SECTION_DELETE"), array("CONFIRM" => GetMessage('CT_BCSL_ELEMENT_DELETE_CONFIRM')));
   if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"])
      echo "<ul>";
   elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"])
      echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]);
   $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"];
?>

  <li id="<?=$this->GetEditAreaId($arSection['ID']);?>"><a href="<?=$arSection["SECTION_PAGE_URL"]?>"><strong><?=$arSection["NAME"]?>

         <?if($arParams["COUNT_ELEMENTS"]):?>&nbsp;(<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></strong></a></li>
  <?
   echo "<ul>";
if(CModule::IncludeModule("iblock"))
{

   $items = GetIBlockElementList(16, $arSection["ID"], Array("SORT"=>"date"), 100);
   while($arItem = $items->GetNext())
   {

  
              echo   '<li><a href="'.$arItem["DETAIL_PAGE_URL"].'">'.$arItem["NAME"].'</li>';
   
       
   }

}  
echo "</ul>";
?>
   
<?endforeach?>

</ul>
</div>



Но есть недостаток - когда передается ={$_REQUEST["SECTION_ID"]} в разделах, в которых нет вложенных разделов, элементы не выводятся.

Подскажите, пожалуйста, как сделать так, чтобы элементы выводились на любом уровне дерева, в том числе на последнем (когда в разделе есть только элементы)?
спросил 21 Янв, 14 от eff (160 баллов)

4 Ответы

00 голосов
Bitrix, I need help :)
ответил 13 Май, 14 от eff (160 баллов)
00 голосов
возможно вам поможет bitrix:catalog.sections.top
ответил 09 Сен, 14 от NitroGeN (2,840 баллов)
00 голосов
Forok, ты нашел решение? У меня та же проблема. Нужно сделать вывод текущего раздела с подразделами и элементами, в котором находится пользователь.
ответил 16 Янв, 15 от CePaqpuMa (100 баллов)
00 голосов
Проблема решается таким образом:

Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div class="catalog-section-list">
<ul>
<?
$CURRENT_DEPTH=$arResult["SECTION"]["DEPTH_LEVEL"]+1;
foreach($arResult["SECTIONS"] as $arSection):
    $this->AddEditAction($arSection['ID'], $arSection['EDIT_LINK'], CIBlock::GetArrayByID($arSection["IBLOCK_ID"], "SECTION_EDIT"));
    $this->AddDeleteAction($arSection['ID'], $arSection['DELETE_LINK'], CIBlock::GetArrayByID($arSection["IBLOCK_ID"], "SECTION_DELETE"), array("CONFIRM" => GetMessage('CT_BCSL_ELEMENT_DELETE_CONFIRM')));
    if($CURRENT_DEPTH<$arSection["DEPTH_LEVEL"])
        echo "<ul>";
    elseif($CURRENT_DEPTH>$arSection["DEPTH_LEVEL"])
        echo str_repeat("</ul>", $CURRENT_DEPTH - $arSection["DEPTH_LEVEL"]);
    $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"];
?>
    <li id="<?=$this->GetEditAreaId($arSection['ID']);?>"><a href="<?=$arSection["SECTION_PAGE_URL"]?>"><?=$arSection["NAME"]?><?if($arParams["COUNT_ELEMENTS"]):?>&nbsp;(<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></a></li>

<? 
   echo "<ul>"; 
if(CModule::IncludeModule("iblock")) 
{ 

   $items = GetIBlockElementList(4, $arSection["ID"], Array("SORT"=>"date"), 100); 
   while($arItem = $items->GetNext()) 
   { 

   
              echo   '<li><a href="'.$arItem["DETAIL_PAGE_URL"].'">'.$arItem["NAME"].'</li>'; 
    
       
   } 

}   
echo "</ul>"; 
?> 

<?endforeach?>
</ul>

<? 
   echo "<ul>"; 
if(CModule::IncludeModule("iblock")) 
{ 

   $items = GetIBlockElementList(4, $arResult["SECTION"]["ID"], Array("SORT"=>"date"), 100); 
   while($arItem = $items->GetNext()) 
   { 

   
              echo   '<li><a href="'.$arItem["DETAIL_PAGE_URL"].'">'.$arItem["NAME"].'</li>'; 
    
       
   } 

}   
echo "</ul>"; 
?> 

</div>


То есть нужно просто повторить без цикла для $arResult["SECTION"]["ID"] тоже, что сделано для $arSection["ID"].
ответил 02 Май, 15 от CePaqpuMa (100 баллов)

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

0 голосов
5 ответов
спросил 25 Янв, 13 от LEKBY (160 баллов)
0 голосов
4 ответов
спросил 24 Окт, 13 от Plare666 (720 баллов)
0 голосов
3 ответов
0 голосов
2 ответов