Сначала давайте проясним этот момент.
Это неверно: вы не теряете изменения при обновлении, если они внесены в тему. Они сохраняются. Вы теряете изменения только в том случае, если редактируете файлы напрямую на сервере, чего, разумеется, делать не следует.
Тем не менее, при переопределении шаблонов существует определённый риск: обновление ядра может сделать ваши изменения несовместимыми, и их придётся обновлять. Если вы готовы принять этот риск, то технически вы можете реализовать то, о чём спрашиваете.
Для начала вам нужно каким-то образом определять, находится ли пользователь на главной странице. В случае компонента «только категории» один из способов — проверить searchContext. Когда вы находитесь на странице подкатегории, контекст поиска устанавливается в значение «category». Если контекст поиска отсутствует, значит, вы находитесь на главной странице.
Чтобы передать эту информацию в шаблон, добавьте следующее:
<script type="text/discourse-plugin"
version="0.8">
const categoriesOnlyComponent = require('discourse/components/categories-only').default;
categoriesOnlyComponent.reopen({
isHomepage: function() {
return !this.parentView.searchService.contextType
}.property()
});
</script>
Это позволяет использовать isHomepage в шаблоне для categories-only. Если контекст поиска отсутствует (то есть вы на главной странице), это возвращает true. В противном случае — false.
Далее вам нужно скопировать стандартный шаблон следующим образом:
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
... остальная часть шаблона
{{/if}}
</script>
и использовать добавленное свойство isHomepage. Для этого потребуется хелпер Handlebars {{#if}}. По сути, вам нужно что-то вроде этого:
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
{{#if isHomepage}}
... шаблон только для главной страницы
{{else}}
... остальная часть стандартного шаблона, если вы не на главной странице
{{/if}}
</script>
Теперь в секции isHomepage вы можете использовать всё, что захотите. Вы можете отредактировать её прямо здесь или создать отдельный шаблон для этой секции:
<script type='text/x-handlebars'
data-template-name='components/categories-only-homepage'>
<h1>Вы находитесь на главной странице!</h1>
<p>
Используйте эту секцию для отображения шаблона компонента «только категории», если пользователь находится на главной странице.
</p>
</script>
Последний шаг — вызвать этот шаблон как частичный (partial) в шаблоне categories-only внутри секции isHomepage:
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
{{#if isHomepage}}
{{partial 'components/categories-only-homepage'}}
{{else}}
... остальная часть стандартного шаблона, если вы не на главной странице
{{/if}}
</script>
В результате при посещении главной страницы вы увидите следующее:
а компонент на страницах подкатегорий останется без изменений.
Это необязательно, но вам может быть интересно также посмотреть:
поскольку это новый рекомендуемый способ работы с темами, позволяющий избежать использования тегов <script>.}
