Vamos esclarecer isso primeiro.
Isso não está correto. Você não perde suas alterações ao atualizar se elas forem feitas em um tema. Elas persistem. A única maneira de perder suas alterações é se você editar diretamente os arquivos no seu servidor, o que, obviamente, você não deve fazer.
Agora, há certo risco envolvido ao sobrescrever modelos, pois uma atualização no núcleo pode significar que suas alterações não sejam mais compatíveis e precisem ser atualizadas. Se você estiver confortável com esse risco, tecnicamente pode alcançar o que está pedindo aqui.
Para começar, você precisa de uma maneira de distinguir quando o usuário está na página inicial. No caso do componente apenas categorias, uma maneira é verificar o searchContext. Quando você está em uma página de subcategoria, o contexto de pesquisa é definido como “category”. Se não houver contexto de pesquisa, significa que você está na página inicial.
A maneira de passar isso para seu modelo é adicionando algo como isso:
<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>
O que isso faz é permitir que você use isHomepage no modelo para categories-only. Ele retorna true se não houver contexto de pesquisa, o que significa que você está na página inicial. Caso contrário, retorna false.
Em seguida, você precisa copiar o modelo padrão da seguinte maneira:
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
... resto do modelo
{{/if}}
</script>
e usar isHomepage que adicionamos. Para isso, você precisa usar o auxiliar {{#if}} do Handlebars. Basicamente, o que você precisa é de algo assim:
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
{{#if isHomepage}}
... modelo apenas para a página inicial
{{else}}
... resto do modelo padrão se não estiver na página inicial
{{/if}}
</script>
Agora você pode usar o que quiser na seção isHomepage. Você pode editá-lo diretamente ali ou criar um novo modelo para essa seção, como mostrado abaixo:
<script type='text/x-handlebars'
data-template-name='components/categories-only-homepage'>
<h1>Você está na página inicial!</h1>
<p>
Use esta seção para renderizar o modelo para o componente apenas categorias se o usuário estiver na página inicial.
</p>
</script>
A última coisa que você precisa fazer é chamar esse modelo como um parcial no modelo categories-only dentro da seção isHomepage, como mostrado abaixo:
<script type='text/x-handlebars'
data-template-name='components/categories-only'>
{{#if categories}}
{{#if isHomepage}}
{{partial 'components/categories-only-homepage'}}
{{else}}
... resto do modelo padrão se não estiver na página inicial
{{/if}}
</script>
O resultado é que, quando você visitar a página inicial, verá isso:
mas o componente nas subcategorias deve permanecer inalterado.
Isso é opcional, mas você também pode se interessar em ler:
porque essa é a nova maneira recomendada de trabalhar com temas e evitar o uso de tags script.
