Текст-заполнитель шаблона темы компонента Topic

Заглушка для компонента темы «Шаблон темы»

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

Это дает возможность предоставлять пользовательские инструкции в виде заглушки для каждой темы.

Например:

Это обычный текст заглушки (водяного знака).

NB: Вы уже можете изменить это для всего сайта, изменив пользовательский текст.

Перейдите в Администрирование >> Настройка >> Текст

Затем найдите текст, который вы видите на экране.
Поиск по запросу «BBCode» должен привести вас к нужному элементу:

Затем измените значения для js.composer.reply_placeholder на текст заглушки, который вы хотите отображать.

Вы также можете установить шаблон темы для каждой категории.

В диалоговом окне «Редактировать категорию» выберите «Шаблоны тем». Вы можете добавить пользовательский шаблон для вашей категории.

Это работает хорошо, НО пользователю приходится удалять текст шаблона, прежде чем он сможет начать писать свой пост.

Этот компонент темы позволяет отображать текст шаблона темы в качестве заглушки (водяного знака) вместо редактируемого текста. Вам достаточно просто кликнуть по полю и начать печатать.

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

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

:hammer_and_wrench: Репозиторий Git: https://github.com/naidihr/discourse-topic-template-placeholders

:thinking: Как установить тему или компонент темы?

Благодарности

Спасибо @merefield за рефакторинг элемента JQuery с использованием фреймворка Ember и ядра Discourse.

Обратите внимание: обновленная версия протестирована и работает только на версиях Discourse от 2.4.1. Если вы используете более раннюю версию Discourse, попробуйте оригинальную версию, которая протестирована на версии 2.3.10.
Репозиторий оригинальной версии: https://github.com/naidihr/discourse-topic-template-placeholders_original

35 лайков

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

8 лайков

Вы можете попробовать что-то вроде этого:

<script type="text/discourse-plugin" version="0.8">
  api.modifyClass("model:composer", {
    applyTopicTemplate() {
      this._super(...arguments);

      Ember.run.schedule("afterRender", () => {
        // выполните здесь свою работу
      });
    }
  });
</script>

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

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

9 лайков

Отличная идея для компонента темы!

Я уже отправил PR для следующего:

  • устраняет необходимость в jQuery
  • избавляет от беспокойства по поводу тайминга (используйте фреймворк Ember и ядро Discourse, не боритесь с ними)
  • изменяет модель Composer для достижения результата (как вы правильно предложили)

Я не расстроюсь, если вы не примете его, но надеюсь, что это поможет увидеть другой способ решения задачи :slight_smile:

(Я не могу гарантировать отсутствие ошибок, но с радостью отвечу на любые вопросы! :cowboy_hat_face: )

9 лайков

Спасибо, Роберт. Я объединил этот PR. Очень ценю это :+1:

2 лайка

Это именно то, что я искал! Ты просто бог! :bowing_man: :shallow_pan_of_food: :bowing_woman:
Прими это скромное эмодзи-приношение. :canned_food:

1 лайк

К сведению: это работает только в том случае, если вы сначала перейдете в категорию и создадите новую тему. Если попытаться создать новую тему со страницы «Последние», а затем выбрать категорию из выпадающего списка, текст не отобразится.

2 лайка

Это ожидаемо? Так обычно работает функционал шаблонов тем. В последнем случае шаблон темы не учитывается.

Но да, на мой взгляд, это можно улучшить даже в чистом Discourse без этого TC, чтобы поддерживать ваш второй сценарий. Лично меня раздражает, что пользователям не предлагается шаблон, если они идут вторым путём.

Этот TC просто использует возможности ядра, так что…

Возможно, мы говорим о разных вещах, но у меня всё работает так…

1 лайк

Это может быть связано с какой-то другой причиной, так как у нас на Meta это работает. Если вы перейдёте в /latest, откроете Composer и затем выберете категорию Marketplace, вы получите шаблон, который у нас есть для неё.

4 лайка

Да, странно. Извини, думаю, это уже решилось. Это меня давно беспокоило, но теперь вроде работает.

Ладно, это создаёт новую задачу. Ха-ха.

4 лайка

Привет, Роберт — я протестировал это после слияния, и всё работало, но теперь у меня перестало работать? Это с настройкой переопределения, без использования [placeholder]. Можешь, пожалуйста, проверить на своей сборке?

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

Возможно, мне придётся откатиться назад…?

Я сейчас это проверяю. Дайте мне немного времени.

PR с исправлением создан: FIX: change the placeholder & template when switching selected Category by merefield · Pull Request #2 · naidihr/discourse-topic-template-placeholders · GitHub

Теперь берётся категория из выбора в редакторе. После этого, кажется, всё работает в любых ситуациях, но, пожалуйста, подтвердите.

2 лайка

Привет, Роберт, я объединил последний PR и обновил версию компонента темы до актуальной, но всё ещё отображается текст шаблона по умолчанию от меня, хотя у меня включена настройка «Показывать все шаблоны тем как плейсхолдеры». Я использую Discourse 2.4.1. Есть ли ещё какие-то идеи?

2 лайка

Это работает, но совсем не работает, если включена опция «Отображать все шаблоны тем как заглушки», даже если вы находитесь в категории. Уже жалею, что вызвался этим заниматься? :stuck_out_tongue_winking_eye:

2 лайка

Без проблем, ребята. Мы просто итерируемся. :). Я посмотрю.

Обновление: PR FIX: resolve issue with displaying all Topic Templates as Placeholders by merefield · Pull Request #3 · naidihr/discourse-topic-template-placeholders · GitHub

При проверке не забудьте обновить страницу, если изменили настройку.

2 лайка

Отлично, Роберт. Тот последний PR всё исправил. Также при создании темы со страниц «Последние» или категорий. Всё выглядит отлично. Спасибо, что нашли время разобраться в этом. Очень аккуратное решение _превосходная работа :wink::+1:

3 лайка

Нет проблем. С удовольствием. Извините, мои первоначальные тесты должны были быть более тщательными. Спасибо за ваше терпение.

Думаю, мы сейчас движемся в правильном направлении, надеюсь!

Продолжайте придумывать новые отличные идеи и воплощать их в жизнь!

3 лайка

Привет, друзья! Нам очень нравится идея этого компонента темы!

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

становятся вот такими при включении:


Кроме того, плейсхолдер, похоже, не работает ни при включённой, ни при выключенной опции 'Отображать все шаблоны тем как плейсхолдеры (текст-водяной знак)'.

Возможно, это связано с тем, что наш экземпляр Discourse находится на версии v2.3.10?

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

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

Надеюсь, вы сможете дать быстрый совет, который поможет это исправить, но если дело в версии нашего Discourse, то это тоже нормально!

Заранее спасибо :smiley: