Ответы пользователя по тегу 1С-Битрикс
  • Как распределить элементы по разделам GetList?

    gromdron
    @gromdron
    Работаю с Bitrix24
    По результатам общения в комментариях немного изменили код запросов и алгоритм выборки.
    Проблема была в алгоримтах.

    Я бы порекомендовал дополнительно:
    1) Разделить шаблон на 2 части: result_modifier.php (логика, запросы, обработка результатов) и template.php (чисто визуальное отображение), иначе вы запутаетесь.
    2) Проверить чтобы $arParams['PARENT_SECTION'] была не нулевая (не null, 0, false не пустой массив), иначе есть шанс получить все разделы
    3) Не использовать запросы в цикле
    Ответ написан
    Комментировать
  • Как вывести из инфоблока Битрикса свойство "Да/Нет" в лиде Битрикса 24?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Зависит от того как это устроено.
    Я бы сделал на событии добавления элмента (after) формирование сообщения и отправку лида в битрикс24. Там же по XML_ID ENUM-значения маппил уже вручную в соответствующие поля
    Ответ написан
  • Почему не работает 404 на разделах в битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Зависит от того какой компонент вы используете.
    Например для bitrix:news.detail есть параметры, определяющие поведение при запросе несуществующего элемента. Так получается что если параметр SHOW_404 установлен в false, то пользователю будет выведено сообщение "Элемент не найден", а в случае true - содержимое страницы 404
    Ответ написан
    1 комментарий
  • Совместим bitrix (v20.0.1198) и php7.4?

    gromdron
    @gromdron
    Работаю с Bitrix24
    TLDR: Пока рано.

    Update: Прошу прощения. Напутал с версии: с 01.08.2020 будет требовать php 7.2, но рекомендуется php7.4


    Имея опыт в системном администрировании (как минимум подкрутить настройки php), программирования (php) и знания работы битрикса, вы можете запустить его на php 7.4 и он даже будет работать (по большей части). Он заведется, но корректно работать на все 100% не будет.

    Официально обьявлено, что с 1 июля (или июня) 2020 года платформа будет требовать php 7.2. Предполагаю что за несколько дней до релиза выйдет обновление, которое заменит str*-функции на mb_* функции и вы сможете использовать последнюю версию платформы на php 7.4.

    Если Вы используете bitrix env, то повышение версии php выйдет несколько позже (как всегда опоздают).
    Ответ написан
    3 комментария
  • Как добавить возможность выбирать теги для новостей?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вопрос, как для элементов добавить теги?


    Если вы имеете ввиду наличие поля, то у элементов инфоблока поле с тегами есть изначально. Не нужно проводить доп. манипуляций чтобы они появились.
    Если вы имеете ввиду значение в поле, то так же как вы задаете название - в поле "Теги" вводите текст через запятую.

    Если в административной панели при работе с элементом инфоблока нет поля для тегов, то возможно вы просто не вывели его для себя. Откройте настройку форм элементов и выведите его. Подробнее в документации: https://dev.1c-bitrix.ru/learning/course/index.php...
    Ответ написан
    Комментировать
  • Как вывести пользовательское поле типа Файл в Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В разделе нужно вывести ссылку на скачивание pdf-файла?


    Нужно ли Вам вывести ссылка на скачивание - я не знаю.

    Как вывести пользовательское поле типа Файл в Bitrix?

    Для административной панели, при загрузке файла он будет показан автоматически.
    Так же, если вы используете компоненты bitrix:news* то вы можете указать свойство для получения, а в некоторых случаях оно даже отобразиться само (в специально установленных местах).

    Существуют и другие способы отображения файла: в result_modifier.php шаблона получить список разделов и дозапросить данные этого поля, а потом через CFile получить непосредственные ссылки на файлы.
    Ответ написан
    Комментировать
  • Как получить значение свойства элемента по ID в Битрикс?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Метод GetByID не возвращает свойства элемента, а является простой прослойкой для getList запрашивающий все свойства.

    Явно используйте CIblockElement::getList для получения свойств

    $resElement = \CIBlockElement::GetList(
        [],
        [
            'IBLOCK_ID' => 5,
            'ID' => 371,
        ],
        false,
        false,
        [
            'ID',
            'IBLOCK_ID',
            'PROPERTY_SLOGAN',
            'PROPERTY_COPY'
        ]
    );
    
    if ( !($element = $resElement->getNext() ) )
    {
        echo "Элемент не найден";
        return;
    }
    
    var_dump($element);
    Ответ написан
  • Как в битрикс отследить событие полной оплаты заказа?

    gromdron
    @gromdron
    Работаю с Bitrix24
    В документации есть Сохранение заказа: особые события, там есть событие OnSaleOrderPaid. Внем нужно проверять - после изменения статуса оплачен ли заказ полностью или нет.
    Ответ написан
    Комментировать
  • Как синхронизировать большой объем данных?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Есть пара вариантов как это сделать:
    - Stepper (вид агентов, о котором вы писали)
    - cron-файл.

    Нет ничего зазорного чтобы специализированную задачу, для решения которой подходит cron-файл/cron-скрипт выполнять именно таким способом.
    Более того:
    - В коробке может быть настроено выполнение агентов на кроне, что решает часть вашей проблемы
    - Битрикс в определенных подсистемах (например открытые линии) сам рекомендует дополнительно настраивать cron-задания
    Ответ написан
    Комментировать
  • Как сделать проверку того, что отгрузка была полностью совершена для заказа в Битрикс24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вообще, если вы на заказах собираетесь делать обучение, то при заказе вы должны продать "10 единиц обучения" и сделать "10 отгрузок" к каждой прикрепить по "1 единице обучения".
    К слову сказать, по закону вы должны еще и после каждого занятия выбивать чеки на "отгрузку" этого обучения, а после еще и выбить чек о полной оплате.

    Соответственно заказ считается оплаченным, когда получены деньги, но выполненным когда отгружены все отгрузки.
    Ответ написан
    Комментировать
  • Bitrix есть ли событие на сохранение профиля покупателя?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Можно было бы, если бы они были.
    В реальности там есть 2 механики: создание "группы" пользовательских свойств и редактирование "группы" пользовательских свойств.
    По факту "группа" пользовательских свойст и есть профиль покупателя.

    Вот только заполнение идет прямыми запросами в базу данных, поэтому вклиниться можно только в компоненты и события оформления заказа
    Ответ написан
  • Как работает Битрикс с memcached?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Подскажите работает ли Битрикс с memcached.


    Да, работает. Но для последних версий битрикса рекомендуется использовать Redis.
    https://dev.1c-bitrix.ru/learning/course/index.php...

    Второй вопрос сильно ли может помочь memcached для ускорения работы сайта?


    Все относительно. Кеш memcached/redis работает однозначно быстрее чем файловый кеш.
    Но проблема у вас может быть совсем не в кешировании.

    Например если ни один компонент не складывает данные в кеш и постоянно обращается к базе то изменение механизма хранения кеша не поможет. А если под кеш выделить мало оперативной памяти (по умолчанию в bitrix env идет вроде как либо 64MB либо 1GB), а кеш большой то он может еще и замедлить работу.

    Возможно у вас есть подключение внешиних скриптов или некешируемые запросы или верстка вашего сайта слишком огромная и сам парсинг занимает достаточно много времени.
    Ответ написан
    5 комментариев
  • Как связать форму обратной связи с Битрикс 24?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Все достаточно просто:
    - Находите endpoint куда отправляются эти формы (отправка же формы происходит куда-то?)
    - В Битрикс24 создаете входящий веб-хук с правами на создание лидов в CRM
    - В найденном endpoint прописываете отправку crm.lead.add

    Дя того чтобы это было еще и максимально безопасно лучше дополнить это решение: в битрикс24 создать отдельного пользователя с правами на создание лидов (другого доступа быть не должно) и уже от него создать входящий веб-хук.

    При этом ни внешний вид, ни механика существующих форм не пострадает
    Ответ написан
  • Как в DealTable::getList включить проверку прав CRM?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Вы неверно трактуете исходную точку.

    DataMapper'ы это низкоуровневая прослойка между данными и вашим кодом. Там не должно быть никакой проверки прав и соответственно ее там нет.

    Для получения списка сделок с правами и сохранением обратной совместимости вы обязаны использовать методы:
    CCrmDeal::GetList($arOrder = Array('DATE_CREATE' => 'DESC'), $arFilter = Array(), $arSelect = Array(), $nPageTop = false)
    CCrmDeal::GetListEx($arOrder = array(), $arFilter = array(), $arGroupBy = false, $arNavStartParams = false, $arSelectFields = array(), $arOptions = array())


    Официально нового API (как принято говорить D7) для CRM нет.
    Ответ написан
    Комментировать
  • Не подгружаются стили и скрипты в слайдере Битрикс?

    gromdron
    @gromdron Куратор тега Битрикс24
    Работаю с Bitrix24
    Для вывода своего компонента используйте bitrix:ui.sidepanel.wrapper

    Ваша ошибка следует из того, что вы не знаете как именно работает слайдер в режите iframe
    Ответ написан
    Комментировать
  • Как в битрикс бизнес Создать скидку только для неавторизованных пользователей.?

    gromdron
    @gromdron
    Работаю с Bitrix24
    У блоке "Дополнительные условия" в подмножестве "Пользователи" выбрать пункт "Группа".
    Переключить режим из "состоит в группе(ах)" в "не состоит в группе(ах)".
    В списке групп отметить все, кроме "Все пользователи (в том числе неавторизованные) [2]".
    Неавторизированный пользователь будет состоять только в этой группе.
    Ответ написан
  • Как настроить чпу в Битрикс когда большая вложенность разделов?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Вообще как уже сказал VicTHOR можете использовать такой параметр как SECTION_CODE_PATH (подробнее о ЧПУ вы можете почитать в документации)

    Что касается вашей структуры:
    Раздел1/Раздел2/Раздел3/Элемент


    Я бы не рекомендовал вам использовать данную структуру, так как при включении товара в несколько разделов у вас будет полный бардак с canonical-ссылками и дублями в каталоге.

    Используйте макет для разделов:
    /catalog/#SECTION_CODE_PATH#/
    И для элементов:
    /product/#ELEMENT_CODE#/

    Это позволит вам включать один товар в несколько разделов, но при этом не будет проблем ни с ЧПУ ни с canonical ни с поиском.
    Ответ написан
    Комментировать
  • Как создать поле файл у сущности?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Другой способ есть и он довольно простой: вы пишете что сущность работает с свойствами и добавляете UF_* свойство типа файл (или файл на диске) и битрикс делает все за вас. Единственное есть несколько ограничений:

    - Поле называется с UF_ префиксом
    - Валидация согласно настройкам поля
    - Добавлять uf нужно отдельно
    Ответ написан
    1 комментарий
  • Как посмотреть письмо перед отправкой в Bitrix?

    gromdron
    @gromdron
    Работаю с Bitrix24
    boris tyrepharm, к сожалению вы не можете посмотреть "будущие" письма, так как такая генерация очень сложна.
    Но вы можете посмотреть существующее письмо в новом дизайне. К тому же - вы можете увидеть только как будет выглядеть ваше письмо, если его вывести в браузере, но это не одно и то же, как если оно пройдет через MTA и будет отображаться в Outlook/Thundebird/OWA и т.п.

    Например я хочу посмотреть как приблизительно(*) будет выглядеть сообщение с ID 336020 (в таблице b_event), после изменения дизайна в существующем шаблоне.
    use Bitrix\Main\Mail;
    
    /**
     * Get from b_event table
     * @var integer Existed event id
     */
    $displayedEventId = 336020;
    
    /**
     * List of site ids, for event theme generation
     * must be replaced by current site id in public
     * @var array
     */
    $arSites = [
    	's1'
    ];
    
    try
    {
    	/**
    	 * First, try to find event
    	 */
    	$arEvent = Mail\Internal\EventTable::getRow([
    		'filter' => [
    			'=ID' => $displayedEventId,
    		]
    	]);
    
    	if ( !$arEvent )
    	{
    		throw new \Exception('Event not found');
    	}
    
    	$arEvent['FIELDS'] = $arEvent['C_FIELDS'];
    
    	/**
    	 * Try to find all message templates for 
    	 * sites. In event handler we send for one letter
    	 * per site.
    	 */
    	$arEventMessageFilter = [
    		'=ACTIVE' => 'Y',
    		'=EVENT_NAME' => $arEvent["EVENT_NAME"],
    		'=EVENT_MESSAGE_SITE.SITE_ID' => $arSites,
    	];
    
    	$messageDb = Mail\Internal\EventMessageTable::getList([
    		'select' => ['ID'],
    		'filter' => $arEventMessageFilter,
    		'group' => ['ID']
    	]);
    
    	foreach ($messageDb as $arMessage)
    	{
    		$eventMessage = Mail\Internal\EventMessageTable::getRowById($arMessage['ID']);
    
    		$eventMessage['FILES'] = array();
    		$attachmentDb = Mail\Internal\EventMessageAttachmentTable::getList(array(
    			'select' => array('FILE_ID'),
    			'filter' => array('=EVENT_MESSAGE_ID' => $arMessage['ID']),
    		));
    		while($arAttachmentDb = $attachmentDb->fetch())
    		{
    			$eventMessage['FILE'][] = $arAttachmentDb['FILE_ID'];
    		}
    
    		$arFields = $arEvent['FIELDS'];
    
    		// get message object for send mail
    		$arMessageParams = array(
    			'EVENT' => $arEvent,
    			'FIELDS' => $arFields,
    			'MESSAGE' => $eventMessage,
    			'SITE' => $arSites,
    			'CHARSET' => $charset,
    		);
    		$message = Mail\EventMessageCompiler::createInstance($arMessageParams);
    		$message->compile();
    		echo $message->getMailBody();
    	}
    }
    catch( \Exception $e )
    {
    	var_dump($e);
    }
    Ответ написан
    Комментировать
  • Как через getlist вывести множественное свойство привязка к другим элементам инфоблока?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Такое поведение встречается когда вы используете Инфоблоки вверсии 1 (хранение свойств в общей таблице) и запрашиваете множественное свойство.
    Чтобы исключить этот момент, можно изменить механику работы (первести их на версию 2), т.е. изменить расположение свойств в отдельной таблице.

    Это конечно накладывает определенные ограничения, но зато в getList'ах пропадут дубли элементов.
    См. документацию: https://dev.1c-bitrix.ru/learning/course/?COURSE_I...
    Ответ написан
    7 комментариев