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




bitrix:catalog.section.list и количество элементов выводимых в одной строке таблицы

0 голосов
Добрый день, подскажите пожалуйста, возможно ли в компоненте bitrix:catalog.section.list указать параметр "количество элементов выводимых в одной строке таблицы". Необходимо в ряд выводить по 6 разделов.
спросил 21 Июль, 13 от rg (440 баллов)

3 Ответы

0 голосов
Если у вас в каталоге используется только один уровень, в принципе, можно. Создаете в шаблоне файл .parameters.php типа:
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<?
$arTemplateParameters = array(
   "LINE_ELEMENT_COUNT" => array(
      "NAME" => "Количество элементов в одной строке таблицы",
      "TYPE" => "STRING",
      "DEFAULT" => "6",
   )
);?>

NAME лучше через getMessage вынести
Дальше берете дефолтный шаблон компонента catalog.section и меняете ITEMS на SECTIONS, удалив все ненужное. В result_modifier.php шаблона лучше поставить проверку на обязательность значения
Примерный код такой будет (не проверял):
Код
<?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();?>
<div class="catalog-section-list">
<table cellpadding="0" cellspacing="0" border="0">
      <?foreach($arResult["SECTIONS"] as $cell=>$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($cell%$arParams["LINE_ELEMENT_COUNT"] == 0):?>
      <tr>
      <?endif;?>
      <td valign="top" width="<?=round(100/$arParams["LINE_ELEMENT_COUNT"])?>%" id="<?=$this->GetEditAreaId($arSection['ID']);?>">
         <a href="<?=$arSection["SECTION_PAGE_URL"]?>"><?=$arSection["NAME"]?><?if($arParams["COUNT_ELEMENTS"]):?> (<?=$arSection["ELEMENT_CNT"]?>)<?endif;?></a>
      </td>
      <?$cell++;
      if($cell%$arParams["LINE_ELEMENT_COUNT"] == 0):?>
         </tr>
      <?endif?>

      <?endforeach;?>

      <?if($cell%$arParams["LINE_ELEMENT_COUNT"] != 0):?>
         <?while(($cell++)%$arParams["LINE_ELEMENT_COUNT"] != 0):?>
            <td> </td>
         <?endwhile;?>
         </tr>
      <?endif?>
</table>
</div>
ответил 21 Июль, 13 от unik (2,560 баллов)
0 голосов
в каталоге не один уровень надо. Что-то похожее я видел уже, в компоненте catalog TOP вроде. Спасибо за подсказку, сейчас попробую что-нибудь извлечь из вашего поста.
ответил 13 Сен, 13 от rg (440 баллов)
0 голосов
в общем поступил следующим образом. разместил bitrix:catalog.section.list , создал файл .parameters.php с вышеописанным кодом. Взял из компонента bitrix:catalog.top файл result_modifier.php, скопировал его в папку к компоненту bitrix:catalog.section.list, ну и отредактировал сам компонент, как описано выше. Спасибо Андрей :)
ответил 11 Дек, 13 от rg (440 баллов)

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

0 голосов
4 ответов
спросил 21 Янв, 14 от eff (160 баллов)
0 голосов
4 ответов
спросил 24 Окт, 13 от Plare666 (720 баллов)
0 голосов
5 ответов
спросил 25 Янв, 13 от LEKBY (160 баллов)
0 голосов
1 ответ
спросил 01 Фев, 14 от LaoMao (100 баллов)