Всем привет!
Есть проблема. В шаблоне компонента iblock.element.add.form отображаются поля для редактирования элемента инфоблока.
Я хочу сделать так, чтоб по клику на кнопку подгружалась бы дополнительная информация по элементу инфоблока, и чтоб эта дополнительная информация отображалась бы в боковой панели в правой части страницы.
Для этого есть компонент bitrix:ui.sidepanel.wrapper
Сейчас структура выглядит так:
/local/templates/main/components/bitrix/iblock.element.add.form/my-component-edit/template.php - шаблон компонента для редактирования элемента инфоблока
/local/templates/main/components/bitrix/iblock.element.add.form/my-component-edit/script.js - файл скриптов шаблона компонента, его содержимое:
Файл public/local/templates/main/components/bitrix/iblock.element.add.form/my-component-edit/sidepanelcontent.php:
Файл local/templates/main/components/bitrix/main.include/sidebar/template.php:
Файл local/templates/main/components/bitrix/iblock.element.add.form/fns-licenses-edit/include/sidebar.php:
То есть хочу, чтоб по клику на кнопку вызывался бы компонент bitrix:ui.sidepanel.wrapper, который бы в popup-окне отображал бы содержимое файла sidebar.php
Сами данные для sidebar.php я заранее получаю ajax-запросом. Сейчас бы разобраться, почему ошибка вылазиет:
Хотя в шаблонен компонента iblock.element.add.form я добавил строки
Но всё равно ошибка сохраняется, и var_dump($sidepanelLoaded); выводит null
Помогите пожалуйста
Есть проблема. В шаблоне компонента iblock.element.add.form отображаются поля для редактирования элемента инфоблока.
Я хочу сделать так, чтоб по клику на кнопку подгружалась бы дополнительная информация по элементу инфоблока, и чтоб эта дополнительная информация отображалась бы в боковой панели в правой части страницы.
Для этого есть компонент bitrix:ui.sidepanel.wrapper
Сейчас структура выглядит так:
/local/templates/main/components/bitrix/iblock.element.add.form/my-component-edit/template.php - шаблон компонента для редактирования элемента инфоблока
/local/templates/main/components/bitrix/iblock.element.add.form/my-component-edit/script.js - файл скриптов шаблона компонента, его содержимое:
| Код |
|---|
function openSettingsSlider()
{
console.log('openSettingsSlider:');
console.log('BX:', typeof BX);
console.log('BX.SidePanel:', typeof BX.SidePanel);
console.log('BX.UI:', typeof BX.UI);
console.log('window.top:', window.top);
console.log('window.parent:', window.parent);
// Проверяем, загружены ли скрипты
const scripts = document.querySelectorAll('script[src*="sidepanel"]');
console.log('Скрипты sidepanel:', scripts.length);
BX.SidePanel.Instance.open(
'/local/templates/main/components/bitrix/iblock.element.add.form/my-component-edit/sidepanelcontent.php', // URL страницы с контентом
{
width: 700,
cacheable: false,
allowChangeHistory: true,
events: {
onClose: function() {
// Обновить грид или другие элементы на странице
if (window.BX && window.BX.Main && window.BX.Main.gridManager) {
// Пример обновления грида
const gridInstance = BX.Main.gridManager.getById('your-grid-id');
if (gridInstance) {
gridInstance.reload();
}
}
}
}
}
);
} |
Файл public/local/templates/main/components/bitrix/iblock.element.add.form/my-component-edit/sidepanelcontent.php:
| Код |
|---|
<?php // slider-content.php - файл, который загружается в слайдер require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_before.php"); // Ваш код с компонентом $APPLICATION->IncludeComponent( 'bitrix:ui.sidepanel.wrapper', '', [ 'POPUP_COMPONENT_NAME' => 'bitrix:main.include', 'POPUP_COMPONENT_TEMPLATE_NAME' => 'sidebar', 'POPUP_COMPONENT_PARAMS' => [ 'AREA_FILE_SHOW' => 'file', 'PATH' => '/local/templates/main/components/bitrix/iblock.element.add.form/my-component-edit/include/sidebar.php', //'EDIT_MODE' => 'html', ], 'USE_UI_TOOLBAR' => 'Y', 'USE_PADDING' => true, 'PLAIN_VIEW' => false, 'PAGE_MODE' => false, 'CLOSE_AFTER_SAVE' => 'Y', 'RELOAD_GRID_AFTER_SAVE' => 'Y', ], false, ['HIDE_ICONS' => 'Y'] ); require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_after.php"); ?> |
Файл local/templates/main/components/bitrix/main.include/sidebar/template.php:
| Код |
|---|
<?
if(!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED!==true)die();
/** @var array $arParams */
/** @var array $arResult */
/** @global CMain $APPLICATION */
/** @global CUser $USER */
/** @global CDatabase $DB */
/** @var CBitrixComponentTemplate $this */
/** @var string $templateName */
/** @var string $templateFile */
/** @var string $templateFolder */
/** @var string $componentPath */
/** @var CBitrixComponent $component */
$this->setFrameMode(true);
if($arResult["FILE"] <> '')
include($arResult["FILE"]); |
Файл local/templates/main/components/bitrix/iblock.element.add.form/fns-licenses-edit/include/sidebar.php:
| Код |
|---|
<div id="sidebar"> <div class="sidebar-wrap"> test123 </div> <div class="close-btn">Закрыть</div> </div> |
То есть хочу, чтоб по клику на кнопку вызывался бы компонент bitrix:ui.sidepanel.wrapper, который бы в popup-окне отображал бы содержимое файла sidebar.php
Сами данные для sidebar.php я заранее получаю ajax-запросом. Сейчас бы разобраться, почему ошибка вылазиет:
| Код |
|---|
Uncaught TypeError: Cannot read properties of undefined (reading 'Instance') at openSettingsSlider (page_e3dfe4fe68b944aee3f765815d0a16a0_v1.js?178669741435460:680:18) at HTMLDivElement.onclick (edit/?DIRECTORY_ID=44&edit=Y&CODE=104707:1310:85) |
Хотя в шаблонен компонента iblock.element.add.form я добавил строки
| Код |
|---|
// Проверяем, загружен ли sidepanel
$sidepanelLoaded = \Bitrix\Main\UI\Extension::load('ui.sidepanel');
var_dump($sidepanelLoaded); // Для отладки
// Добавляем скрипты вручную через Asset
$asset = \Bitrix\Main\Page\Asset::getInstance();
$asset->addJs('/bitrix/js/ui/sidepanel/sidepanel.js');
$asset->addJs('/bitrix/js/ui/buttons/buttons.js');
$asset->addCss('/bitrix/css/ui/sidepanel/sidepanel.css');
CJSCore::Init(['core', 'ui.sidepanel']); |
Но всё равно ошибка сохраняется, и var_dump($sidepanelLoaded); выводит null
Помогите пожалуйста