Задать вопрос
yaleksandr89
@yaleksandr89
PHP developer

Bitrix как создать компонент, к которому будет доступ по ссылке?

Добрый день.

С битриксом работал не очень много и на уровне рефакторинга и модификации имеющегося функционала, а сейчас нужно разработать функционал, которого нет, поэтому проще помочь советом, буду признателен.

Требуется разработать функционал работы с соц.сетями, именно: "привязка", "отвязка", заполнение профиля, обновление текущих данных и ряд специфических требований.

На текущий момент "привязка" соц.сети лежит в уже сделанном компоненте (в последующем планирую его перенести). Поэтому решил начать создание компонента с реализации "отвязки", но на этом этапе возникли проблемы, которые пока решить не могу.

Поискал информацию по созданию компонентов:


Но в них создание компонента подразумевало "создать и вывести", у меня же чуть другие потребности. В ЛК авторизованного пользователя есть блок "соц.сети", если соц.сеть привязана, то по клику по иконке я должен попадать в метод, который отвяжет от текущего(авторизованного) пользователя данную соц.сеть.

Что я делал:
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 и там таких проблем нет.

Помогите разобраться, а то я что-то совсем запутался :(
  • Вопрос задан
  • 221 просмотр
Подписаться 1 Средний 7 комментариев
Пригласить эксперта
Ответы на вопрос 1
@RedDevil2
Если ты используешь новые компоненты с class.php то для них есть роуты (смотреть тут https://dev.1c-bitrix.ru/learning/course/index.php... и дальше по разделу)
В целом ты можешь сделать компонент который не будет ничего выводить и из другого компонента вызывать его роут, но с точки зрения архитектуры я бы так не делал. Лучше сделать компонент, который выведет кнопку отписаться и будет дергать свои же роуты
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы