Добрый день.
С битриксом работал не очень много и на уровне рефакторинга и модификации имеющегося функционала, а сейчас нужно разработать функционал, которого нет, поэтому проще помочь советом, буду признателен.
Требуется разработать функционал работы с соц.сетями, именно: "привязка", "отвязка", заполнение профиля, обновление текущих данных и ряд специфических требований.
На текущий момент "привязка" соц.сети лежит в уже сделанном компоненте (в последующем планирую его перенести). Поэтому решил начать создание компонента с реализации "отвязки", но на этом этапе возникли проблемы, которые пока решить не могу.
Поискал информацию по созданию компонентов:
Но в них создание компонента подразумевало "создать и вывести", у меня же чуть другие потребности. В ЛК авторизованного пользователя есть блок "соц.сети", если соц.сеть привязана, то по клику по иконке я должен попадать в метод, который отвяжет от текущего(авторизованного) пользователя данную соц.сеть.
Что я делал:
1) Создал директорию с компонентом web/local/components/custom/social.network
2) Создал 2 файла:
2.1) .description.php
<?php
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
$arComponentDescription = [
"NAME" => "Social network",
"DESCRIPTION" => "Управление социальными сетями в профиле",
"PATH" => [
"ID" => "custom",
],
];
?>
2.2) class.php
<?php
namespace custom\components;
if (!defined("B_PROLOG_INCLUDED") || B_PROLOG_INCLUDED !== true) die();
class SocialNetworkComponent extends \CBitrixComponent
{
public function executeComponent(): void
{
global $USER;
if (!$USER->IsAuthorized()) {
ShowError('Not authorized.');
return;
}
// Здесь будет реализована дальнейшая логика вызова метода в зависимости от url и переданного параметра
// Пример:
// /network/link/?name=vk
// /network/unlink/?name=vk
// /network/update/?name=vk
// ...
}
}
Если я правильно понял в битрикс нет привычного роутинга (примерно как в симфони или ларавел, где связал url с нужным методом, того или иного контроллера). Нашел возможность добавлять url в web/urlrewrite.php
<?php
$arUrlRewrite=array (
37 => [
'CONDITION' => '#^/network/unlink/#',
'RULE' => '',
'ID' => 'custom:social.network',
'PATH' => '/local/components/custom/social.network/class.php',
],
// в дальнейшем планирую добавить остальные url (пример: #^/network/link/#, #^/network/update/#)
);
Но при попытке перейти по site.com/network/unlink/?name=vk я вижу:
* либо белый экран
* либо, если закомментировать строчку , критическую ошибку
Fatal error: Uncaught Error: Class 'CBitrixComponent' not found in /var/www/public_html/current/web/local/components/custom/social.network/class.php:13 Stack trace: #0 /var/www/public_html/current/web/bitrix/modules/main/include/urlrewrite.php(159): include_once() #1 /var/www/public_html/current/web/bitrix/urlrewrite.php(2): include_once('/var/www/...') #2 {main} thrown in /var/www/public_html/current/web/local/components/custom/social.network/class.php on line 13
Суть ошибки понятна, непонятно как её исправить, так как рядом в директории custom которые также расширяют \CBitrixComponent и там таких проблем нет.
Помогите разобраться, а то я что-то совсем запутался :(