Ссылка на пользовательский профиль

:discourse2: Краткое описание Добавить пользовательскую ссылку в профиль пользователя
:hammer_and_wrench: Репозиторий GitHub - chapoi/discourse-profile-custom-link · GitHub
:question: Инструкция по установке Как установить тему или компонент темы
:open_book: Новичок в темах Discourse? Руководство для начинающих по использованию тем Discourse

Установить этот компонент темы

Небольшой компонент для добавления настраиваемой ссылки в профиль пользователя.

Отображается на…

  1. Расширенном профиле пользователя

  2. Карточке пользователя

Настройки

Если оставить поле profile custom link field пустым, по умолчанию будет использоваться имя пользователя. В приведённом примере ссылка будет вести на:

http://github.com/charlie

Если вы хотите использовать пользовательское поле ввода, необходимо установить значение в точное имя поля пользователя, например:

  1. Создайте поле пользователя

  2. Установите настройку в имя поля пользователя

  3. Попросите пользователей заполнить это поле
    /u/[username]/preferences/profile

Теперь ссылка будет вести на http://github.com/MyRealGithubName


Для более продвинутой реализации ознакомьтесь с компонентом Несколько пользовательских ссылок в профиле

24 лайка

Получит ли это атрибут «nofollow»? Будет ли оно отправлено в Akismet?

Это точно будет использоваться спамерами!

1 лайк

Всего лишь маленькое замечание: должно быть http://github.com/, верно?

Также есть ли какая-то особая причина, почему здесь предлагается http GitHub вместо https?

4 лайка

Ха-ха, да, это опечатка. Спасибо. Я здесь не изобретаю заново структуру URL :winking_face_with_tongue:

Никакой

4 лайка

Привет @chapoi! Так рад, что я нашел этот компонент. Я только что добавил его на наш форум, спасибо! Возможно, я даже перейду на версию «несколько ссылок».

Короткое замечание: в тексте описания под полем «пользовательская иконка ссылки профиля» есть лишнее слово «the» :slight_smile:

Есть ли какая-то конкретная причина, по которой я должен добавлять компонент для этого, вместо того чтобы добавить еще один тип поля в «Пользовательские поля»?

С уважением

2 лайка

Отличное замечание. :+1: Это должно всё исправить:

4 лайка

[quote=“Julian R, пост:5, тема:295470, имя пользователя:Julian2”]
Есть ли какая-то конкретная причина, по которой я должен добавлять компонент для этого, вместо того чтобы добавлять ещё один тип поля в «Поля пользователя»?[/quote]

Не совсем понял ваш вопрос. Поля пользователя отображаются на профиле или карточке пользователя не автоматически.

2 лайка

Привет, Чарли,
извини, что не был более понятен. Было бы здорово, если бы для полей пользователей появился тип поля, позволяющий добавлять ссылки, а не только текст.

Или мы вообще неправильно используем поля пользователей? Вот как мы используем их сейчас:

Ссылки приходится копировать и вставлять, вместо того чтобы просто на них нажимать.

1 лайк

Хорошо, теперь я понял, спасибо!

Да, это действительно справедливое замечание. Я изучу возможность реализации вашего предложения; думаю, что для этого есть причина, но пока я не знаю, какая именно.

2 лайка

Отлично, спасибо! :bouquet:

1 лайк

Итак, я посмотрел, но необходимые изменения явно超出了我的设计能力 (читай: бэкенд, базы данных) — поэтому, боюсь, придётся использовать плагин.

Вы могли бы рассмотреть вариант с запросом новой функции и посмотреть, вызовет ли это больше интереса.

Всего доброго!

2 лайка

Это решение отличное, и мы надеемся, что сможем помочь его улучшить. Ссылка на наш профиль имеет вид «https://www.domain.com/user/[USER-ID]/». Заключительный слэш нарушает работу решения для нас. Я могу добавить переписывание URL, но лучшим решением было бы сделать код более адаптивным. Мне нужны работающие реальные ссылки, ведущие на сайт!

Я пытался преобразовать плагин в тему, чтобы улучшить JavaScript, но функция «CONVERT Discourse» вроде бы не работает.

Можете ли вы обновить код, добавив новую функциональность?


import Component from "@glimmer/component";
import { tracked } from "@glimmer/tracking";
import { service } from "@ember/service";

export default class ProfileCustomLink extends Component {
  @service site;
  @tracked customLinkUrl;
  @tracked customLinkFieldId;
  @tracked showCustomLink = false;
  @tracked user = this.args.model.username;
  @tracked userFields = this.args.model.user_fields;

  constructor() {
    super(...arguments);

    if (settings.profile_custom_link_field) {
      const siteUserFields = this.site.user_fields;

      if (!siteUserFields) {
        return;
      }

      const customLinkField = siteUserFields.filterBy(
        "name",
        settings.profile_custom_link_field
      )[0];

      if (!customLinkField) {
        return;
      }

      this.customLinkFieldId = this.userFields[customLinkField.id];
      if (!this.customLinkFieldId) {
        return;
      } else {
        this.showCustomLink = true;
        if (settings.profile_custom_link_prefix.includes("[CUSTOM-LINK-FIELD-ID]")) {
          const url = settings.profile_custom_link_prefix.replace("[CUSTOM-LINK-FIELD-ID]", this.customLinkFieldId);
          this.customLinkUrl = url;
        } else {
          const url = settings.profile_custom_link_prefix + this.customLinkFieldId;
          this.customLinkUrl = url;
        }
      }
    } else {
      const url = settings.profile_custom_link_prefix + this.user;
      this.customLinkUrl = url;
      this.showCustomLink = true;
    }
  }
}

@Julian2 Я только что опубликовал запрос на эту функцию здесь, не видел ваших постов на эту тему

2 лайка

Похоже, этот компонент перестал работать в версии v2025.11

[ТЕМА 2 'Ссылка на пользовательский профиль'] Уведомление об устаревании: Метод array.filterBy — это устаревшее расширение массива Ember. Используйте нативные методы массива или TrackedArray. [устарело с версии Discourse 3.6.0.beta1-dev] [id устаревания: discourse.native-array-extensions.filterBy]

1 лайк

У меня версия 2025.12, и у меня всё ещё работает. Это всего лишь предупреждение о устаревании, а не ошибка, так что всё должно быть в порядке.

Можешь рассказать подробнее, с чем именно ты столкнулся?

1 лайк

Действительно, выяснилось, что проблема была вызвана ошибкой пользователя.

3 лайка