Permetti agli utenti di nascondere i like sui post tramite una preferenza utente o un campo utente

Recentemente c’è stata una grande discussione su un forum che amministro riguardo alla possibilità di rimuovere i Mi piace. Metà degli utenti vorrebbe che venissero rimossi, l’altra metà vorrebbe che rimanessero. Ho individuato il componente del tema che nasconde la possibilità di mettere Mi piace a un post per gli utenti TL0 e gli utenti anonimi, e l’ho in gran parte adattato al nostro caso d’uso. Tuttavia, non sono sicuro di come collegarlo a un campo booleano utente che ho creato (“toggle likes”). Nel componente del tema originale viene utilizzato qualcosa come “settings.hide_for_anon_user” e ciò crea un’impostazione del tema nel file settings.yml chiamata “hide_for_anon_user”, ma questa può essere modificata solo da un amministratore e non a livello di utente.

Come potrei fare per fare riferimento al campo personalizzato in questo caso? L’ho già aggiunto a public_user_custom_fields, ma non so come fare riferimento ad esso nel file JS del componente. Ho provato userCustomFields.user_field_10, settings.current_user.custom_fields.user_field_10 e current_user.custom_fields.user_field_10, ma nessuno di questi funziona: nascondono semplicemente tutti i post in una discussione.

Sarei molto grato per qualsiasi aiuto.

2 Mi Piace

Penso che tu possa creare un gruppo senza like e usarlo per nascondere i like, proprio come fa tl0. Imposta il gruppo in modo che chiunque possa unirsi.

1 Mi Piace

Come faccio a fare riferimento al gruppo in questo caso, però?

Ho sostituito
this.currentUser.trust_level === 0;
con
this.currentUser.no_likes;

ma non ha funzionato. Ancora una volta, non sono sicuro di come fare riferimento ai gruppi personalizzati, proprio come per i campi utente; non sembra essere chiaramente indicato in alcuna documentazione.

Questo sembra funzionare per il gruppo utenti personalizzato:

<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("post-menu", {
    menuItems() {
        const user = Discourse.User.current();
        if(user.primary_group_name.toLowerCase() === "no_likes") {
            return this.siteSettings.post_menu
                .split("|")
                .filter((item) => item !== "like");
        }
        return this.siteSettings.post_menu.split("|").filter(Boolean);
    },
});
</script>

Ma vorrei comunque verificare se esiste un modo per farlo controllando un campo booleano personalizzato dell’utente invece di richiedere l’iscrizione a un gruppo. Ho esaminato altri plugin per capire come procedere, ma finora tutto ciò che ho provato non ha funzionato.

ETA: Questo sembra funzionare, ma è necessario aggiornare la pagina dopo aver selezionato o deselezionato il campo booleano dell’utente.

<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("post-menu", {
    menuItems() {
        const user = Discourse.User.current();
        if(user.custom_fields['user_field_10']) {
            return this.siteSettings.post_menu
                .split("|")
                .filter((item) => item !== "like");
        }
        return this.siteSettings.post_menu.split("|").filter(Boolean);
    },
});
</script>
2 Mi Piace

A quanto pare, questo nasconde i post quando gli utenti non sono connessi. Non sono sicuro di come modificare il codice: qualcuno ha qualche suggerimento?

<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("post-menu", {
    menuItems() {
        const user = Discourse.User.current();
        if (api.getCurrentUser() == null || user.custom_fields['user_field_10'])  {
            return this.siteSettings.post_menu
                .split("|")
                .filter((item) => item !== "like");
        }
        return this.siteSettings.post_menu.split("|").filter(Boolean);
    },
});
</script>

Sembra che funzioni. Se esiste un modo più pulito per farlo, non esitare a farmelo sapere.

This topic was automatically closed 30 days after the last reply. New replies are no longer allowed.