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

    У товара есть основной раздел, к которому он привязан, его можно менять через админку (https://dev.1c-bitrix.ru/learning/course/?COURSE_I... Поэтому получая родительский раздел по товару, вы будете всегда получать один и тот же, основной раздел. Как выше сказали, смотреть нужно на раздел, в котором сейчас пользователь находится, если он не совпадает с основным разделом товара, то такой товар в корзину добавлять не следует
    Ответ написан
    Комментировать
  • Как в Битриксе обновить свойства заказа и сменить тип плательщика?

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

    $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 комментарий
  • Регистрация события срабатывающего при восстановлении пароля в Битрикс?

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

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

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

    Профиль пользователя не сохраняется в заказе, во время оформления, из указанного профиля копируются данные в свойства заказа и всё. В админке если не менять пользователя, то выбрать профиль во время редактирования заказа нельзя, можно только поправить свойства заказа. Если меняем пользователя или создаём новый заказ, то выбрать профиль можно. Функция \Bitrix\Sale\Helpers\Admin\OrderEdit::saveProfileData() сохраняет сам профиль, а не свойства заказа.

    В вашем случае, нужно взять значения свойств из другого профиля и присвоить их вместо текущих.
    Ответ написан
  • Для чего в Bitrix используется класс "use Bitrix\Main\ModuleManager;"?

    Для управления модулями в системе. В частности, \Bitrix\Main\ModuleManager::registerModule() - добавляет модуль в базу, \Bitrix\Main\ModuleManager::unRegisterModule() - удаляет модуль из базы. Все методы тут /bitrix/modules/main/lib/modulemanager.php
    Ответ написан
  • Вход в битрикс для разработчика?

    2. Документация, в основном, по старому ядру; по новому, D7, активно дополняется, но ещё много чего ей не покрыто.
    3. Поддержка отвечает быстро только если вы партнёр или коммерческий клиент. Так же для партнёров и клиентов доступен закрытый раздел форума. Как раз на форуме чаще всего можно встретить ответ на вопрос. Как работает поддержка можно почитать тут www.1c-bitrix.ru/support/sla.php
    Ответ написан
    Комментировать
  • Как записать в таблицу b_sale_basket_props?

    $basketPropertyCollection = $item->getPropertyCollection();
    $basketPropertyCollection->setProperty([
        [
            'NAME' => 'Цвет',
            'CODE' => 'COLOR',
            'VALUE' => 'Красный',
            'SORT' => 100,
        ],
    ]);
    $basketPropertyCollection->save();
    Ответ написан
    Комментировать
  • Какие отличия между битрикс, битрикс24, 1С-Битрикс, bitrix, и имеет ли это отношение к 1С:Предприятие?

    > Какие перспективы после изучения битрикс?
    Перспективы отличные :)
    Ответ написан
    Комментировать
  • Делает ли статический метод CIBlock->GetFields() запросы к БД?

    Данный метод не статический, сам вызов об этом нам говорит. Запросы в нём не выполняются:
    function GetFields()
    {
    	return $this->fields;
    }


    Запросы выполняются в методе $res->GetNextElement(). По-хорошему, этот код должен быть в компоненте, либо в result_modifier.php.

    UPD. Если вам нужны только те поля, что в примере, то имеет смысл писать так:
    while ($item = $res->Fetch()) {
        echo $item["ID"];
        echo $item["NAME"];
        echo $item["ACTIVE"];
    }


    bitrixcode.ru/neochevidnye-sposoby-optimizatsii-za...
    Ответ написан
    3 комментария
  • Как может быть запрещен доступ к папке?

    В настройках nginx'а. Например, может стоять блокировка по ip. Ещё можно закрыть административный раздел средствами битрикса /bitrix/admin/security_iprule_admin.php?lang=ru
    Ответ написан
    Комментировать
  • Какая разница между обычным механизмом кэширования у компонентов и композитом битрикса?

    В обычном режиме страница сайта собирается целиком - исполняется общий шаблон и отдельные компоненты, которые уже могут кэшировать, а могут и не кэшировать свои шаблоны.
    Композитный сайт - техонология позволяющая закэшировать страницу целиком со всеми компонентами. При первом хите мы её генерируем и сохраняем html в мемкэш. При повтором хите на эту же страницу, с такими же параметрами, она уже будет отдана напрямую из мэмкэша (если всё настроить). В этом случае php не подключится совсем. Но это только в том случае, если у вас нет динамических областей, которые зависят от конкретного пользователя. Например - корзина с товарами.
    Если она есть, то страница по-прежнему будет отдана из мэмкэша, но во время загрузки js битрикса отправит дополнительный запрос для получения области с корзиной.

    Подробнее - dev.1c-bitrix.ru/learning/course/?COURSE_ID=39

    И действительно ли это ускорит скорость отдачи страницы в 100 раз?

    Сильно зависит от проекта. Стоит попробовать.
    Ответ написан
    Комментировать