Задать вопрос
Ответы пользователя по тегу 1С-Битрикс
  • Каким образом можно получить свойства элементов инфоблока не используя getList?

    есть GetPropertyValues и GetPropertyValuesArray()

    Но вот быстрее ли оно...
    Могу лишь сказать, что Fetch() будет быстрее GetNext(), так что предпочтительнее использовать Fetch()
    Ответ написан
    Комментировать
  • Почему я получаю редирект на главную с любой детальной страницы?

    1. Находите в ядре функцию LocalRedirect
    2. Вставляете в неё первыми строчками вывод трассировки (debug_backtrace() ) и die;
    3. Если сработало - увидите, откуда был вызван редирект. Если не сработало - ищите другие варианты редиректа ( даже в .htaccess может быть какая-нибудь дичь )
    Ответ написан
  • Как вывести детальную новость?

    я правильно понял, что под каждую категорию у Вас отдельный инфоблок? Если это так, то одним файлом не обойтись.

    Если начальная задача была "Сделать новости с категориями", то для этого обычно:
    1) берут тип инфоблока с флагом "Использовать древовидный классификатор элементов по разделам". Если такого типа нет - заводят новый.
    2) создают один инфоблок
    3) в этом инфоблоки создают разделы ( категории ) и элементы ( сами новости )
    4) в публичной части создают отдельный каталог ( например, /news ) и в /news/index.php добавляют комплексный компонент bitrix:news

    Да и вообще, если у Вас есть и список новостей и просмотр новости детально, то нет смысла делать отдельные файлы с "bitrix:news.list" и "bitrix:news.detail". Нужно использовать bitrix:news
    Ответ написан
    2 комментария
  • Как настроить описание страницы?

    посмотрите в корне сайта файл .section.php
    Ответ написан
    Комментировать
  • Для чего нужен wakeUp в Битрикс?

    если посмотреть код, то видно, что при wakeUp не выполняется никаких обращений к БД.
    Метод в файле bitrix/modules/main/lib/orm/objectify/entityobject.php
    смотрите разницу:
    fill*() - подгружает значение из БД
    set*() - задаёт значение свойства, но при несовпадении со старым значением переводит объект в состояние State::CHANGED
    wakeUp() -создаёт объект с указанными значениями свойств, не переводя объект в изменённое состояние, но только при условии, что в аргументе есть первичный ключ.
    Ответ написан
    Комментировать
  • Как настроить ошибку 404 не выводится ошибка в headers?

    Нет, достаточно допилить шаблон компонента каталога. Сейчас, полагаю, на неправильный URL открывается корень каталога? Если так, то достаточно в странице sections.php добавить свой код
    Ответ написан
  • Почему нет свойства в $arResult?

    потому что в аргументах CIBlockElement::GetList() надо указывать не 'PROPERTY_JOB_TITLE_VALUE' , а 'PROPERTY_JOB_TITLE'. А вот в результате будет 'PROPERTY_JOB_TITLE_VALUE' и ещё пачка мусора
    Ответ написан
  • Как получить название пользовательского поля Битрикс по его коду?

    Если есть id поля, то всё легко:
    <?php
    use Bitrix\Main\UserFieldTable;
    
    $id = 1;
    $res = UserFieldTable::getFieldData($id);
    print_r($res);

    Если только символьный код, то чуть сложнее:
    <?php
    use Bitrix\Main\UserFieldTable;
    $fieldName = 'UF_CRM_1728545307';
    $res = UserFieldTable::getList([
        'select' => array_merge(['*'], UserFieldTable::getLabelsSelect()),
        'filter' => [
            '=FIELD_NAME' => $fieldName,
        ],
        'limit' => 1,
        'runtime' => [
            UserFieldTable::getLabelsReference(null, 'ru'),
        ]
    ])->fetchRow();
    print_r($res);
    Ответ написан
    Комментировать
  • Как вывести баннер товара в шапку сайта?

    Судя по $arResult, показанный код где-то в template.php шаблона компонента для вывода баннера. Не надо так.
    вместо этого в шаблоне компонента делаете так:
    <?if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
    $this->SetViewTarget("banner-head");
    if (!empty($arResult['PICTURE'])){
        echo CFile::GetPath($arResult['PICTURE']);
    }

    (это весь код шаблона)
    а в header.php сайта пишете:
    <?$APPLICATION->IncludeComponent(/* вызов компонента для баннера */);?>
    <?php
    $picture = trim($APPLICATION->GetViewContent('banner-head'));
    if (!empty($picture)): 
    // и дальше как было
    <?php

    Должно получиться.

    Пихать $APPLICATION->ShowTitle() внутрь шаблона компонента вообще дурная идея. С хлебными крошками, вероятно, то же самое, потому что это особенный компонент, и шаблон у него особенный.
    Ответ написан
  • Как передать значение из компонента в result_modifier шаблона, где компонент вызывается?

    не очень подробно описано, поэтому остаётся гадать. Я предполагаю 2 варианта:
    1) попроще: где-то вызов компонента С1, в шаблоне которого упомянутый result_modifier.php . Затем, ниже первого вызова, идёт вызов компонента С2, от которого нужны данные.
    Тогда просто перенесите вызов компонента С2 выше вызова С1 и оберните:
    <?php
    ob_start();
    $APPLICATION->IncludeComponent( "C2" ...);
    $APPLICATION->AddViewContent("view2",  ob_get_clean() );
    // там, где компонент был раньше, ставите:
    $APPLICATION->ShowViewContent("view2");

    Соответственно, в component_epilog.php компонента С2 засовываете нужные значения в $APPLICATION->SetPageProperty() или просто в $GLOBALS

    2) Посложнее: компонент С2 вызывается в template.php того же шаблона, которому принадлежит result_modifier.php. Тогда в result_modifier.php будет:
    <?php
    $arResult['PROPERTIES']['TABS'][] = array(
        'CODE' => 'FAQ',
        'TITLE' => 'Вопросы о товаре #COUNT#', // Отображаем количество вопросов
        'VALUE' => 'FAQ_FORM' // Временное значение
    );
    , а в template.php выше вывода вкладок:
    <?php
    $this->SetViewTarget("view2");
    $APPLICATION->IncludeComponent( "C2" ...);
    $this->EndViewTarget();
    // передача значения - аналогично первому варианту. Допустим, через $GLOBALS
    // где-то ниже при выводе заголовка таба
    $tab['TITLE'] = str_replace('#COUNT#', $GLOBALS['count'], $tab['TITLE']);
    // и ещё ниже, где был компонент:
    ?>
    <?$APPLICATION->ShowViewContent("view2")?>
    Ответ написан
    Комментировать
  • Как вытащить данные из формы в дополнительных настройках пользовательского поля?

    Дисклаймер: давно копался в этом ужасе, могу ошибаться.

    есть 2 ситуации:
    1) Вы только добавляете новое поле Вашего типа к какому-то объекту (допустим, USER). Вот когда Вы на форме добавления выбираете "Тип данных ..." и страница обновляется, только тогда срабатывает метод GetSettingsHTML()
    2) Вы уже сохранили поле, оно получило ID. Тогда то, что было задано в дополнительных настройках, будет в массиве по ключу SETTINGS поля. Пример кода:
    <?php
    $arUserField = CUserTypeEntity::GetByID(316); // 316 - это ID поля в моём случае, его тип - "связь с HL блоком"
    var_export($arUserField);
    Ответ написан
  • Как в битрикс в поиске добавить Найдено совпадений?

    Только делать свой компонент, плюс расширять класс CSearchTitle , посмотрите на метод
    Ответ написан
    Комментировать
  • Как решить проблему с дублированием при ajax?

    а Вы не пробовали убрать этот инлайновый скрипт в script.js шаблона? Я считаю, что у Вас в data прилетает этот javascript, исполняется, и становится 2 обработчика $(document).on('click', '.load_more',..) , на следующей подгрузке три и так далее. Это можно увидеть в DevTools - посмотрев, сколько ajax запросов порождает нажатие кнопки
    Ответ написан
    Комментировать
  • Как вставить переменную из js в template.php и обновить страницу?

    Вам надо добавить селекту имя и как-то сабмитить форму с селектом (на выбор есть GET и POST). Соответственно, в скрипте значение выбранного города будет в одном из значений в массиве $_GET или в массиве $_POST .

    P.S. Правильно пишется "city". Учите английский, в будущем пригодится.
    Ответ написан
    Комментировать
  • Как подключить reCAPTCHA v3 к форме 1С Битрикс?

    CEvent::Send() только ставит сообщение в очередь ( читай "пишет в таблицу в БД"). А отправлено оно будет только на следующем хите, если повезёт.
    Для немедленной отправки используйте CEvent::SendImmediate()
    Ответ написан
  • Как защититься от создания пустых заказов ботами?

    повесьте обработчик на событие onOrderAdd и записывайте в какой-то лог всё, что нужно: $_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI'], что-нибудь ещё
    Ответ написан
    Комментировать
  • Как передать данные от компонента к компоненту при композитном сайте на Битрикс?

    Через параметры этого другого компонента. Если компоненты разделены, через $GLOBALS или их аналог $APPLICATION->SetPageProperty() , $APPLICATION->GetPageProperty()
    Ответ написан
    Комментировать
  • Вывести описание раздела каталога Bitrix над его элементами?

    bitrix:catalog - это комплексный компонент. На странице element.php шаблона он подключает обычный компонент bitrix:catalog.element .
    Скорее всего, вам нужно посмотреть $arResult в шаблоне компонента bitrix:catalog.element -если там нет нужных данных, то догрузить их обращением к API в result_modifier.php .
    Ответ написан
    Комментировать
  • Как в Битрикс синхронизировать товары между основным сайтом и сайтом для разработки?

    Добавьте ещё b_file - там картинки.

    Если Вы хотите ограничиться только этими таблицами, то не так страшен чёрт, как его малюют. Я бы действовал так:
    1) через Adminer выгрузил структуру нужных таблиц на боевом и на тесте.
    2) сравнил эти структуры каким-нибудь инструментом ( например, Meld). В хорошем случае разница будет только в чём-то незначительном, типа автоинкремента.
    3) если всё хорошо, перелил таблицы.
    4) переиндексировал поиск, если это нужно.
    Возможно, диапазон таблиц стоит расширить до b_iblock_* , b_catalog_*
    Ответ написан
    Комментировать
  • Как изменить шаблон у внутренних страниц?

    Делайте так же, что Вас останавливает? Если не хотите плодить строчки, то я вижу 2 пути:
    1) использовать в "Тип условия" значение "Выражение PHP", а в "Условие" регулярное выражение. Вот пример от коробочного правила:
    preg_match("#^/video/([\.\-0-9a-zA-Z]+)(/?)([^/]*)#", $GLOBALS['APPLICATION']->GetCurPage(0))

    2) сделать комплексный компонент, регулярку задать в нём, поместить его, например, в /test/index.php . Или аналогично сделать через роутинг. Тогда в настройках сайта будет достаточно одной строчки с типом "Для папки или файла" .
    Ответ написан
    Комментировать