Документация для разработчиков
Темная тема

Контентный слайдер. Верстка

Начало работы

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


start-needle.png

В этом случае приходится при открытии слайдера в параметре contentCallback указывать верстку, копируя или верстая заново.

Также, если из iframe-слайдера открыть контентный слайдер, то контент отобразится без стилей. Это вызвано тем, что необходимые ui-экстешны подключаются в документе iframe-слайдера, а контентный слайдер создается в документе top-окна.


start-wrong.png

Экстеншн ui.sidepanel.layout решает эти задачи подобно компоненту ui.sidepanel.wrapper.

Использование

Доступно с v22.400.200.

\Bitrix\Main\UI\Extension::load('ui.sidepanel.layout');

Рассмотрим типовой случай. Нужно открыть слайдер в типовом шаблоне с:

  • заголовком
  • тулбаром с кнопкой настройки
  • формой на основе ui.forms
  • панелью с кнопками

start-needle.png

import {Layout} from 'ui.sidepanel.layout';

BX.SidePanel.Instance.open("demo:my-example", {
	width: 800,
	contentCallback: () => {
		return Layout.createContent({
			extensions: ['ui.forms'],
			title: 'Заголовок слайдера',
			toolbar ({Button})
			{
				return [
					new Button({
						icon: Button.Icon.SETTING,
						color: Button.Color.LIGHT_BORDER,
						onclick: () => alert('Settings!')
					}),
				];
			},
			content ()
			{
				return `
					<div>Поле 1</div>
					<div class="ui-ctl ui-ctl-textbox ui-ctl-w100">
						<input type="text" class="ui-ctl-element">
					</div><br><br>

					<div>Поле 2</div>
					<div class="ui-ctl ui-ctl-textbox ui-ctl-w100">
						<input type="text" class="ui-ctl-element">
					</div><br><br>

					<div>Поле 3</div>
					<div class="ui-ctl ui-ctl-textbox ui-ctl-w100">
						<input type="text" class="ui-ctl-element">
					</div>
				`;
			},
			buttons ({cancelButton, SaveButton})
			{
				return [
					new SaveButton({
						onclick: () => {
							alert('saved!');
							BX.SidePanel.Instance.close();
						}
					}),
					cancelButton,
				];
			},
		});
	},
});

Как видим в коде, в contentCallback возвращаем результат вызова Layout.createContent. Настройка верстки делается через параметры вызова Layout.createContent.

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

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

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

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

Также Пользовательские комментарии не являются местом для обсуждения функционала. По подобным вопросам обращайтесь на форумы.
0
Руслан Лев
Сообщение не промодерировано, возможны ошибки и неточности.
Пример, работающий уже из консоли
Код
BX.SidePanel.Instance.open("dealer.add.slider", {
    width: 370,
    title: 'Добавить дилера',
    contentCallback: function(slider) {
        return BX.Runtime.loadExtension('ui.sidepanel.layout').then(() => {
            return BX.UI.SidePanel.Layout.createContent({
                title: 'Добавить дилера',
                extensions: ['ui.buttons', 'ui.forms'],
                design:{ section: false, margin: true },
                toolbar ({Button})
                {
                    return [
                        new Button({
                            icon: Button.Icon.SETTING,
                            color: Button.Color.LIGHT_BORDER,
                            onclick: () => alert('Settings!')
                        }),
                    ];
                },
                buttons ({cancelButton, SaveButton})
                {
                    return [
                        new SaveButton({
                            onclick: () => {
                                alert('saved!');
                                BX.SidePanel.Instance.close();
                            }
                        }),
                        cancelButton,
                    ];
                },
                content: function() {
                    return `<div>
                                <h3>Добавление нового дилера</h3>
                                <div class="ui-ctl ui-ctl-textbox ui-ctl-w100">
                                    <input type="text" class="ui-ctl-element" placeholder="Имя дилера">
                                </div>
                                <div class="ui-ctl ui-ctl-textbox ui-ctl-w100">
                                    <input type="text" class="ui-ctl-element" placeholder="Контактный телефон">
                                </div>
                            </div>`
                },
            })
        })
    }
})
0
Александр Чепурнов
Сообщение не промодерировано, возможны ошибки и неточности.
Цитата
пишет:
Я правильно понимаю, что вместо того чтобы исправлять ошибку подгрузки стилей (т.е. подгружать их не в основную страницу, а в родительский iframe) вы сделали еще одну прослойку с дозагрузкой стилей?
Сайдбар открывается во фрейме. Ошибки тут нет.
Если нужны стили во фрейме стандартные, то используете прослойку. Если не нужны то не используете
1
Иван Рыков
Сообщение не промодерировано, возможны ошибки и неточности.
Цитата
пишет:
Я правильно понимаю, что вместо того чтобы исправлять ошибку подгрузки стилей (т.е. подгружать их не в основную страницу, а в родительский iframe) вы сделали еще одну прослойку с дозагрузкой стилей?
Совершенно верно=)
4
Андрей Николаев
Сообщение не промодерировано, возможны ошибки и неточности.
Я правильно понимаю, что вместо того чтобы исправлять ошибку подгрузки стилей (т.е. подгружать их не в основную страницу, а в родительский iframe) вы сделали еще одну прослойку с дозагрузкой стилей?
© «Битрикс», 2001-2024, «1С-Битрикс», 2024
Наверх