Добавить виджет на Главную страницу: наш вайб landing.repowidget.register
Scope:
landingКто может выполнять метод: любой пользователь
Метод landing.repowidget.register добавляет виджет для Главной страницы: наш вайб. Возвращает ошибку или идентификатор ID добавленного виджета.
При добавлении выполняется проверка. Если виджет с кодом code уже зарегистрирован ранее, то происходит обновление его контента. Виджеты, уже размещенные на Вайбах, в случае обновления контента обновляются автоматически.
Параметры метода
Обязательные параметры отмечены *
|
Название |
Описание |
|
code* |
Уникальный код виджета. Настоятельно рекомендуется использовать какой-либо уникальный префикс для своих виджетов, чтобы избежать риск совпадения кодов с виджетами других разработчиков |
|
fields* |
Значения полей для создания виджета |
Параметр fields
Обязательные параметры отмечены *
|
Название |
Описание |
|
NAME |
Название виджета |
|
PREVIEW |
URL картинки-обложки виджета для слайдера выбора виджетов |
|
DESCRIPTION |
Описание виджета |
|
CONTENT |
Верстка виджета с использованием конструкций Vue |
|
SECTIONS |
Код раздела, в который будет добавлен виджет. Список доступных разделов:
|
|
WIDGET_PARAMS |
Параметры для vue-шаблонизатора. Если их нет, то блок останется обычным html-кодом с |
|
ACTIVE |
Активность виджета. Принимает значения:
|
|
SITE_TEMPLATE_ID |
Привязка виджета к определенному шаблону сайта. Только для коробочного Битрикс24! |
Параметр WIDGET_PARAMS
Обязательные параметры отмечены *
|
Название |
Описание |
|
rootNode* |
Селектор корневого элемента в верстке, который будет превращен во vue-component. Корневой элемент должен быть единственным элементом в передаваемом шаблоне, вся остальная разметка будет очищена |
|
lang |
Массив языковых фраз, использующихся в конструкциях |
|
handler* |
Адрес внешнего обработчика, к которому будут выполняться запросы. Важно: Обработчик должен быть доступен из внешней сети! Проверяйте доступность обработчика специальными сервисами |
|
style |
Адрес стилей для виджета. Стили также могут быть заданы инлайново в разметке через привязку |
|
demoData* |
Демо-данные для виджета, которые будут использованы для демонстрации виджета в шаблонах Вайба в Битрикс24 Маркетплейс. Если вы разрабатываете виджет для конкретного Битрикс24 и не планируете публиковать его в Маркет, то можете указать в качестве значения параметра произвольный массив, он все равно не будет использован. Однако, если вы готовите тиражное решение с виджетом, уделите демонстрационным данным максимальное внимание — именно они будут отображаться в слайдере предварительного просмотра шаблона Вайба! Очевидно, что структура демо-данных должна соответствовать той, которую вернул бы ваш обработчик |
Примеры кода
Как использовать примеры в документации
try
{
const response = await $b24.callMethod(
'landing.repowidget.register',
data
);
const result = response.getData().result;
if (result.error())
{
console.error(result.error());
return;
}
console.info(result);
}
catch( error )
{
console.error('Error:', error);
}
try {
$response = $b24Service
->core
->call(
'landing.repowidget.register',
[
'code' => 'my_widget',
'fields' => [
'NAME' => 'My widget',
'PREVIEW' => 'https://my-app.com/vibe_preview.jpg',
'CONTENT' => $content,
'SECTIONS' => 'widgets_company_life',
'WIDGET_PARAMS' => [
'rootNode' => '.my-app-w-container',
'lang' => [
'ru' => [
'W_TITLE' => 'Люди и их возраст',
'W_EMPTY' => 'Нет людей',
],
'en' => [
'W_TITLE' => 'People and their ages',
'W_EMPTY' => 'Empty',
],
],
'handler' => 'https://my-app.com/vibe.php',
'style' => 'https://my-app.com/vibe.css',
'demoData' => [
'desc' => 'Just a test widget',
'count' => 420,
'persons' => [
['name' => 'Person 1', 'age' => 21],
['name' => 'Person 2', 'age' => 42],
['name' => 'Person 3', 'age' => 123],
],
],
],
],
]
);
$result = $response
->getResponseData()
->getResult();
echo 'Success: ' . print_r($result, true);
// Нужная вам логика обработки данных
processData($result);
} catch (Throwable $e) {
error_log($e->getMessage());
echo 'Error registering repowidget: ' . $e->getMessage();
}
const content = `
<div class="my-app-w-container">
<h2 class="w-title" :style="{borderBottom: '1px solid red'}">
{{$Bitrix.Loc.getMessage('W_TITLE')}}
</h2>
<h3>Description: {{desc}}</h3>
<div v-for="(value) in persons">
<p>
<span class="w-name">{{value.name}}</span>:
<span class="w-age">{{value.age}}</span>
</p>
</div>
<div v-if="persons == null">
{{$Bitrix.Loc.getMessage('W_EMPTY')}}
</div>
<h4>Just a number {{count}}</h4>
<div class="w-buttons">
<button @click="fetch">Получить данные (без параметров)</button>
<button @click="fetch({param: 'a'})">Данные для параметра 'a'</button>
<button @click="fetch({param: 'b'})">Данные для параметра 'b'</button>
<button @click="openApplication({param1: '1', param2: 'false'})">Открыть приложение</button>
<button @click="openPath('/crm')">Открыть локальный адрес в слайдере</button>
</div>
</div>
`;
const data = {
code: 'my_widget',
fields: {
NAME: 'My widget',
PREVIEW: 'https://my-app.com/vibe_preview.jpg',
CONTENT: content,
SECTIONS: 'widgets_company_life',
WIDGET_PARAMS: {
rootNode: '.my-app-w-container',
lang: {
ru: {
W_TITLE: 'Люди и их возраст',
W_EMPTY: 'Нет людей',
},
en: {
W_TITLE: 'People and their ages',
W_EMPTY: 'Empty',
},
},
handler: 'https://my-app.com/vibe.php',
style: 'https://my-app.com/vibe.css',
demoData: {
desc: 'Just a test widget',
count: 420,
persons: [
{'name': 'Person 1', 'age': 21},
{'name': 'Person 2', 'age': 42},
{'name': 'Person 3', 'age': 123},
],
},
},
},
};
BX24.callMethod(
'landing.repowidget.register',
data,
(result) =>
{
if (result.error())
{
console.error(result.error());
return;
}
console.info(result.data());
},
);
require_once('crest.php');
$content = <<<'HTML'
<div class="my-app-w-container">
<h2 class="w-title" :style="{borderBottom: '1px solid red'}">
{{$Bitrix.Loc.getMessage('W_TITLE')}}
</h2>
<h3>Description: {{desc}}</h3>
<div v-for="(value) in persons">
<p>
<span class="w-name">{{value.name}}</span>:
<span class="w-age">{{value.age}}</span>
</p>
</div>
<div v-if="persons == null">
{{$Bitrix.Loc.getMessage('W_EMPTY')}}
</div>
<h4>Just a number {{count}}</h4>
<div class="w-buttons">
<button @click="fetch">Получить данные (без параметров)</button>
<button @click="fetch({param: 'a'})">Данные для параметра 'a'</button>
<button @click="fetch({param: 'b'})">Данные для параметра 'b'</button>
<button @click="openApplication({param1: '1', param2: 'false'})">Открыть приложение</button>
<button @click="openPath('/crm')">Открыть локальный адрес в слайдере</button>
</div>
</div>
HTML;
$data = [
'code' => 'my_widget',
'fields' => [
'NAME' => 'My widget',
'PREVIEW' => 'https://my-app.com/vibe_preview.jpg',
'CONTENT' => $content, // Vue-разметка вынесена в отдельную переменную для удобства
'SECTIONS' => 'widgets_company_life',
'WIDGET_PARAMS' => [
'rootNode' => '.my-app-w-container',
'lang' => [
'ru' => [
'W_TITLE' => 'Люди и их возраст',
'W_EMPTY' => 'Нет людей',
],
'en' => [
'W_TITLE' => 'People and their ages',
'W_EMPTY' => 'Empty!',
],
],
'handler' => 'https://my-app.com/vibe.php',
'style' => 'https://my-app.com/vibe.css',
'demoData' => [
'desc' => 'Just a test widget',
'count' => 420,
'persons' => [
[
'name' => 'Person 1',
'age' => 21,
],
[
'name' => 'Person 2',
'age' => 42,
],
[
'name' => 'Person 3',
'age' => 123,
],
],
],
],
],
];
$result = CRest::call(
'landing.repowidget.register',
$data
);
echo '<PRE>';
print_r($result);
echo '</PRE>';
Обработка ответа
HTTP-статус: 200
{
"result": 10,
"time": {
"start": 1713949410.036288,
"finish": 1713949411.632775,
"duration": 1.596487045288086,
"processing": 0.6458539962768555,
"date_start": "2024-04-24T11:03:30+02:00",
"date_finish": "2024-04-24T11:03:31+02:00",
"operating": 0
}
}
Возвращаемые данные
|
Название |
Описание |
|
result |
Идентификатор добавленного виджета |
|
time |
Информация о времени выполнения запроса |
Обработка ошибок
Статусы и коды системных ошибок
HTTP-статус: 20x, 40x, 50x
Описанные ниже ошибки могут возникнуть при вызове любого метода
|
Статус |
Код |
Описание |
|
|
|
Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Возникла внутренняя ошибка сервера, обратитесь к администратору сервера или в техническую поддержку Битрикс24 |
|
|
|
Превышен лимит на интенсивность запросов |
|
|
|
Текущий метод не разрешен для вызова с помощью batch |
|
|
|
Превышена максимальная длина параметров, переданных в метод batch |
|
|
|
Неверный access-токен или код вебхука |
|
|
|
Для вызовов методов требуется использовать протокол HTTPS |
|
|
|
REST API заблокирован из-за перегрузки. Это ручная индивидуальная блокировка, для снятия необходимо обращаться в техническую поддержку Битрикс24 |
|
|
|
REST API доступен только на коммерческих планах |
|
|
|
У пользователя, с чьим access-токеном или вебхуком был вызван метод, не хватает прав |
|
|
|
Манифест недоступен |
|
|
|
Запрос требует более высоких привилегий, чем предоставляет токен вебхука |
|
|
|
Предоставленный access-токен доступа истек |
|
|
|
Пользователь не имеет доступа к приложению. Это означает, что приложение установлено, но администратор портала разрешил доступ к этому приложению только конкретным пользователям |
|
|
|
Публичная часть сайта закрыта. Чтобы открыть публичную часть сайта на коробочной установке отключите опцию «Временное закрытие публичной части сайта». Путь к настройке: Рабочий стол > Настройки > Настройки продукта > Настройки модулей > Главный модуль > Временное закрытие публичной части сайта |
Продолжите изучение
- Удалить виджет для Вайба landing.repowidget.unregister
- Получить список виджетов landing.repowidget.getlist
- Включить режим отладки landing.repowidget.debug