Задать вопрос
Пользователь пока ничего не рассказал о себе

Наибольший вклад в теги

Все теги (14)

Лучшие ответы пользователя

Все ответы (19)
  • Регистрация события срабатывающего при восстановлении пароля в Битрикс?

    Событие OnBeforeUserChangePassword поддерживается и вызывается в методе \CAllUser::ChangePassword(). Эта функция вызывается когда пользователь уже ввёл контрольную строку и новый пароль, т.е. непосредственно перед сменой. Ещё есть событие OnBeforeUserSendPassword - оно вызывается в методе \CAllUser::SendPassword() перед отправкой сообщения с контрольной строкой.
    Ответ написан
    Комментировать
  • Как в Битриксе обновить свойства заказа и сменить тип плательщика?

    Попробуйте такое

    $eventManager = \Bitrix\Main\EventManager::getInstance();
    
    $eventManager->addEventHandler('sale', 'OnSaleOrderBeforeSaved', 'orderModify');
    
    function orderModify(Bitrix\Main\Event $event)
    {
        global $USER;
    
        /** @var \Bitrix\Sale\Order $order */
        $order = $event->getParameter('ENTITY');
    
        $personTypeId = 3;
    
        $profileId = CSaleOrderUserProps::DoSaveUserProfile($USER->GetID(), null, 'Профиль ' . random_int(0, 500), $personTypeId,
            // код свойства и его значение
            [
                20 => random_int(100, 900),
                21 => random_int(500, 599)
            ], $errors);
    
        // Получаем текущую коллекцию свойств заказа и удаляем все свойства
        /** @var \Bitrix\Sale\PropertyValueCollection $orderProperties */
        $orderProperties = $order->getPropertyCollection();
        /** @var \Bitrix\Sale\PropertyValue $orderProperty */
        foreach ($orderProperties as $orderProperty) {
            $orderProperty->delete();
        }
    
        // Меняем тип плательщика
        $order->setPersonTypeId($personTypeId);
    
        // Далее взято из \Bitrix\Sale\PropertyValueCollection::load()
        // Т.к. на объекте заказа уже была получена коллекция, то при вызове $order->getPropertyCollection(),
        // коллекция не будет заполнена свойствами под новый тип плательщика.
        // Поэтому нужно добавлять свойства вручную
    
        // Получаем список свойств нового плательщика
        $props = \Bitrix\Sale\PropertyValue::loadForOrder($order);
    
        // Добавляем свойства к коллекции
        /** @var \Bitrix\Sale\PropertyValue $prop */
        foreach ($props as $prop) {
            $prop->setCollection($orderProperties);
            $orderProperties->addItem($prop);
    
            // В своём коде напямую этого сделать не можем, т.к. метод и свойство имеют приватный доступ
            // Но можно сделать обходным путём
    //        $orderProperties->setAttributes($prop);
    //        $orderProperties->propertyGroupMap[$prop->getGroupId() > 0 && isset($groups[$personTypeId][$prop->getGroupId()]) ? $prop->getGroupId() : 0][] = $prop;
        }
    
        // Получаем значения профиля
        $profileProperties = \Bitrix\Sale\OrderUserProperties::getProfileValues($profileId);
    
        // Записываем к заказу
        $orderProperties->setValuesFromPost(array('PROPERTIES' => $profileProperties), array());
    }


    Обратите внимание, сохранять сущности самостоятельно не нужно, они сохранятся позже в методе save() заказа. Преждевременное сохранение может дать неожиданный результат.
    Ответ написан
    1 комментарий
  • Можно ли использовать Битрикс как headless CMS?

    Как уже отметили так сделать можно, например через прослойку. Но так же можно обойтись без неё, просто подключать служебные части пролога и эпилога, т.е. без шаблонов. Получится полностью использовать всё апи битрикса, а фронтенд будет отдельно. Сложно подробнее ответить на вопрос, т.к. он сформулирован слишком широко.
    Ответ написан
    Комментировать
  • Как вывести текст в bitrix на определенных страницах?

    Вариантов много и они зависят от того как реализован каталог и по какому принципу функция берёт из папки файлы, чего из вопроса не понятно. Ещё стоит уточнить тут https://petsmart.ru/dogs/korma/vlazhnye-korma/beaphar/ и тут https://petsmart.ru/dogs/korma/suhie-korma/beaphar/ должен быть одинаковый текст или разный. В общем виде получается так:
    1. Определить что установлен фильтр по бренду
    2. Передать в компонент списка товаров код бренда
    3. В компоненте, по коду бренда подобрать соответствующий файл и его подключить; если нужно учитывать и раздел, то включить его в алгоритм поиска файла
    Ответ написан
    2 комментария
  • Какая книга по php является самой полной?

    Попробуйте эту www.ozon.ru/context/detail/id/33506422 Мануал это здорово, но бывает излишне сухим. Бывает что комментариев не хватает.
    Ответ написан
    Комментировать

Лучшие вопросы пользователя

Все вопросы (7)