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

catalog.section.list=catalog.section.list+catalog.section?

00 голосов
5
После копирования компонента catalog, по адресу
\templates\.default\bitrix\catalog.section.list\.default\template.php
выводятся наименования каталогов, как с этого же файла получить доступ к наменованию элементов?
Вывод наименования элементов в
\templates\.default\bitrix\catalog.section\.default\template.php
был отключен, т.е. при лазании по каталогам, не загружается этот скрипт, это и не нужно.
Нужно вывести наименования элементов(товаров) именно из того скрипта, который по умолчанию выводит только каталоги.
Естественно возникло желание посмотреть, что было в скрипте для вывода элементов, который был отключен и подключение компонента.
Вот что нашёл:
Код
$APPLICATION->IncludeComponent(
   "bitrix:catalog.section",
   "",
   Array(
      "IBLOCK_TYPE" => $arParams["IBLOCK_TYPE"],
      "IBLOCK_ID" => $arParams["IBLOCK_ID"],
      "ELEMENT_SORT_FIELD" => $arParams["ELEMENT_SORT_FIELD"],
      "ELEMENT_SORT_ORDER" => $arParams["ELEMENT_SORT_ORDER"],
       "PROPERTY_CODE" => $arParams["LIST_PROPERTY_CODE"],
      "INCLUDE_SUBSECTIONS" => $arParams["INCLUDE_SUBSECTIONS"],
      "BASKET_URL" => $arParams["BASKET_URL"],
      "ACTION_VARIABLE" => $arParams["ACTION_VARIABLE"],
      "PRODUCT_ID_VARIABLE" => $arParams["PRODUCT_ID_VARIABLE"],
      "SECTION_ID_VARIABLE" => $arParams["SECTION_ID_VARIABLE"],
      "FILTER_NAME" => $arParams["FILTER_NAME"],
      "DISPLAY_PANEL" => $arParams["DISPLAY_PANEL"],
      "CACHE_TYPE" => $arParams["CACHE_TYPE"],
      "CACHE_TIME" => $arParams["CACHE_TIME"],
      "CACHE_FILTER" => $arParams["CACHE_FILTER"],
      "SET_TITLE" => $arParams["SET_TITLE"],
      "DISPLAY_COMPARE" => $arParams["USE_COMPARE"],
      "PAGE_ELEMENT_COUNT" => $arParams["PAGE_ELEMENT_COUNT"],
      "LINE_ELEMENT_COUNT" => $arParams["LINE_ELEMENT_COUNT"],
      "PRICE_CODE" => $arParams["PRICE_CODE"],
      "USE_PRICE_COUNT" => $arParams["USE_PRICE_COUNT"],
      "SHOW_PRICE_COUNT" => $arParams["SHOW_PRICE_COUNT"],

      "PRICE_VAT_INCLUDE" => $arParams["PRICE_VAT_INCLUDE"],

      "DISPLAY_TOP_PAGER" => $arParams["DISPLAY_TOP_PAGER"],
      "DISPLAY_BOTTOM_PAGER" => $arParams["DISPLAY_BOTTOM_PAGER"],
      "PAGER_TITLE" => $arParams["PAGER_TITLE"],
      "PAGER_SHOW_ALWAYS" => $arParams["PAGER_SHOW_ALWAYS"],
      "PAGER_TEMPLATE" => $arParams["PAGER_TEMPLATE"],
      "PAGER_DESC_NUMBERING" => $arParams["PAGER_DESC_NUMBERING"],
      "PAGER_DESC_NUMBERING_CACHE_TIME" => $arParams["PAGER_DESC_NUMBERING_CACHE_TIME"],

      "SECTION_ID" => $arResult["VARIABLES"]["SECTION_ID"],
      "SECTION_CODE" => $arResult["VARIABLES"]["SECTION_CODE"],
      "SECTION_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["section"],
      "DETAIL_URL" => $arResult["FOLDER"].$arResult["URL_TEMPLATES"]["element"],
   ),
   $component
);

и далее копирую блок из отключенного скрипта, который выводит только элементы, заношу данные в скрипт, который выводит только каталоги - в массив, но массив этот пустой, т.е.
скрипт для вывода каталога, в который скопировали часть из скрипта для вывода элементов(товаров) - не видит эти товары.
Может я неправильно подключил модуль? Или что-то недоподключил?

