Телеграм: @bazarow_ru Почта: mihail@bazarow.ru

Запретить указание количества товаров, добавляемого в корзину, в определенных разделах каталога.

Просмотров: 102

Задача состоит в том, чтобы запретить указание количества товара, добавляемого в корзину, в определенных разделах каталога. По умолчанию указание количества товара включено.

Создаем пользовательское поле раздела

Для начала, открываем настройки любого раздела каталога и создаем пользовательское поле "Запрет ввода количества" с типом "Да/Нет". По умолчанию, я установил значение "Нет" и задал ему код "UF_NOT_USE_PRODUCT_QUANTITY".

Запретить указание количества товаров, добавляемого в корзину, в определенных разделах каталога.

Выводим пользовательское поле раздела в section.php

В настройках компонента каталога указываем параметр "Разрешить указание количества товара:", который будет доступен для пользователя. Этот параметр станет значением по умолчанию, если для раздела не указано ииное в поле "Запрет ввода количества".

Выводим пользовательское поле раздела в section.ph

Чтобы получить значение созданного поля "Запрет ввода количества" в файле section.php комплексного шаблона каталога, мы будем использовать метод CIBlockSection::GetList. В качестве параметров этого метода будут ID инфоблока, который мы получим из параметра компонента, и ID текущего раздела, который мы получим с помощью метода CIBlockFindTools::GetSectionID.

$arResult['SECTION_ID'] = CIBlockFindTools::GetSectionID(
    $arResult['VARIABLES']['SECTION_ID'],
    $arResult['VARIABLES']['SECTION_CODE'],
    array(
        'IBLOCK_ID' => $arParams['IBLOCK_ID']
    )
);
$sectionResult = CIBlockSection::GetList(
    false,
    array(
        "IBLOCK_ID" => $arParams["IBLOCK_ID"],
        "ID" => $arResult["SECTION_ID"]
    ),
    false,
    array(
        'ID',
        'UF_NOT_USE_PRODUCT_QUANTITY'
    )
);
while ($sectionProp = $sectionResult->GetNext()) {
    if ($sectionProp['UF_NOT_USE_PRODUCT_QUANTITY'] == 1) {
        $arParams['USE_PRODUCT_QUANTITY'] = 'N';
    }
}	

Здесь мы получаем значение поля раздела 'UF_NOT_USE_PRODUCT_QUANTITY' (Запрет ввода количества), и если его значение равно "1" (что означает "Да"), то переназначаем параметр настройки компонента $arParams['USE_PRODUCT_QUANTITY'] на значение 'N'.

Теперь, именно в этом разделе каталога, пользователю больше не будут выводиться поля для выбора количества.

И по сути, тоже самое делаем в карточке товара: просто вставляем код приведенный выше в файле element.php комплексного шаблона каталога

Так же, если вам нужны все поля раздела включая все пользовательские поля, можете воспользоваться заметкой Получить все поля раздела, включая пользовательские, в section.php

Михаил Базаров 08.03.2023
Если нужно получить все пользовательские поля раздела, не обязательно перечислять все, достаточно указать UF_* в методе CIBlockSection::GetList
Код
$sectionResult = CIBlockSection::GetList(
    false,
    array(
        "IBLOCK_ID" => $arParams["IBLOCK_ID"],
        "ID" => $arResult["SECTION_ID"]
    ),
    false,
    array(
        'ID',
        'UF_*'
    )
);
while ($sectionProp = $sectionResult->GetNext()) {
   print_r($sectionProp);
}   
Михаил Базаров 08.03.2023
И тот же самый код на D7
Код
use Bitrix\Iblock\SectionTable;
use Bitrix\Main\Loader;

Loader::includeModule("iblock");

$sectionId = SectionTable::getList([
    'filter' => [
        '=IBLOCK_ID' => $arParams['IBLOCK_ID'],
        '=ID' => $arResult['VARIABLES']['SECTION_ID'],
        '=CODE' => $arResult['VARIABLES']['SECTION_CODE'],
    ],
    'select' => [
        'ID',
        'UF_NOT_USE_PRODUCT_QUANTITY'
    ]
])->fetch()['ID'];

if (!empty($sectionId)) {
    $sectionProps = SectionTable::getList([
        'filter' => [
            '=ID' => $sectionId,
            '=IBLOCK_ID' => $arParams['IBLOCK_ID'],
            '=UF_NOT_USE_PRODUCT_QUANTITY' => 1,
        ],
        'select' => [
            'ID',
            'UF_NOT_USE_PRODUCT_QUANTITY'
        ]
    ])->fetch();

    if (!empty($sectionProps) && $sectionProps['UF_NOT_USE_PRODUCT_QUANTITY'] == 1) {
        $arParams['USE_PRODUCT_QUANTITY'] = 'N';
    }
}

Обратите внимание, что в D7 используются другие методы для работы с инфоблоками, а именно класс Bitrix\Iblock\SectionTable для работы с секциями. Для использования данного класса нужно подключить модуль iblock. Также в D7 используются более современные методы получения данных, например метод getList с фильтром и выборкой. Кроме того, в данном примере используется проверка на пустое значение, чтобы избежать ошибок при обращении к несуществующим элементам.

Записная книжка разработчика

Примерно с 2013-го года пишу заметки по разработке сайтов на Битрикс.
Вы можете задавать уточняющие вопросы в комментариях- отвечаю или дополняю заметки по возможности.

Очистить брошенные корзины с помощью API 1С-Битрикс Просмотров: 1227 Задача: в интернет-магазине накапливается большое количество брошенных корзин, нужно их оч... Вывести имя пользователя добавившего элемент инфоблока в Битрикс Просмотров: 17275 Иногда, необходимо вывести имя пользователя добавившего элемент инфоблока. Например, автор... Fancybox в стандартном шаблоне детальной карточки товара, вместо вспл... Просмотров: 139 Задача: заменить работу с изображениями в стандартном или кастомном шаблоне детальной карт... Вывести минимальную цену торговых предложений в Битрикс Просмотров: 28180 Если у товара несколько торговых предложений и у каждого предложения разные цены, иногда т... Свойство: привязка к Яндекс:Картам - вывести из нескольких элементов ... Просмотров: 18720 Предположим, что у вас есть инфоблок со свойством "Привязка к яндекс картам". В этом инфоб... Получить и вывести пользовательские свойства склада в 1С-Битрикс Просмотров: 2391 Задача: вывести пользовательские свойства в подробном описании склада. При этом, есть и мн... Цвета торговых предложений из Highload инфоблоков в списке товаров Просмотров: 14952 Подвернулся на доработку очень старый сайт, работал еще на 11-ой версии Битрикс. Выполнили... Привязка к разделам в компоненте "Добавления элементов пользователем" Просмотров: 12854 В системе управления 1С Битрикс есть компонент "Форма добавления / редактирования" - котор... Автогенерация символьных кодов разделов и элементов Битрикс Просмотров: 16202 Иногда нужно создать символьные коды для разделов и элементов. Например: если сайт создан ... Модифицировать состав заказа #ORDER_LIST# в почтовом событии "Новый з... Просмотров: 30433 Если вы хотите как-то по особенному сверстать состав заказа в почтовом уведомлении 1С-Битр... Моментальная фильтрация на AJAX в умном фильтре 1С-Битрикс Просмотров: 26903 При штатной установке, интернет-магазина на 1С Битрикс, умный фильтр по товарам, показывае... Основные функции вывода в шаблонах Битрикс Просмотров: 158530 Знаю, что все их знают. Но иногда не бывает лишним собрать все самое используемое в одну к... Вывести артикул в печатную форму бланка заказа Просмотров: 1248 Задача: в печатную форму бланка заказа добавить артикулы товаров и данные о пользователе. ... Сниппеты типографики bootstrap, для Битрикс Просмотров: 8290 Если вы подключили bootstrap к своему сайту, или сверстали весь шаблон, подключив bootstra... Самодельная форма добавления элемента на API Битрикс Просмотров: 45456 Компонент iblock.element.add.form написан таким образом, что вы не сможете (не попотев изр... Смена вида карточек товаров в catalog.section с иммитацией AJAX Просмотров: 1669 Смену вида карточек товаров, в разделе каталога, можно реализовать с помощью сессии, запис... Time Capsule на Windows 10. Хранение бекапов Time Machine на компьюте... Просмотров: 7957 Заметку написал скорее для себя, что бы собрать все в одну кучу. Написана на базе нескольк... Добавить свойство в административную форму заказа Просмотров: 3941 Задача, кастомизировать административную форму заказа: добавить свойство заказа в шапку фо... Удалить товары из корзины, если есть определенные товары. Просмотров: 1954 Задача: если в корзину добавлены товары с определенным свойством, нужно удалить из корзины... Создание скидки на общую сумму покупки в Битрикс корзине Просмотров: 28365 Функционал интернет-магазина, работающего под управлением 1С Битрикс, позволяет задавать м...