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

Всем привет

Хотел бы узнать, возможно ли разместить форму внутри каждого тега, чтобы в верхней части темы отображались необходимые данные о клиенте, например, в виде тега.

Эту форму можно было бы добавлять в несколько тем, и она отображала бы данные клиента, например,

без необходимости создавать категорию, поскольку категории мы создаем по другим критериям.

Или есть какие-то другие решения, которые помогли бы автоматически отображать данные клиента в нескольких темах и категориях?

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

Однако я могу ошибаться. Не могли бы вы подробнее рассказать об этом? Спасибо.

Какой плагин может помочь мне настроить этот рабочий процесс?

Привет! Не могли бы вы подробнее раскрыть ваш первоначальный вопрос? Возможно, я его неправильно понял.

Кажется, вам, скорее всего, потребуется какое-то кастомное решение, но точно сказать сложно без дополнительных деталей.

Ищете ли вы форму в теле темы, которая добавляет теги к теме на основе содержимого этой формы? Если да, то, возможно, вам удастся обойтись компонентом темы.

Если я правильно понял ваш вопрос, то получается, что вы используете отдельный тег для каждого клиента и хотите, чтобы расширенное описание клиента отображалось при просмотре любой темы с этим тегом.

Это не совсем форма, но компонент Баннеры тегов, который можно увидеть здесь на Meta, может помочь вам продвинуться в этом направлении:

После установки этого компонента вы сможете добавить текстовое описание для каждого тега, которое будет отображаться в баннере при выборе самого тега. Поле ввода текста поддерживает HTML и может быть стилизовано с помощью пользовательского CSS, так что возможностей для кастомизации довольно много. Вот очень простой пример, где я редактирую тег:

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

Спасибо @toddz, это очень помогло, это именно то, что мне нужно.

Что касается @NateDhaliwal, баннер тега мне очень поможет, но теперь мой вопрос:

Как сделать так, чтобы он отображался внутри темы, то есть когда я добавляю тег, детали появляются в верхней части темы?

:+1: Отлично, раз я понял ваш вопрос, я отредактирую заголовок этой темы, чтобы, возможно, больше людей обратили на неё внимание.

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

Вам может повезти, и кто-то подумает, что это звучит увлекательно — в противном случае, возможно, вам придётся определить бюджет проекта и разместить запрос в канале Marketplace.

Я проверяю, возможно ли это, экспериментирую с этим в форке. Никаких гарантий, однако!

@Eman_Ahmed Я добавил это в этот форк:

Он берёт первый тег темы и отображает его. Управление осуществляется через настройку show on topics. Если тегов нет, баннер скрыт.

Очень круто с твоей стороны взяться за это, Нейт. Мне самому это пока не нужно, но я с энтузиазмом хотел попробовать. Всё работает отлично!

Однако я заметил одну загвоздку, когда у темы несколько тегов. (И сложно представить управление вещами с одним тегом на тему.)

Теги сортируются либо по алфавиту, либо по популярности…

image

…поэтому автор не может напрямую контролировать, какой тег будет показан первым.

Я подумал, что использование неалфавитного символа в начале клиентских тегов (~ClientName) всегда будет поднимать их в начало списка. Это работает на странице /tags, но не на самой теме, где список тегов просто игнорирует символ ~. :face_with_diagonal_mouth:

В теме прошлого года, похоже, можно было вставлять определённые неалфавитные символы невидимо, чтобы принудительно изменить порядок сортировки: Невидимый способ принудительного изменения порядка отображения тегов?, но сейчас это, кажется, не работает. Когда я сегодня создаю тег с апострофом или запятой, его либо отклоняют, либо они беззвучно удаляются. (Не совсем понятно, почему ~ принимается.)

Настройка сортировки тегов, показанная выше, влияет и на страницу /tags, и на список тегов в темах — но, видимо, они используют разные алгоритмы сортировки?

Хм… Я полагаю, это действительно зависит от того, что хочет сделать OP. Если есть 1 тег → 1 тема → 1 пользователь, то это сработает. В противном случае потребуется больше информации :person_shrugging:.

Спасибо за ваш вклад!

Я хотел бы узнать, возможно ли добавить это в официальный список обновлений функций.

У меня также есть сценарии, где это было бы очень уместно использовать.

Хм… не уверен, что это полностью соответствует основной концепции «баннера тега», поскольку он предназначался для отображения информации о теге на странице самого тега, а здесь информация о теге показывается в темах с этим тегом :person_shrugging:.

Отдельно отмечу, что в основной компонент были внесены некоторые обновления, поэтому мне нужно будет обновить форк. Однако имейте в виду, что форк задумывался лишь как концепт-доказательство.

Да, я не уверен, что это будет достаточно широко востребовано, чтобы добавлять функции в оригинальный плагин. Отдельная версия или дополнение под названием «Tagged Topic Banner» могло бы быть более уместным.

Но я считаю, что полезность довольно ограничена, если нет также способа для автора указать, какой тег будет основным. Единственные идеи, которые приходят мне в голову, это…

1.) Хак вроде того, чтобы при алфавитной сортировке символ ~ считался первым в списке.

AskBot предложил подход с использованием патча-обёртки для плагина
# plugin.rb
after_initialize do
  module ::CustomTagSort
    def custom_tag_sort(tags)
      tags.sort_by do |tag|
        # Ставит теги с префиксом ~ первыми, затем сортирует по алфавиту A-Z
        [tag.name.start_with?("~") ? 0 : 1, tag.name.downcase]
      end
    end
  end

  # Патч в сериализатор/метод, вычисляющий visible_tags или аналогичный
  require_dependency 'topic_tags_mixin'
  TopicTagsMixin.prepend(Module.new do
    private

    def all_tags
      return @tags if defined?(@tags)
      tags = topic.visible_tags(scope)
      if SiteSetting.tags_sort_alphabetically
        tags = ::CustomTagSort.custom_tag_sort(tags)
      else
        topic_count_column = Tag.topic_count_column(scope)
        tags = tags.sort_by { |tag| tag.public_send(topic_count_column) }.reverse
      end
      @tags = tags
    end
  end)
end

2.) Ещё лучше: сортировка тегов согласно указанному порядку групп тегов.

Поиск показывает множество тем с запросами на более тонкий контроль порядка тегов, так как это часто важно по разным причинам (род → вид, марка → модель и т. д.), — но ответы указывают, что это потребует довольно значительных усилий.

Предложение: можно ли включить возможность прикреплять файлы под описанием тега

@NateDhaliwal

Я даже не думаю, что официальный вариант это поддерживает. Также,

Кроме того, в настоящее время я не поддерживаю этот компонент.