En lugar de que el botón resaltado apunte a u/miles/summary, preferiría que apuntara a u/miles/activity. ¿Cómo puedo hacerlo? Intenté buscarlo en línea (parece que hay que cambiar el atributo data-url con JavaScript, pero la única forma que vi de hacerlo era obtener primero el id del elemento, y este elemento no tiene id.)
Necesitarías volver a abrir el widget correspondiente en un componente de tema, algo así como:
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),
};
},
})
¡Gracias! Tiene sentido, creo.
Una cosa, sin embargo: lo estoy colocando dentro de <head> pero obtengo el error: 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>
Arriba faltaba un paréntesis de cierre, actualizado
Ya no hay error, pero… ahora el menú desplegable de enlaces del menú de usuario ni siquiera se abre. ¿Tienes alguna idea de por qué ocurre esto?
¿Qué hiciste para depurarlo?
Mirar la consola de JavaScript en el navegador siempre es un buen punto de partida.
Si te fijas, hay tres problemas obvios (en última instancia).
La solución es bastante sencilla en este caso; solo necesitas proporcionar las constantes que faltan:
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 vez que agregues estas (desde el código fuente original), funcionará ![]()
(Pero consulta la optimización de Faizaan a continuación, que elimina la necesidad de estas, lo cual es aún mejor :))
Más simplemente
<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;
},
}
Aunque no se ha probado ![]()
¡Sí, mucho mejor y evita la necesidad de constantes, buena optimización! ![]()
En realidad, puedes llegar aún más lejos y omitir eso:
api.reopenWidget("user-menu-links", {
profileGlyph() {
const glyph = this._super();
glyph['data'] = { url: `${this.attrs.path}/activity` };
return glyph;
}
});
Ya que no hay argumentos.
¡Gracias, chicos! Funciona perfectamente. ¡Estoy aprendiendo mucho sobre la edición de Discourse también!
