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

Кастомизация комплексного каталога, или section.list или section?

00 голосов
7
Добрый день!
Вопрос следующий, точнее несколько вопросов:
1) нужно что бы на основной странице каталога выводились только основные разделы
2) при переходе в подраздел выводились только подразделы (глубина вложености может быть равна 5) и т.д. для остальных подразделов.
3) конечным выводом собсно дожен быть товар (или товары).
4) с помощью какого компонента это сделать, точнее какой из них лучше подойдет для кастомизации?
5) какую переменную в кастомизации использовать за уникальное значение по которому можно сравнить разделы каталога?
Вобщем поможите чем "можите" люди добрые smile:)
спросил 12 Июль, 13 от Pika (340 баллов)

7 Ответы

00 голосов
Ну или хотя бы подскажите как вывести определенные элементы каталога определенной вложенности, на какой-либо странице.
ответил 12 Июль, 13 от Pika (340 баллов)
00 голосов
Тема очень актуальна.
Я пробовал менять как отдельный catalog.sectio.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')));
   $CURRENT_DEPTH = $arSection["DEPTH_LEVEL"];
   if($arSection["DEPTH_LEVEL"] == 3) {
      echo '<li id="'.$this->GetEditAreaId($arSection['ID']).'"><img src="'.$arSection["PICTURE"]["SRC"].'"><a href="'.$arSection["SECTION_PAGE_URL"].'">'.$arSection["NAME"].'</a></li>';
   }
}
?>
</ul>
</div>


в каждой копии шаблона компонента менял:
Код
if($arSection["DEPTH_LEVEL"] == 3)
на 1, 2, 3 для вложености, но ведь выводит то ВСЕ подразделы, а не те которые относятся к родителю, так как вывести те что для родителя то?
либо подскажите как тоже самое сделать для комплексного?
его я тоже пробовал кастомизировать, но удалось лишь вывести до второго уровня, и то, с тем огрехом что для определения родителя, вместо положеного:

Код
 if(isset($arSection['ID']) && $arSection['ID'] == $_GET['ID'])
приходилось вручную указывать айдишник:

Код
 if(isset($arSection['ID']) && $arSection['ID'] == 28)

излазил абсолютно все темы форума, какие-то были конечно близки к моей теме, но как всегда только лишь обрывки и куски, а дальше додумывайся сам...
ответил 30 Авг, 13 от Pika (340 баллов)
00 голосов
Логика такая: мы зашли в каталог - вывели только разделы первого уровня. Прогли в один из разделов, если он имеет в себе разделы, то вывели только их, элементы не выводит. Прошли еще ниже (тыкнули по одному из разделов), если в нем есть разделы, то опять же выводим их (елементы не выводятся), если их нет, то выводим элементы и т.д.Какой шаблон должен быть - не помню.
Да и логика важнее, чем верстка. Надеюсь ответил на ваш вопрос, если правильно его понял.
ответил 28 Ноя, 13 от LEDOKOL (740 баллов)
00 голосов
Цитата
MyIE пишет:
Логика такая: мы зашли в каталог - вывели только разделы первого уровня. Прогли в один из разделов, если он имеет в себе разделы, то вывели только их, элементы не выводит. Прошли еще ниже (тыкнули по одному из разделов), если в нем есть разделы, то опять же выводим их (елементы не выводятся), если их нет, то выводим элементы и т.д.Какой шаблон должен быть - не помню.
Да и логика важнее, чем верстка. Надеюсь ответил на ваш вопрос, если правильно его понял.
Вы как бэ своими словами только лишь процитировали мою тему, да, именно так и нужно сделать, но:
1) какой компонент для этого лучше бы подошел что бы не плодить файлы папки для подразделов на сервере и не плодить так же копии компонентов с шаблонами?
2) получить на странице $_GET['ID'] раздела? $_REQUEST['ID'] тоже не выводит ничего, выводит только $arSection['ID'], то есть сравнить и определить что это родитель как бэ не с чем.
3) вот так выводит только второй уровень:

Код
<?
$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"];
   $bHasChildren = is_array($arSection['CHILDREN']) && count($arSection['CHILDREN']) > 0;
   if(isset($arSection['ID']) && $arSection['ID'] == 28) {
      foreach($arSection['CHILDREN'] as $key => $arChild) {
         echo '<li id="'.$this->GetEditAreaId($arChild['ID']).'"><img src="'.$arChild["PICTURE"]["SRC"].'"><a href="'.$arChild["SECTION_PAGE_URL"].'">'.$arChild["NAME"].'</a></li>';
      }
   }
}
?>
 

и то, это получается что вывел только подраздел и вывел на другой (физически) странице, а как тогда быть с динамичностью?
то есть как на одной и той же странице, используя только лишь один компонент и шаблон вывести несколько уровней вложености, но для каждой странице - свой?
вопрос то как я понял мучает процентов 60-70 пользователей битрикса (если не больше), а решения увы пока что нету.
ответил 11 Март, 14 от Pika (340 баллов)
00 голосов
1 - catalog
2 - print_r всякие arResult'ы и смотрите их
ответил 01 Июль, 14 от LEDOKOL (740 баллов)
00 голосов
Цитата
MyIE пишет:
1 - catalog2 - print_r всякие arResult'ы
1) то есть компонент комплексный каталог?
2) выводил, но мне это ничего не дало...
З.Ы. если не составит труда, то может быть черканете все же механизм разбора родителей на их потомков? smile:D
ответил 01 Ноя, 14 от Pika (340 баллов)
00 голосов
Тема действительно актуальная. Странно, что в компонентах битрикса нет ничего подобного. Мучаюсь с выводом структуры разделов уже две недели, но знаний все еще не хватает, чтоб решить данную задачу.
Причем казалось, что я справился с этой задачей при помощи компонента catalog. Но прочитав данную тему решил проэкспериментировать, так как появились подозрения. Добавил в нижележащий (второй) уровень еще один подраздел (то есть добавил третий уровень) и разочарованию моему небыло предела, так как этот раздел вывалился во второй уровень разделов.
Помогите люди добрые кто чем может.
ответил 01 Март, 15 от SooD (100 баллов)

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

0 голосов
2 ответов
0 голосов
3 ответов
спросил 22 Март, 14 от Snezhka (2,240 баллов)
0 голосов
4 ответов
спросил 03 Ноя, 13 от sdafdsuj (120 баллов)
0 голосов
1 ответ
спросил 25 Июль, 15 от аноним
0 голосов
0 ответов