Обще вопрос формулируется так:
В Битриксе по умолчанию выводом инфы из каталога занимаются три скрипта catalog.section.list, catalog.section и 1 скрипт детального просмотра element.
Мне нужно чтобы выводом catalog.section.list+catalog.section занимался один скрипт -catalog.section.list.
Т.е. через API получить доступ к наименованию элементов(товаров), SECTION_ID - известна.
Это нужно для увеличения скорости, чтобы не грузились при просмотре каталога два скрипта, а только один.
спросил 20 Сен, 13 от Ashesar (140 баллов)

5 Ответы

00 голосов
Элементы из раздела с известным ID получить можно CIblockElement::GetList

Вы хотите вызов ($APPLICATION->IncludeComponen()) одного из компонентов поместить в код другого компонента? Это вряд ли уменьшит время выполнения, а если сделаете это неверно - еще и увеличит.

Цитата
Т.е. через API получить доступ к наименованию элементов(товаров), SECTION_ID - известна.


Для выбора разделов один из компонентов использует CIblockSection::GetList, получает массив разделов . Тут же вы можете для каждой секции, в цикле, доставать элементы из нее, используя CIblockElement::GetList, но это не рационально, ибо количество запросов будет расти пропорционально количеству секций.
ответил 26 Сен, 13 от Tetis (500 баллов)
00 голосов
Есть скрипт, вывода секций и элементов:
Код
<? 
require($_SERVER["DOCUMENT_ROOT"]."/bitrix/modules/main/include/prolog_before.php"); 

if (!CModule::IncludeModule('iblock') or !CModule::IncludeModule('catalog')) 
   die ('Ошибка в загрузке модулей'); 
   
  //начальный SECTION_ID
  if(!$_REQUEST['SECTION_ID'])
  $sID=1755;else $sID=$_REQUEST['SECTION_ID'];
  //Фильтр выборки секций
  $arFilter = Array('SECTION_ID'=>$sID, 'GLOBAL_ACTIVE'=>'Y');
  
  //выбираем секции
  $db_list = CIBlockSection::GetList(Array($by=>$order), $arFilter, true);

 echo "SECTION_ID=".$sID."<br>";
  
  while($ar_result = $db_list->GetNext())
  {
   //наименование секции
   echo '<b>'.$ar_result['NAME'].$ar_result['ID'].': '.'</b><br>';
 
   }


//фильтр для запроса элементов
   
   
   $arFilter = Array("SECTION_ID"=>$sID, "ACTIVE_DATE"=>"Y", "ACTIVE"=>"Y");

   //делаем запрос
   $arSelectFields=Array("NAME", "DATE_ACTIVE_FROM", "PREVIEW_TEXT", "ID", "IBLOCK_CODE", "DETAIL_PAGE_URL", "SHOW_COUNTER");
   $res = CIBlockElement::GetList(Array(), $arFilter, false, false,false,$arSelectFields );

   while($ob = $res->GetNextElement())
   {
      //получаем инфу каждого элемента
      $arFields = $ob->GetFields();
      //выводим картинку
   
         echo ShowImage($arFields["PREVIEW_PICTURE"], 100, 100, "border='0'");
         echo "<br>";
      
         echo ">>>".$arFields["NAME"];
         $p=CCatalogProduct::GetByID($arFields["ID"]);
      
         echo "Количество: ".$p['QUANTITY']."<br>";
   
   //ссылка на детальный просмотр пуста, почему?
   echo $arFields['detail_page_url'];
   
   }

?>

Вопрос, почему пустая ссылка на детальный просмотр?
ответил 26 Дек, 13 от Ashesar (140 баллов)
00 голосов
Цитата
DETAIL_PAGE_URL
Цитата
detail_page_url
это чуть разные вещи ;)
ответил 12 Апр, 14 от sickmind (4,660 баллов)
00 голосов
Код
echo $arFields['DETAIL_PAGE_URL']//-пусто
echo $ar_result['LIST_PAGE_URL']// в выводе секций CIBlockSection::GetList тоже пусто

что это может быть?
ответил 04 Авг, 14 от Ashesar (140 баллов)
00 голосов
Вопрос остался открытым, но решил не использовать ручной вывод через API, а детально проанализировать замедление, выяснилось, что при отключении ненужных компонентов в скрипте, вроде сравнения и т.д. скорость существенно возрасла.
ответил 08 Дек, 14 от Ashesar (140 баллов)

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

0 голосов
1 ответ
спросил 25 Июль, 15 от аноним
0 голосов
0 ответов
0 голосов
2 ответов
0 голосов
0 ответов
0 голосов
1 ответ
спросил 01 Фев, 14 от LaoMao (100 баллов)