Salut,
Dans Admin
uevo
Salut,
Dans Admin
uevo
Utilisez le JavaScript natif, pas jQuery.
Merci, mais si c’est du javascript, cela fonctionne bien lorsqu’il est utilisé dans la console du développeur
document.querySelector('.topic-list .topic-excerpt[href="/t/urltobechanged/8"]').setAttribute('href', "/t/newurltoset/17");
D’une manière ou d’une autre, lorsqu’il est chargé à partir de l’en-tête du discourse, il est retourné comme “Uncaught TypeError: document.querySelector(…) is null”, peu importe si je l’encapsule avec :
function doSomething() {
or
document.addEventListener("DOMContentLoaded", function(event)
Avez-vous une idée de la façon dont cette seule ligne pour modifier l’attribut href devrait être exécutée, car elle fonctionne bien dans la console du développeur ?
Comme Discourse est une SPA, s’appuyer sur l’événement « DOMContentLoaded » du document ne sera pas très utile, car le DOM du document est toujours « chargé » mais les éléments peuvent être manquants. Vous voudrez plutôt utiliser les Composants comme l’a mentionné @merefield, ou quelque chose comme ceci : How do you force a script to refire on every page load in Discourse? - #5 by simon. De cette façon, chaque fois que la page change, votre code peut vérifier l’élément que vous essayez de modifier.
D’accord, je comprends maintenant, venant du développement WordPress/Joomla, vous pensez que l’ajout de JS dans l’en-tête fonctionnerait de la même manière.
Votre lien fournit effectivement une solution, notez que les en-têtes <script type='text/discourse-plugin'> sont maintenant dépréciés Modernizing inline script tags for templates & JS API
Pour résoudre rapidement la situation de l’URL, j’ai fini par créer un permalien directement depuis l’administration de Discourse.
Merci pour votre soutien et vos explications !