Invece che il pulsante evidenziato punti a u/miles/summary, preferirei che puntasse a u/miles/activity. Come posso farlo? Ho cercato online (sembra che sia necessario modificare l’attributo data-url con JavaScript, ma l’unico modo che ho visto per farlo è ottenere prima l’ID dell’elemento, che questo elemento non ha.)
Dovresti riaprire il widget pertinente in un componente del tema, qualcosa del genere:
api.reopenWidget("user-menu-links", {
profileGlyph() {
return {
title: Titles["profile"],
className: "user-preferences-link menu-link",
id: QuickAccess.PROFILE,
icon: "user",
action: UserMenuAction.QUICK_ACCESS,
actionParam: QuickAccess.PROFILE,
data: { url: `${this.attrs.path}/activity` },
role: "tab",
tabAttrs: this._tabAttrs(QuickAccess.PROFILE),
};
},
})
Grazie! Ha senso, penso.
Una cosa però: sto inserendo questo in </head> ma ricevo l’errore: SyntaxError: unknown: Unexpected token, expected "," (28:6)
<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("user-menu-links", {
profileGlyph() {
return {
title: Titles["profile"],
className: "user-preferences-link menu-link",
id: QuickAccess.PROFILE,
icon: "user",
action: UserMenuAction.QUICK_ACCESS,
actionParam: QuickAccess.PROFILE,
data: { url: `${this.attrs.path}/activity` },
role: "tab",
tabAttrs: this._tabAttrs(QuickAccess.PROFILE),
};
},
}
</script>
Sopra mancava una parentesi chiusa, aggiornato
Nessun errore ora, ma… Ora fa sì che il menu a tendina user-menu-links non si apra nemmeno. Hai idea del perché?
Cosa hai fatto per debuggarlo?
Controllare la console JavaScript nel browser è sempre un buon punto di partenza.
Se dai un’occhiata, ci sono tre problemi evidenti (alla fine).
La soluzione è piuttosto semplice in questo caso: devi solo fornire le costanti mancanti:
const UserMenuAction = {
QUICK_ACCESS: "quickAccess",
};
const QuickAccess = {
BOOKMARKS: "bookmarks",
MESSAGES: "messages",
NOTIFICATIONS: "notifications",
PROFILE: "profile",
};
const Titles = {
bookmarks: "user.bookmarks",
messages: "user.private_messages",
notifications: "user.notifications",
profile: "user.preferences",
};
Una volta aggiunte queste (dal codice sorgente originale), funziona ![]()
(Ma vedi l’ottimizzazione di Faizaan qui sotto che rende superflue queste costanti, il che è ancora meglio
)
Più semplicemente
<script type="text/discourse-plugin" version="0.8">
api.reopenWidget("user-menu-links", {
profileGlyph() {
const glyph = this._super(...arguments);
glyph['data'] = { url: `${this.attrs.path}/activity` };
return glyph;
},
}
Non testato comunque ![]()
Sì, molto meglio ed evita la necessità di costanti: bella ottimizzazione! ![]()
In realtà, puoi andare anche oltre ed ometterlo:
api.reopenWidget("user-menu-links", {
profileGlyph() {
const glyph = this._super();
glyph['data'] = { url: `${this.attrs.path}/activity` };
return glyph;
}
});
Poiché non ci sono argomenti.
Grazie ragazzi! Funziona perfettamente. Sto imparando molto anche sull’editing di Discourse!
