Ответы пользователя по тегу 1С-Битрикс
  • Как реализовать повторитель (аналог acf repeater) в битриксе?

    Starina_js
    @Starina_js
    full-stack web dev
    1. Использовать множественное свойство с типом строка или даже иногда листа (в свойствах инфобока поставить галочку). Но не подойдет, когда вам нужно объединить в группу разного типа контента.
    2. Писать свое кастомное свойство . Ну такое, не быстрое решение)
    3. Использовать Модуль из маркетплейса , допустим Такой
    Есть минус, там почему-то местами нельзя менять когда заполнил уже...
    Ответ написан
  • Как установить на каталог в 1с-Битрикс Basic AuthType?

    Starina_js
    @Starina_js
    full-stack web dev
    Должно работаь

    $http->setHeaders(
      array(
        "Accept"        => "application/json",
        "Content-Type"  => "application/json; charset=UTF-8",
        "Cache-Control" => "no-cache, no-store, must-revalidate",
        "Authorization" => "Basic " . base64_encode($login . ":" . $password)
      )
    );


    Если нет, то надо проверять что там с $http что там с htpasswd и htaccess и т.п.
    Ответ написан
    Комментировать
  • Как выводить по свойству раздела?

    Starina_js
    @Starina_js
    full-stack web dev
    Если menu в header.php шаблона, то нужно вводить отложенные функции, так как загрузки свойства на этапе подключения header нет

    Вот тут почитать
    Ответ написан
    Комментировать
  • Не отправляются файлы на сервер через BX.ajax.runComponentAction, в чем может быть проблема?

    Starina_js
    @Starina_js
    full-stack web dev
    Эту ветку смотрели?

    BX.ajax.runComponentAction('componentName', "actionName", {
        mode: 'ajax',
        data: new FormData(form)
    })


    use \Bitrix\Main\Application;
    $request = Application::getInstance()->getContext()->getRequest();
    $files = $request->getFileList()->toArray();
    Ответ написан
    4 комментария
  • Как заблокировать поле с кодом?

    Starina_js
    @Starina_js
    full-stack web dev
    $APPLICATION->IncludeFile(
            '/include/main.php',
            [],
            ["MODE" => "php"]
        );


    MODE - режим редактирования, допустимы следующие значения:
    text - файл будет редактироваться как текст (ссылка на страницу редактирования файла в режиме текста)
    html - файл будет редактироваться как HTML (ссылка на веб-редактор)(значение по умолчанию)
    php - файл будет редактироваться как PHP (ссылка на страницу редактирования исходников файла)

    https://dev.1c-bitrix.ru/api_help/main/reference/c...

    А вот чтобы поменять режим переключения редактора, наверно в настройках в админке можно глянуть
    https://dev.1c-bitrix.ru/learning/course/index.php...

    А еще вот тут https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
    1 комментарий
  • Как вывести Highload блок в битрикс?

    Starina_js
    @Starina_js
    full-stack web dev
    Уточните, что значит вывести Highload ?
    Получить элементы таблицы? Или поля таблицы? Где планируете выводить?

    Получаем элементы так:
    use Bitrix\Main\Loader; 
    use Bitrix\Highloadblock as HL; 
    use Bitrix\Main\Entity;
    
    Loader::includeModule("highloadblock"); //это если мы не в контексте приложения, допустим отдельный класс для api 
    $hlbl = 1; // ID highloadblock
    $hlblock = HL\HighloadBlockTable::getById($hlbl)->fetch(); 
    
    $entity = HL\HighloadBlockTable::compileEntity($hlblock); 
    $entity_data_class = $entity->getDataClass(); 
    
    $rsData = $entity_data_class::getList(array(
       "select" => array("*"),
       "order" => array("ID" => "ASC"),
       "filter" => array("UF_P_ID" => "1") // если нужна фильтрация по полям
    ));
    // элементы уже можно получить разным способом,  fetchAll, fetchCollection ,  посмотрите доку
    //или как ниже
    
    while($arData = $rsData->Fetch())
    {
       var_dump($arData);
    }


    Доки
    https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
    Комментировать
  • Как упростить работу с правками сайта на Битрикс и отдельных одностраничников имеющих одинаковые блоки, но разные домены на 1 хостинге?

    Starina_js
    @Starina_js
    full-stack web dev
    У битрикса есть такая штука как Многосайтовость.
    Вы можете под одно ядро/базу объединить несколько сайтов, доменов и управлять ими из одной админки.
    Спрятать под компоненты все что вам нужно, подрубить ядро битрикса к лендингам, и чутка допилить функциональность)
    Однако хостинг должен быть один у всех сайтов
    Ответ написан
  • Bitrix D7 какой самый быстрый по скорости метод получения значения свойства элемента с типом Список?

    Starina_js
    @Starina_js
    full-stack web dev
    Если работа с инфоблоками, то можно в select указать свойства сразу, и тогда битрикс сам соединит таблицы
    PROP, PROP.VALUE, PROP.ITEM.VALUE, PROP.ELEMENT (типы свойств посмотрите в справке, ссылку указал внизу)
    
    \Bitrix\Iblock\Elements\ElementСatalogTable::getList([
        'select' => [
        'NAME',
        'ID',
        'PROP_TEXT_VALUE' => 'PROP_TEXT.VALUE',  //строка
        'PROP_CITY_VALUE' => 'PROP_CITY.ITEM.VALUE',  // список
        'PROP_COURSE_' => 'PROP_COURSE_ELEMENT.ELEMENT', // свойство с привязкой элемента
       ],
       'cache' => [
          'ttl' => 3600
       ],
    ])->fetchAll() // если хотим просто массив получить готовый


    Если хотим работать с коллекцией, то
    $elements = \Bitrix\Iblock\Elements\ElementСatalogTable::getList([
      'select' => [
         'NAME',
         'ID',
         'PROP_NAME.ITEM',  // список
         //'PROP_NAME',  // строка
      ],
      'cache' => [
        'ttl' => 3600
      ],
    ])->fetchCollection();
    
    foreach ($elements as $element)
    {
       echo $element->getPropName()->getValue();
       //echo $element->getPropName()->getElement()->getValue();    
    }


    Справка по инфоблокам orm (там спойлеры еще гляньте)
    https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
    1 комментарий
  • Как показать подразделы в компоненте bitrix:news?

    Starina_js
    @Starina_js
    full-stack web dev
    Допустим у нас есть раздел site.ru/news/

    Мы хотим выводить новости, но без подразделов и допустим site.ru/news/news-name/
    1. В настройках инфоблока:
    URL страницы информационного блока: #SITE_DIR#/news/
    URL страницы детального просмотра: #SITE_DIR#/news/#ELEMENT_CODE#/
    2. В api компонента
    "SEF_FOLDER" => "/news/",
    "SEF_URL_TEMPLATES" => array(
          "news" => "",
          "section" => "",
          "detail" => "#ELEMENT_CODE#/",
    )


    Или, допустим, мы хотим выводить новости с подразделами site.ru/news/section/news-name/
    1. В настройках инфоблока:
    URL страницы информационного блока: #SITE_DIR#/news/
    URL страницы раздела: #SITE_DIR#/news/#SECTION_CODE#/
    URL страницы детального просмотра: #SITE_DIR#/news/#SECTION_CODE#/#ELEMENT_CODE#/
    2. В api компонента
    "SEF_FOLDER" => "/news/",
    "SEF_URL_TEMPLATES" => array(
          "news" => "",
          "section" => "#SECTION_CODE#/",
          "detail" => "#SECTION_CODE#/#ELEMENT_CODE#/",
    )


    Или, допустим, мы хотим выводить новость в несколько разделов, но чтобы чпу у новости был не в подразделе.
    К примеру новость отображалась в разделах site.ru/news/section1 и site.ru/news/section2 , но url самой новости был один для этих разделов (site.ru/news/detail/news-name/)

    1. В настройках инфоблока:
    URL страницы информационного блока: #SITE_DIR#/news/
    URL страницы раздела: #SITE_DIR#/news/#SECTION_CODE_PATH#/ (хотя можно даже section_code не указывать)
    URL страницы детального просмотра: #SITE_DIR#/news/#ELEMENT_CODE#/
    2. В api компонента
    "SEF_FOLDER" => "/news/",
    "SEF_URL_TEMPLATES" => array(
          "news" => "",
          "section" => "#SECTION_CODE_PATH#/",
          "detail" => "#ELEMENT_CODE#/",
    )


    или еще так можно

    1. В настройках инфоблока:
    URL страницы информационного блока: #SITE_DIR#/news/
    URL страницы раздела: #SITE_DIR#/news/#SECTION_CODE#/ (хотя можно даже section_code не указывать)
    URL страницы детального просмотра: #SITE_DIR#/news/element/#ELEMENT_CODE#/
    2. В api компонента
    "SEF_FOLDER" => "/news/",
    "SEF_URL_TEMPLATES" => array(
          "news" => "",
          "section" => "#SECTION_CODE#/",
          "detail" => "element/#ELEMENT_CODE#/",
    )


    Еще, в корне проекта есть файл urlrewrite.php - он отвечает за обработку адресов. Вообще он должен обновляться когда вы сохраняете компонент через редактор админа на фронте, либо через админку в обработке адресов.
    Однако вы можете глянуть как там прописаны пути

    0 => 
      array (
        'CONDITION' => '#^/news/#',
        'RULE' => '',
        'ID' => 'bitrix:news',
        'PATH' => '/news/index.php',
        'SORT' => 100,
      ),
    Ответ написан
    Комментировать
  • Как получить все св-ва элементов в ORM используя runtime?

    Starina_js
    @Starina_js
    full-stack web dev
    Если хотим работать с orm инфоблоков, то сначала в настройках инфоблока пропишите символьный код api

    Если вам нужно получить все свойства инфоблока то можно так
    \Bitrix\Iblock\PropertyTable::getList([
                'select' => [
                    'CODE',
                    'NAME',
                ],
                'filter' => [
                    'IBLOCK_ID' => $iblockId,
                ],
                'cache' => [
                    'ttl' => 3600
                ],
            ])->fetchAll();

    Вместо fetchall() можно fetchCollection() - для работы с коллекциями

    Если мы хотим получить элементы со значениями нужных свойств, то можно допустим так
    \Bitrix\Iblock\Elements\ElementCalendarListTable::getList([
                'select' => [
                    'NAME',
                    'ID',
                    'PROP_TEXT_VALUE' => 'PROP_TEXT.VALUE',  //строка
                    'PROP_CITY_VALUE' => 'PROP_CITY.ITEM.VALUE',  // список
                    'PROP_COURSE_' => 'PROP_COURSE_ELEMENT.ELEMENT', // свойство с привязкой элемента
                ],
                'cache' => [
                    'ttl' => 3600
                ],
            ])->fetchCollection()

    ElementCalendarListTable - это часть из названия символьного кода api и ElementTable

    Обратите внимание на select и как указываются свойства.
    Битрикс автоматом связывает таблицы, если они правильно в запросе прописаны

    https://dev.1c-bitrix.ru/learning/course/index.php...
    Посмотрите тут про типы свойств и как их можно получить и как формировать запросы. (там это указано под спойлером)

    Еще значения из свойств элемента можно получить так (как в справке)
    $iblock = \Bitrix\Iblock\Iblock::wakeUp($iblockId);
    $elements = $iblock->getEntityDataClass()::getList([
        'select' => ['ID', 'SOME_FIELD', 'ANOTHER_FIELD.ELEMENT']
    ])->fetchCollection();
    
    foreach ($elements as $element)
    {
        echo $element->getSomeField()->getValue();
        echo $element->getAnotherField()->getElement()->getTitle();
    }

    Тута https://dev.1c-bitrix.ru/learning/course/index.php...

    Это более простые способы получения значений из свойств инфоблоков.

    Есть еще вариант джойнить таблицы, делается через runtime
    Ответ написан
  • Как настроить урл-ы инфоблока Битрикса на без слеша?

    Starina_js
    @Starina_js
    full-stack web dev
    В битриксе по умолчанию используется конечный слеш. Лучше привести к этому формату Инфоблоки.
    #SITE_DIR#catalog/#SECTION_CODE#/
    ... #ELEMENT_CODE#/
    Вот везде слеш проставить в конце.
    А так же посмотреть параметры компонента, у подключаемых шаблонов.
    Ответ написан