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

Всем привет

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

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

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

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

I don’t think there’s an existing functionality for this. You’d likely have to use a plugin.

However, I could be mistaken. Could you elaborate further on this? Thanks.

which plugin could help me build this workflow?

Hi there, could you elaborate further on your original question? I might be misunderstanding it.

I think you might have to do something custom, but it’s hard to say for sure without more details.

Is what you’re looking for a form in the tooic post, and adds tags to the topic based on the form’s content? Because then you might be able to get away with a Theme Component instead.

If I’m reading your question correctly, it sounds like you use a tag for each client, and you want an extended client description to show up when viewing any topic having that tag.

It’s not a form really, but the Tag Banners component, as seen here on Meta, might get you halfway there:

With this component installed, you can add a text description for each tag that will appear in a banner shown when the tag itself is selected. The text field takes HTML and can be styled with custom CSS so you could do quite a bit with it, but here’s a very plain example where I’m editing a tag:

The challenge would be to alter this component so that it shows up not only on the tag page, but on each topic using that tag. I don’t know how much work that might be, but a more experienced coder (like Nate…) might have some idea.

2 лайка

Thanks @toddz that helped a lot that’s what I need

well "@NateDhaliwal the tag banner will help me a lot but now my question is:

How to make it appear in the topic itself where when I add the tag the details appear on the top of the topic

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

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

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

2 лайка

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

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

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

2 лайка

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

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

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

image

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

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

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

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

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

1 лайк

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

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

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

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

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

2 лайка

Да, я не уверен, что это будет достаточно широко востребовано, чтобы добавлять функции в оригинальный плагин. Отдельная версия или дополнение под названием «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.) Ещё лучше: сортировка тегов согласно указанному порядку групп тегов.

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

1 лайк

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

@NateDhaliwal

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

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

1 лайк