Это очень полезно в отношении тем против плагинов, а также в отношении конкретного примера, который я привёл. Спасибо.
До сих пор мой подход к внесению изменений заключался в том, чтобы разбираться в деталях кода Discourse (где определён этот объект, что управляет этим шаблоном, где находится логика, обрабатывающая это действие и т.д.). Но это продвигается медленно.
Я думаю, что, вероятно, более эффективным путём будет сфокусироваться на API. Таким образом, мне не нужно разбираться во всех деталях зрелого кода Discourse, и я смогу сосредоточиться на создании темы, а не плагина, или, возможно, просто вносить изменения через панель «Настройка».
По сути, разобраться в том, как работает API, кажется гораздо более выполнимой задачей, чем разбираться в базе кода Discourse.
Чтобы оставаться в рамках приведённого примера: если пользователь является модератором категории, разрешить этому пользователю закреплять темы на странице категории.
Могу ли я сделать это без плагина? Позвольте мне попробовать набросать план:
1. Является ли пользователь модератором категории?
В данный момент я не вижу в API ничего, что позволяло бы узнать, является ли пользователь модератором категории. Я ожидал найти это в GET-запросе для получения информации о категории, но такого запроса там нет. Или, возможно, в GET-запросе для получения информации о пользователе, но там я не вижу списка категорий, модератором которых является пользователь.
Могу ли я добавить эти данные?
Или, альтернативно, возможно, я могу создать пользовательское поле (custom_field) для пользователя или категории, чтобы идентифицировать статус модератора, а затем делать API-запрос к этому пользовательскому полю при загрузке страницы категории.
2. Если пользователь является модератором, показать кнопку закрепления.
Если я смогу ответить на вопрос (1), то предполагаю, что смогу просто добавить эту кнопку с помощью фронтенд-скриптов (JavaScript) и CSS, отображая её, если пользователь является модератором.
3. Пользователь (который является модератором) нажимает кнопку, и это закрепляет тему.
В API темы действительно имеют признак «pinned» (булев тип). Я предполагаю, что это соответствует тому, закреплена ли тема в своей категории, так как выглядит так, будто у каждой темы только одна категория.
Так что здесь, когда модератор нажимает кнопку «Закрепить», я, вероятно, могу обновить статус «pinned» темы на True. Если это не сработает, пользовательские поля также могут стать решением (хотя я не вижу, как добавлять пользовательские поля к теме).
Итак, с этим или чем-то подобным, кажется, что я могу выполнить эту задачу с помощью API, тогда как при использовании плагина потребовалось бы много времени на разбирательство в файлах базы кода Discourse.
Звучит ли это правильно?