Bitrix sale location selector search

В модуле старого интернет-магазине всё было гораздо проще. С новым пришлось попыхтеть.

Все манипуляции будем проводить в новом, сконвернтированном магазине.

  • выбираем из таблицы связей b_sale_delivery2location связи
  • если связь — группа, то получаем её детей методом BitrixSaleLocationLocationTable::getChildren()
  • если связь — местоположение, то так же получаем её детей методом BitrixSaleLocationLocationTable::getChildren()

В итоге, в переменной $locationsDeliveryIds будет массив ID местоположений.

Есть ещё вот такой метод API получения местоположений доставки:

Но он, увы, не работает с группами местоположений.

Похожие записи

1С-Битрикс. LazyLoad или ленивая загрузка контента при включенном кешировании

В этой заметке я хочу рассказать о технологии LazyLoad или в простонародье «ленивая загрузка» в Битриксе. Метод, описанный мной, будет точно работать в компонентах catalog.section и news.list.

1C-Битрикс. Кастомизация нового шаблона компонента sale.order.ajax

С выходом нового шаблона компонента sale.order.ajax на форумах битрикса разгораются возмущения и недомения. Мол, теперь код всего шаблона на JavaScript и как его кастомизировать непонятно. На самом деле да, код js-скрипта составляет почти семь тысяч строк. Сходу в таком количестве кода, даже хорошо написанного (к сожалению, битрикс этим не балует), соблюдая паттерны программирования, будет непросто.

В этой заметке я покажу способ, как можно кастомизировать основной скрипт логики шаблона оформления заказа (order_ajax.js), не прибегая к его правке. Что нам это даёт? Когда прилетят очередные обновления шаблона, мы просто заменим его и всё. Все наши кастомизации будут работать (в теории).

1С-Битрикс. Защита от спама в регистрации без капчи

Не редкость, когда боты начинают регистрироваться на сайтах и захламлять списки пользователей своим присутствием. В «1С-Битрикс» можно включить капчу для защиты от спама. Но порой и капча не спасает, да и заставлять пользователей вводить код с капчи, я считаю, не гуманно. Воспользуемся другим трюком.

Если нужно получить список городов из модуля "Местоположения" можно воспользоваться API Битрикс. Данные местоположения можно использовать в любом месте сайта или в любом компоненте. Например в профиле пользователя или формах обратной связи.

Получение местоположений и вывод их в select

Для примера, буду выводить города в профиле пользователя. Данные должны записаться в стандартное поле "Город" с кодом "PERSONAL_CITY"

Сначала импортируем местоположения. Для этого проходим в административную панель по пути Магазин -> Настройки -> Местоположения -> Импорт местоположений и выбираем нужные данные. Для примера, я выберу регион Россия->Центр

Дожидаемся окончания импорта. Затем идем в шаблон компонента main.profile и открываем файл template.php в нужном месте шаблона вызываем местоположения с помощью API BitrixSaleLocationLocationTable::getList пока выводим все города, просто списком

Где в массивах:
‘filter’ — передали ID типа местоположения. В моем случае это 5-ый, города. И языковые настройки. Сюда можете предать любые типы: Улицы, Села, Страны, Регионы.
‘select’ — передали нужные для вывода данные, в моем случае русские названия (городов).

В итоге, получили список всех городов импортированных в местоположения. Теперь оформляем это в список c выбором select, где первым option (по умолчанию) будет ранее выбранный и сохраненный город. Самому селекту назначаем name="PERSONAL_CITY", что бы он сохранялся в стандартное поле пользователя- Город

Все, теперь пользователь может выбрать город из списка и он сохранится в нужное поле (Город). Но если городов очень много, например вы загрузили всю Россию, выбирать из такого списка будет очень тяжело. Поэтому.

Автопоиск по первым буквам из выпадающего списка select

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

Для этого воспользуемся готовым плагином SELECT2. Просто подключаем приложенные скрипты и файлы стилей. Можно подключить их прямо в template.php, если используете данный способ только в кабинете пользователя

Для select задаем любой удобный . И указываем плагину, какой select он должен обработать. Целиком это будет выглять так (комментарии прямо в коде):

Само собой, стили и скрипты плагина, лучше всего подключать через API Битрикс, для оптимизации работы. В примере оставил "по старинке", что бы не усложнять объяснение.

В общем-то и все. Использовать данный плагин можно с любым select-ом. Так же и получение местоположений, можете использовать в любом месте сайта, в любом компоненте или шаблоне.

Компонент выводит форму, в которой выбор местоположения осуществляется с помощью ввода запроса в строку поиска. Компонент стандартный и входит в дистрибутив модуля.

В визуальном редакторе компонент расположен по пути: Магазин > Процедура оформления заказа > Привязка к местоположению: строка поиска.

Компонент относится к модулю Интернет-магазин.

Секции настроек компонента:

Описание параметров

Поле Параметр Описание
Основные параметры
ID местоположения ID Идентификатор местоположения, которое должно быть отображено в форме. Можно не задавать, если задан Символьный код местоположения.
Символьный код местоположения CODE Символьный код местоположения, которое должно быть отображено в форме. Можно не задавать, если задан ID местоположения.
Имя поля ввода INPUT_NAME Задается название переменной для имени поля ввода.
Сохранять связь через PROVIDE_LINK_BY Указывается, что необходимо записать в форму ввода при выборе местоположения: идентификатор (id) или символьный код (code).
Источник данных
Фильтровать по сайту FILTER_BY_SITE [Y|N] При отмеченной опции поиск местоположений осуществляется только среди тех, которые привязаны к сайту.
Отображать местоположения по-умолчанию SHOW_DEFAULT_LOCATIONS [Y|N] При отмеченной опции вверху формы поиска будут отображены избранные местоположения.
Cайт FILTER_SITE_ID Указывается сайт, по местоположениям которого будет делаться выборка.
Настройки кеширования
Тип кеширования CACHE_TYPE Тип кеширования:

  • A — Авто + Управляемое: автоматически обновляет кеш компонентов в течение заданного времени или при изменении данных;
  • Y — Кешировать: для кеширования необходимо определить время кеширования;
  • N — Не кешировать: кеширования нет в любом случае.
Время кеширования (сек.) CACHE_TIME Время кеширования, указанное в секундах.
Дополнительные настройки
Идентификатор javascript-контрола JSCONTROL_GLOBAL_ID Системный параметр. Не описывается.
Javascript-функция обратного вызова JS_CALLBACK Системный параметр. Не описывается.
Не показывать ошибки, если они возникли при загрузке компонента SUPPRESS_ERRORS [Y|N] При отмеченной опции ошибки, возникающие при загрузке компонента, отображаться не будут.
Инициализировать компонент только при наступлении указанного javascript-события на объекте window.document INITIALIZE_BY_GLOBAL_EVENT Название javascript-события, при наступлении которого будет инициализироваться компонент.

Пользовательские комментарии

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

Для этого нужно всего лишь авторизоваться на сайте

Но помните, что Пользовательские комментарии, несмотря на модерацию, не являются официальной документацией. Ответственность за их использование несет сам пользователь.

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.


[an error occurred while processing the directive]
Карта сайта