Supprimer "Corbeille" dans les sujets récents
5 participants
Forum gratuit : Le forum des forums actifs :: Entraide & Support... :: Problème avec un script, un code :: Archives des problèmes avec un code
Page 1 sur 1 • Partagez
Supprimer "Corbeille" dans les sujets récents
Détails techniques
Version du forum : phpBB2Poste occupé : Fondateur
Navigateur(s) concerné(s) : non défini
Personnes concernées par le problème : Moi uniquement
Lien du forum : http://personofinterest.fra.co
Description du problème
Bonjour,Il arrive d'envoyer des sujets à la corbeille. Mais dans ce cas, ils sont toujours visible pour les admins, quand on règle les permissions. Le problème étant que parfois, après un gros nettoyage, cela devient assez vite encombré.
Est-ce qu'il serait possible que les sujets mis dans la corbeille (ou une autre catégorie/sous-forum si besoin) n'apparaissent plus même pour les admins ?
Merci.
Re: Supprimer "Corbeille" dans les sujets récents
Bonsoir,
Je ne comprends pas le lien entre la corbeille et les sujets récents. Ce n'est pas parce qu'on met un sujet à la corbeille que cela va le faire apparaître dans les sujets récents.
Comme c'est un travail de modération et non pas d'administration, on peut le faire depuis un compte qui n'est pas un compte administrateur. Comme ça les sujets corbeillés disparaissent de la vue dès qu'ils ont pris le chemin de la corbeille (visible seulement pour les administrateurs).
Je ne comprends pas le lien entre la corbeille et les sujets récents. Ce n'est pas parce qu'on met un sujet à la corbeille que cela va le faire apparaître dans les sujets récents.
Comme c'est un travail de modération et non pas d'administration, on peut le faire depuis un compte qui n'est pas un compte administrateur. Comme ça les sujets corbeillés disparaissent de la vue dès qu'ils ont pris le chemin de la corbeille (visible seulement pour les administrateurs).
Re: Supprimer "Corbeille" dans les sujets récents
Est-ce qu'il serait possible que les sujets mis dans la corbeille (ou une autre catégorie/sous-forum si besoin) n'apparaissent plus même pour les admins ?
Re: Supprimer "Corbeille" dans les sujets récents
Normalement les admins ont accès en permanence à tous les messages postés partout, vous ne pouvez pas définir de permissions qui cachent quelque chose aux admins. Si vous ne voulez plus voir les messages nulle part et que vous n'en avec pas du tout besoin, pourquoi ne pas simplement les supprimer ?
Re: Supprimer "Corbeille" dans les sujets récents
La Corbeille a son utilité.
Il doit y avoir un code ou l'autre à placer dans les templates (j'imagine) pour masquer certains sujets d'un widget, non ?
Il doit y avoir un code ou l'autre à placer dans les templates (j'imagine) pour masquer certains sujets d'un widget, non ?
Re: Supprimer "Corbeille" dans les sujets récents
Bonjour Outis,
Vous êtes courageuse
Tout d'abord, sachez qu'à ma connaissance, sur ce type de fonctionnalité seul un salarié d'eToxic (FA) peut modifier le système de manière propre et professionnelle dans le but d'avoir le comportement souhaité. Puisqu'il ne s'agit pas réellement d'un defect à proprement parler, il pourrait donc être intéressant de poster une demande d'évolution dans le forum dédié :
https://forum.forumactif.com/f3-vos-suggestions-pour-vos-forums-sondage
En attendant, j'ai développé une solution de contournement pour phpBB2 testé avec succès (des modifications sont probablement nécessaires pour assurer la compatibilité avec phpBB3, ModernBB, Invision). Le fonctionnement sera identique pour vos membres. Pour les administrateurs par contre, cela fonctionnera sous certaines conditions :
Pour mettre en œuvre cette solution :
A. Commencez par vous rendre dans le panneau d'administration, Modules, Portail & Widgets, Gestion des widgets du forum. Editer les paramètres de votre widget "sujets récents". Dans "Nombre de sujets récents", indiquez 99 et validez.
B. Dans la gestion des JavaScripts, ajouter ce nouveau script sur toutes vos pages :
C. Configurez le script et validez.
En particulier :
WIDGET_MAX_SUBJECTS, (impact pour les membres et les administrateurs) c'est le nombre de sujets récents que vous souhaitez voir afficher. Vous pouvez laisser à 15, comme c'est le cas sur votre forum actuellement.
TRASH_FORUM_ID, (impact pour les administrateurs) c'est l'ID de votre forum "Corbeille", qui contient donc les sujets à exclure dans les sujets récents. Si le lien vers ce forum est quelque chose comme "/f2-corbeille", son ID est 2.
TRASH_FORUM_SUBJECTS_PER_PAGE, (impact pour les administrateurs) c'est le nombre sujets qu'il existe par page sur votre forum. Vous devez spécifier ici la même valeur que celle spécifiée dans votre panneau d'administration (Général > Messages et Emails > Configuration > Sujets > Sujets Par Page).
TRASH_FORUM_MAX_SUBJECTS_PAGE_TO_GET, (impact pour les administrateurs) c'est le nombre de pages de sujets de votre forum Corbeille, que vous estimez que le système doit parcourir pour identifier un maximum de sujets corbeillés apparaissant comme sujets récents. Si vous affichez 50 sujets par page, le nombre de 1 peut être suffisant. En revanche si vous affichez 10 sujets par page, le nombre de 5 sera probablement adapté. Il est préférable de garder ce nombre proche de 1 pour avoir de bonnes performances de chargement de votre widget lorsque celui-ci doit être rafraichit pour vos administrateurs. En revanche n'hésitez pas à l'augmenter si des sujets corbeillés restent présents dans vos sujets récents !
WIDGET_REFRESH_CACHE_INTERVAL, (impact pour les administrateurs) c'est le nombre de secondes écoulées après lequel le widget est rafraichit pour un administrateur donné. Autrement dit si le nombre est à 0, le widget va se recharger à chaque ouverture d'une nouvelle page, ce qui vous garantit que les sujets de votre corbeille soient bien masqués dans la liste de sujets récents. C'est par contre au prix d'un petit chargement à chaque fois avant que votre widget ne soit prêt et affiche ses données. Si en tant qu'administrateur, vous souhaitez donc éviter d'avoir trop souvent un widget qui prend un peu de temps pour se charger, vous pouvez spécifiez par exemple 10 minutes (600 secondes). Pendant un intervalle de 10 minutes donné, il pourra alors exister quelques sujets de la corbeille dans votre liste de sujets récents le temps que la synchronisation se fasse, mais vous gagnerez en temps de chargement du widget sur chaque page. Lorsque vous testez de nouveaux paramètres, mettez toujours cette valeur à 0 dans un premier temps, puis modifiez cette valeur en dernier.
A vous d'essayer le paramétrage le plus adapté. Pensez aussi à tester le tout à la fois avec votre compte administrateur et un compte de test (non-administrateur) pour vous assurer du résultat.
Je reste à votre disposition pour toute aide complémentaire,
Cordialement,
w00tw00t
EDIT : je viens de tester sur votre forum avec un sous forum quelconque au lieu de la corbeille et cela semble bien fonctionner. Si je choisi le forum "Fantasy" (Series of Interest > Séries) à exclure, j'ai bien les sujets récents "Gobelin" ou encore "Grimm" qui sont masqués dans la liste.
Vous êtes courageuse
Tout d'abord, sachez qu'à ma connaissance, sur ce type de fonctionnalité seul un salarié d'eToxic (FA) peut modifier le système de manière propre et professionnelle dans le but d'avoir le comportement souhaité. Puisqu'il ne s'agit pas réellement d'un defect à proprement parler, il pourrait donc être intéressant de poster une demande d'évolution dans le forum dédié :
https://forum.forumactif.com/f3-vos-suggestions-pour-vos-forums-sondage
En attendant, j'ai développé une solution de contournement pour phpBB2 testé avec succès (des modifications sont probablement nécessaires pour assurer la compatibilité avec phpBB3, ModernBB, Invision). Le fonctionnement sera identique pour vos membres. Pour les administrateurs par contre, cela fonctionnera sous certaines conditions :
- (critique) votre corbeille est un forum seul, donc sans aucun sous-forum. Votre corbeille n'est donc pas non plus une catégorie.
- (non critique) dans les 100 sujets récents qui existent sur votre forum, et selon la configuration du nombre de sujets récents souhaités à l'affichage, la part de sujets récents présents dans votre corbeille est raisonnable pour laisser visible les autres sujets récents.
Pour mettre en œuvre cette solution :
A. Commencez par vous rendre dans le panneau d'administration, Modules, Portail & Widgets, Gestion des widgets du forum. Editer les paramètres de votre widget "sujets récents". Dans "Nombre de sujets récents", indiquez 99 et validez.
B. Dans la gestion des JavaScripts, ajouter ce nouveau script sur toutes vos pages :
- Code:
$(function(){
try {
const WIDGET_MAX_SUBJECTS = 10; /* max subjects you want in your widget */
const WIDGET_TITLE = 'derniers sujets'; /* title of the last subjects widget */
const WIDGET_LOADING_HTML = 'Chargement...'; /* html when the widget need to refresh */
const WIDGET_REFRESH_CACHE_INTERVAL = 10;/* in seconds */
const TRASH_FORUM_ID = 2; /* id extracted from the url of your trash forum, i.e : /f2-corbeille */
const TRASH_FORUM_SUBJECTS_PER_PAGE = 10; /* number of subject per page, must be the same as the setting in your admin control pannel */
const TRASH_FORUM_MAX_SUBJECTS_PAGE_TO_GET = 2; /* number of page needed to grab all your relevant trash subjects */
const getStorageItem = (key) => {
try {
const storage = window['localStorage'];
return JSON.parse(storage.getItem(key));
} catch(e){}
return false;
};
const setStorageItem = (key,obj) => {
try {
const storage = window['localStorage'];
storage.setItem(key,JSON.stringify(obj));
return true;
} catch(e){}
return false;
};
const sanitizeWidget = ($widget_last_subjects, results) => {
const todelete = [];
const regextl = new RegExp('/t([0-9]+)(?:|p[0-9]+)-','i');
$widget_last_subjects.find('> span > a').each(function() {
const $this = $(this);
const href = $this.attr('href');
if(typeof href !== "undefined" && href !== null){
let match = regextl.exec(href);
if(match !== null){
const t = match[1];
if( $.inArray(t, results) !== -1){
todelete.push($this.parent());
}
}
}
});
todelete.forEach(i => {i.remove();});
$widget_last_subjects.find('> span:gt('+(WIDGET_MAX_SUBJECTS-1)+')').remove();
};
let $widget_last_subjects = null;
$('.catHead center:first').each(function(){
const $this = $(this);
const text = $this.html();
if( text.toLowerCase().indexOf(WIDGET_TITLE) !== -1 ) {
const $content = $this.parents('table:first').find('td.row1 span.gensmall:first');
if ($content.length !== 0) {
$widget_last_subjects = $content;
}
}
});
if( null !== $widget_last_subjects ){
const html = $widget_last_subjects.html();
const prod_html = '<span>'+html.split('» ').join('</span><span>» ')+'</span>';
$widget_last_subjects.html(prod_html);
$widget_last_subjects.find('> span:first').remove();
if( typeof _userdata !== "undefined" && typeof _userdata["user_level"] !== "undefined" && _userdata["user_level"] === 1 ) {
const l_ts = 'W_LS_TS';
const l_rs = 'W_LS_RS';
const now = Math.trunc($.now() / 1000);
const raw_ts = getStorageItem(l_ts);
let ts = 0;
if(raw_ts !== false && raw_ts !== null) {
ts = Number.parseInt(raw_ts.ts);
}
if( ts + WIDGET_REFRESH_CACHE_INTERVAL < now ){
const html_backup = $widget_last_subjects.html();
const page_ids = [];
let j = 0;
for(let i = 0; i < TRASH_FORUM_MAX_SUBJECTS_PAGE_TO_GET; i++){
page_ids.push(j);
j += TRASH_FORUM_SUBJECTS_PER_PAGE;
}
const regext = new RegExp('<aclass="topictitle"href="/t([0-9]+)(?:|p[0-9]+)-[^"]+"','gi');
const page_ids_map = page_ids.map( u => $.ajax({url: "/f"+TRASH_FORUM_ID+(0===u?'':'p'+u)+"-"}) );
$widget_last_subjects.html(WIDGET_LOADING_HTML);
$.when(...page_ids_map).done((...args) => {
const results = [];
const tnow = Math.trunc($.now() / 1000);
$.each(args,(idx, data) => {
const response = data[0].replace(/(\r|\n|\t| )/gm,"");
let match = regext.exec(response);
while (match != null) {
results.push(match[1]);
match = regext.exec(response);
}
});
setStorageItem(l_rs,results);
setStorageItem(l_ts,{ts:tnow});
$widget_last_subjects.html(html_backup);
sanitizeWidget($widget_last_subjects,results);
});
} else {
sanitizeWidget($widget_last_subjects,getStorageItem(l_rs));
}
} else {
$widget_last_subjects.find('> span:gt('+(WIDGET_MAX_SUBJECTS-1)+')').remove();
}
}
} catch(e){
console.error(e);
}
});
C. Configurez le script et validez.
- Code:
const WIDGET_MAX_SUBJECTS = 10;
const WIDGET_TITLE = 'derniers sujets';
const WIDGET_LOADING_HTML = 'Chargement...';
const WIDGET_REFRESH_CACHE_INTERVAL = 10;
const TRASH_FORUM_ID = 2; /* id extracted from the url of your trash forum, i.e : /f2-corbeille */
const TRASH_FORUM_SUBJECTS_PER_PAGE = 10; /* number of subject per page, must be the same as the setting in your admin control pannel */
const TRASH_FORUM_MAX_SUBJECTS_PAGE_TO_GET = 2; /* number of page needed to grab all your relevant trash subjects */
En particulier :
WIDGET_MAX_SUBJECTS, (impact pour les membres et les administrateurs) c'est le nombre de sujets récents que vous souhaitez voir afficher. Vous pouvez laisser à 15, comme c'est le cas sur votre forum actuellement.
TRASH_FORUM_ID, (impact pour les administrateurs) c'est l'ID de votre forum "Corbeille", qui contient donc les sujets à exclure dans les sujets récents. Si le lien vers ce forum est quelque chose comme "/f2-corbeille", son ID est 2.
TRASH_FORUM_SUBJECTS_PER_PAGE, (impact pour les administrateurs) c'est le nombre sujets qu'il existe par page sur votre forum. Vous devez spécifier ici la même valeur que celle spécifiée dans votre panneau d'administration (Général > Messages et Emails > Configuration > Sujets > Sujets Par Page).
TRASH_FORUM_MAX_SUBJECTS_PAGE_TO_GET, (impact pour les administrateurs) c'est le nombre de pages de sujets de votre forum Corbeille, que vous estimez que le système doit parcourir pour identifier un maximum de sujets corbeillés apparaissant comme sujets récents. Si vous affichez 50 sujets par page, le nombre de 1 peut être suffisant. En revanche si vous affichez 10 sujets par page, le nombre de 5 sera probablement adapté. Il est préférable de garder ce nombre proche de 1 pour avoir de bonnes performances de chargement de votre widget lorsque celui-ci doit être rafraichit pour vos administrateurs. En revanche n'hésitez pas à l'augmenter si des sujets corbeillés restent présents dans vos sujets récents !
WIDGET_REFRESH_CACHE_INTERVAL, (impact pour les administrateurs) c'est le nombre de secondes écoulées après lequel le widget est rafraichit pour un administrateur donné. Autrement dit si le nombre est à 0, le widget va se recharger à chaque ouverture d'une nouvelle page, ce qui vous garantit que les sujets de votre corbeille soient bien masqués dans la liste de sujets récents. C'est par contre au prix d'un petit chargement à chaque fois avant que votre widget ne soit prêt et affiche ses données. Si en tant qu'administrateur, vous souhaitez donc éviter d'avoir trop souvent un widget qui prend un peu de temps pour se charger, vous pouvez spécifiez par exemple 10 minutes (600 secondes). Pendant un intervalle de 10 minutes donné, il pourra alors exister quelques sujets de la corbeille dans votre liste de sujets récents le temps que la synchronisation se fasse, mais vous gagnerez en temps de chargement du widget sur chaque page. Lorsque vous testez de nouveaux paramètres, mettez toujours cette valeur à 0 dans un premier temps, puis modifiez cette valeur en dernier.
A vous d'essayer le paramétrage le plus adapté. Pensez aussi à tester le tout à la fois avec votre compte administrateur et un compte de test (non-administrateur) pour vous assurer du résultat.
Je reste à votre disposition pour toute aide complémentaire,
Cordialement,
w00tw00t
EDIT : je viens de tester sur votre forum avec un sous forum quelconque au lieu de la corbeille et cela semble bien fonctionner. Si je choisi le forum "Fantasy" (Series of Interest > Séries) à exclure, j'ai bien les sujets récents "Gobelin" ou encore "Grimm" qui sont masqués dans la liste.
Dernière édition par w00tw00t le Mar 29 Mai 2018 - 13:31, édité 1 fois
Re: Supprimer "Corbeille" dans les sujets récents
Grand merci pour cette aide.
Mais je rencontre un souci, j'ai recopié le code tel quel, j'ai modifié ce qu'il fallait modifier (c'est à dire pas grand chose, merci pour ça). Le problème : le widget des derniers sujets est dupliqué sur le forum, ce qui le déforme. Qu'est-ce que j'ai mal fait ?
Mais je rencontre un souci, j'ai recopié le code tel quel, j'ai modifié ce qu'il fallait modifier (c'est à dire pas grand chose, merci pour ça). Le problème : le widget des derniers sujets est dupliqué sur le forum, ce qui le déforme. Qu'est-ce que j'ai mal fait ?
- Code:
$(function(){
try {
const WIDGET_MAX_SUBJECTS = 15; /* max subjects you want in your widget */
const WIDGET_TITLE = 'derniers sujets'; /* title of the last subjects widget */
const WIDGET_LOADING_HTML = 'Chargement...'; /* html when the widget need to refresh */
const WIDGET_REFRESH_CACHE_INTERVAL = 10;/* in seconds */
const TRASH_FORUM_ID = 17; /* id extracted from the url of your trash forum, i.e : /f2-corbeille */
const TRASH_FORUM_SUBJECTS_PER_PAGE = 30; /* number of subject per page, must be the same as the setting in your admin control pannel */
const TRASH_FORUM_MAX_SUBJECTS_PAGE_TO_GET = 2; /* number of page needed to grab all your relevant trash subjects */
const getStorageItem = (key) => {
try {
const storage = window['localStorage'];
return JSON.parse(storage.getItem(key));
} catch(e){}
return false;
};
const setStorageItem = (key,obj) => {
try {
const storage = window['localStorage'];
storage.setItem(key,JSON.stringify(obj));
return true;
} catch(e){}
return false;
};
const sanitizeWidget = ($widget_last_subjects, results) => {
const todelete = [];
const regextl = new RegExp('/t([0-9]+)(?:|p[0-9]+)-','i');
$widget_last_subjects.find('> span > a').each(function() {
const $this = $(this);
const href = $this.attr('href');
if(typeof href !== "undefined" && href !== null){
let match = regextl.exec(href);
if(match !== null){
const t = match[1];
if( $.inArray(t, results) !== -1){
todelete.push($this.parent());
}
}
}
});
todelete.forEach(i => {i.remove();});
$widget_last_subjects.find('> span:gt('+(WIDGET_MAX_SUBJECTS-1)+')').remove();
};
let $widget_last_subjects = null;
$('.catHead center:first').each(function(){
const $this = $(this);
const text = $this.html();
if( text.toLowerCase().indexOf(WIDGET_TITLE) !== -1 ) {
const $content = $this.parents('table').find('td.row1 span.gensmall:first');
if ($content.length !== 0) {
$widget_last_subjects = $content;
}
}
});
if( null !== $widget_last_subjects ){
const html = $widget_last_subjects.html();
const prod_html = '<span>'+html.split('» ').join('</span><span>» ')+'</span>';
$widget_last_subjects.html(prod_html);
$widget_last_subjects.find('> span:first').remove();
if( typeof _userdata !== "undefined" && typeof _userdata["user_level"] !== "undefined" && _userdata["user_level"] === 1 ) {
const l_ts = 'W_LS_TS';
const l_rs = 'W_LS_RS';
const now = Math.trunc($.now() / 1000);
const raw_ts = getStorageItem(l_ts);
let ts = 0;
if(raw_ts !== false && raw_ts !== null) {
ts = Number.parseInt(raw_ts.ts);
}
if( ts + WIDGET_REFRESH_CACHE_INTERVAL < now ){
const html_backup = $widget_last_subjects.html();
const page_ids = [];
let j = 0;
for(let i = 0; i < TRASH_FORUM_MAX_SUBJECTS_PAGE_TO_GET; i++){
page_ids.push(j);
j += TRASH_FORUM_SUBJECTS_PER_PAGE;
}
const regext = new RegExp('<aclass="topictitle"href="/t([0-9]+)(?:|p[0-9]+)-[^"]+"','gi');
const page_ids_map = page_ids.map( u => $.ajax({url: "/f"+TRASH_FORUM_ID+(0===u?'':'p'+u)+"-"}) );
$widget_last_subjects.html(WIDGET_LOADING_HTML);
$.when(...page_ids_map).done((...args) => {
const results = [];
const tnow = Math.trunc($.now() / 1000);
$.each(args,(idx, data) => {
const response = data[0].replace(/(\r|\n|\t| )/gm,"");
let match = regext.exec(response);
while (match != null) {
results.push(match[1]);
match = regext.exec(response);
}
});
setStorageItem(l_rs,results);
setStorageItem(l_ts,{ts:tnow});
$widget_last_subjects.html(html_backup);
sanitizeWidget($widget_last_subjects,results);
});
} else {
sanitizeWidget($widget_last_subjects,getStorageItem(l_rs));
}
} else {
$widget_last_subjects.find('> span:gt('+(WIDGET_MAX_SUBJECTS-1)+')').remove();
}
}
} catch(e){
console.error(e);
}
});
Dernière édition par Outis le Mar 29 Mai 2018 - 13:50, édité 1 fois
Re: Supprimer "Corbeille" dans les sujets récents
Bonjour Outils,
En effet, c'est une petite erreur de ma part. J'ai mis à jour mon précédent code. Vous pouvez l'utiliser en y re-copier/collant vos paramètres et en remettant à 99 dans le panneau d'administration.
Laissez moi savoir si ça fonctionne cette fois.
Cordialement,
w00tw00t
En effet, c'est une petite erreur de ma part. J'ai mis à jour mon précédent code. Vous pouvez l'utiliser en y re-copier/collant vos paramètres et en remettant à 99 dans le panneau d'administration.
Laissez moi savoir si ça fonctionne cette fois.
Cordialement,
w00tw00t
Re: Supprimer "Corbeille" dans les sujets récents
Merci, ça fonctionne parfaitement cette fois.
Sujets similaires
» supprimer définitivement une photo de la corbeille dans la galerie
» Choisir les sujets dans le widget "sujets récents"
» installer widget "Sujets récents" dans le template overall_header tout en conservant 2 autres widgets
» supprimer des topic dans la corbeille
» Placer le widget "sujets récents" dans la page d’accueil
» Choisir les sujets dans le widget "sujets récents"
» installer widget "Sujets récents" dans le template overall_header tout en conservant 2 autres widgets
» supprimer des topic dans la corbeille
» Placer le widget "sujets récents" dans la page d’accueil
Forum gratuit : Le forum des forums actifs :: Entraide & Support... :: Problème avec un script, un code :: Archives des problèmes avec un code
Page 1 sur 1
Permission de ce forum:
Vous ne pouvez pas répondre aux sujets dans ce forum