Archives FluxBB.fr

Les archives de FluxBB.fr

Vous n'êtes pas identifié(e).

#1 27-10-2009 05:23:08

Yacodo
Membre

Renommer un topic

Bonjour,

Note : Mise à jour afin de ne plus monopoliser le lien vers le début du topic

Suite à une demande exprès d'une grande board je vous fait part d'un petit bout de code afin de renommer rapidement un topic, je précise ne jamais avoir fouillé dans le code de punbb(mis à part rajouter deux trois choses n'utilisant pas les variables du forum), donc dans le cas ou il y à plus simple, ou ajouter plus de chose dans la même idée je vous laisse modifier derrière :

Voici donc un méthode simple pour les admins, en commentaire en fin de ligne, ce qui me parait logique pour donner cette fonctionnalité au poster.

fonctionnel sur 1.2.22 francisé, et surement les versions récentes.

Fichier : viewforum.php

Repérer la ligne (~26,~27) :

define('PUN_ROOT', './');
require PUN_ROOT.'include/common.php';

Rajouter juste après cette ligne :

if($pun_user['g_id'] == PUN_ADMIN){

    if(isset($_POST['new_topic_subject'])){

        $id = (int) $_POST['id'];
        if($id > 0){

            $new_topic_subject = mysql_real_escape_string($_POST['new_topic_subject']);

            $sql = "UPDATE ".$db->prefix."topics SET subject='".$new_topic_subject."' WHERE id='".$id."'";

            $db->query($sql);

        }

    }
    unset($id, $new_topic_subject, $sql);
    define('ADD_JS', 1);

}

(Pour faire profiter les posteurs aussi, il faut supprimer la première ligne et le dernier "}", et chercher dans la BDD le poster par rapport à $id, comparer, et sécuriser(sans la sécurisation, n'importe qui modifiera n'importe quel sujet))

Descendez dans le fichier jusqu'a :
Repérer : (~176)

if ($cur_topic['moved_to'] != 0)
            $subject = $lang_forum['Moved'].': <a href="viewtopic.php?id='.$cur_topic['moved_to'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
        else if ($cur_topic['closed'] == '0')
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
        else
        {
            $subject = '<a href="viewtopic.php?id='.$cur_topic['id'].'">'.pun_htmlspecialchars($cur_topic['subject']).'</a> <span class="byuser">'.$lang_common['by'].' '.pun_htmlspecialchars($cur_topic['poster']).'</span>';
            $icon_text = $lang_common['Closed icon'];
            $item_status = 'iclosed';
        }

Ajouter avant ce block :

$add_js_url = (defined('ADD_JS'))?"<a onclick=\"toggle(this, '".$cur_topic['id']."');return false;\" href=\"#\">Editer</a> ":"";

(pour les posteurs, je pense que ceci fonctionnera : )

$add_js_url = (($pun_user['g_id'] == PUN_ADMIN) OR ($pun_user['id'] == $cur_topic['poster']))?"<a onclick=\"toggle(this, '".$cur_topic['id']."');return false;\" href=\"#\">Editer</a> ":"";

Ajouter dans les trois liens($subject) différent(avant le <a par exemple) ;

 '.$add_js_url.'

Pour ma part les $subject ressemble à :

$subject = ''.$add_js_url.' <a href="viewtopic.php?etc...

---

Vous pouvez maintenant fermer ce fichier et ouvrir header.php

---

Rechercher  : (~129)

$user_agent = isset($_SERVER['HTTP_USER_AGENT']) ? strtolower($_SERVER['HTTP_USER_AGENT']) : '';

et placer, juste avant,  la fonction javascript suivante qui s'occupera d'activer/désactiver le formulaire.(Une ligne demande à ce qu'un espace soit enlever, rechercher le commentaire)

if(defined('ADD_JS')){ ?>
    <script type="text/javascript">
    function toggle(element, id){

        var elementparent = element.parentNode;

        var class_a = elementparent.getAttribute('nom_post');

        if(elementparent.getAttribute('class') != 'tclcon'){

            elementparent = elementparent.parentNode;
            class_a = elementparent.getAttribute('nom_post');

        }

        if(class_a == null || class_a == ''){

            var innerhtml = elementparent.getElementsByTagName('a');
            innerhtml = innerhtml[1].innerHTML;

            innerhtml = innerhtml.replace('"', '"');
            innerhtml = innerhtml.replace("'", '&# 039;'); /*Enlever l'espace entre # et 0*/

            elementparent.setAttribute('nom_post', innerhtml);
            elementparent.innerHTML = '<form method="POST"><input type="hidden" name="id" value="'+ id +'"/><input type="text" name="new_topic_subject" value="'+ innerhtml +'" /><input type="submit" /></form><a onclick="toggle(this, \''+ id +'\');return false;" href="#">Cancel</a>';

        }else{

            elementparent.setAttribute('nom_post', '');
            elementparent.innerHTML = '<a onclick="toggle(this, \''+ id +'\');return false;" href="#">Editer</a> <a href="viewtopic.php?id='+id+'">'+class_a+'</a>';

        }

    }
    </script>

<?php }

En espérant avoir été clair.


Yacodo

Dernière modification par Yacodo (27-10-2009 20:20:36)

Hors ligne

#2 27-10-2009 07:46:54

fanf73
Wik-wiki

Re : Renommer un topic

Pourrais-tu nous expliquer l'apport de ton astuce comparé au changement de titre d'un topic en modifiant le premier message de la discussion ? smile


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#3 27-10-2009 09:51:38

Yacodo
Membre

Re : Renommer un topic

Le but de la modification que l'on m'a demandé était de pouvoir renommer le titre du topic directement à la première vue du titre(soit au listing dans viewtopic.php), je suppose donc que le titre contient une erreur repérable sans avoir à lire le contenu du message, et donc le modifier sans avoir à suivre deux liens (Lien vers le topic, Modifier le topic).

Ca reste donc dans le credo de Punbb(rapidité et simplicité, si je ne me trompe pas ?), bien évidemment tout est question d'habitude.

Cette astuce permet, surtout, de voir un première approche de "facilitation d'administration" (bien évidemment, sans faire ça comme un sagouin et à contrario de moi créer un bouton au lieu de monopoliser le lien, un peu flemmard sur le coup) afin d'ajouter un déplacement rapide(beaucoup de topics sur des forums fréquentés se remarque rapidement, lorsqu'il ne sont pas à leurs places), blocage/débloquage, et jusqu'à l'endroit ou l'imagination nous mènera.

Si bien sur, après cette explication, vous, les administrateurs et utilisateurs de Punbb, trouvez ce truc/astuce toujours aussi inutile, rien n'empêche la suppression de ce topic wink


Yacodo

Hors ligne

#4 27-10-2009 10:41:10

teopath
Membre

Re : Renommer un topic

Yacodo a écrit :

Le but de la modification que l'on m'a demandé était de pouvoir renommer le titre du topic directement à la première vue du titre(soit au listing dans viewtopic.php), je suppose donc que le titre contient une erreur repérable sans avoir à lire le contenu du message, et donc le modifier sans avoir à suivre deux liens (Lien vers le topic, Modifier le topic).


Yacodo

Comment peut on juger de l'adéquation du titre sans savoir de quoi çà parle ?

Hors ligne

#5 27-10-2009 12:21:24

sharrinddlar
Membre

Re : Renommer un topic

Yacodo a écrit :

je suppose donc que le titre contient une erreur repérable sans avoir à lire le contenu du message

Teopath a écrit :

Comment peut on juger de l'adéquation du titre sans savoir de quoi çà parle ?

Une fote d'orthographe ou de frappe par exemple.

Dernière modification par sharrinddlar (27-10-2009 12:22:09)

Hors ligne

#6 27-10-2009 15:00:23

Matthieu
Membre

Re : Renommer un topic

je comprends le principe à 30% et l'utilité à 50% ^^

go screen s'il te plait

Hors ligne

#7 27-10-2009 15:42:58

Yacodo
Membre

Re : Renommer un topic

Voici un aperçu de la chose :
Image

Des fautes, ou erreurs de syntaxe (par exemple titre "j'ai un problème de virus, windows xp" sur un forum aurait pu être nommé (si demandé sur une certaine syntaxe : "[Problème][Win xp]Virus", et où encore le fameux "[Réglé]" tant apprécié des forums d'entraides(même si là bien sur, il faut connaître le contenu du topic(ou l'utilisateur a oublié de le faire))).


Yacodo


PS : Modification pour inclure un lien destiné à l'activation du toggle(), et non sur le clic du lien topic.

Dernière modification par Yacodo (27-10-2009 19:28:25)

Hors ligne

#8 27-10-2009 20:27:59

fanf73
Wik-wiki

Re : Renommer un topic

Merci, je comprends mieux maintenant et ça peut en effet se révéler pratique pour certains smile


Nous ne faisons pas le travail à votre place mais nous prenons le temps de vous montrer le chemin. Merci de lire ce que l'on vous dit et de réfléchir avant de re-demander une explication.

Hors ligne

#9 28-10-2009 03:05:28

NoX09
Membre

Re : Renommer un topic

Merci pour la contribution. En effet, on peut gagner beaucoup de temps si on doit modifier le titre de nombreux topics ...

Je testerai ce we.

Dernière modification par NoX09 (31-10-2009 01:08:35)


Utiliser : FAQ - AIDE - RECHERCHE

Hors ligne

#10 31-10-2009 01:29:11

NoX09
Membre

Re : Renommer un topic

Bonsoir,

Firefox 3.5.2 + fluxbb 1.2.22 + mod rewriting :
Ma console d'erreurs m'indique lorsque je clique sur "editer" :

toggle is not defined

J'ai fais une petite recherche google infructueuse...


Utiliser : FAQ - AIDE - RECHERCHE

Hors ligne

#11 03-11-2009 21:47:09

Yacodo
Membre

Re : Renommer un topic

Hello,

le but est de placer la fonction dans le header à un endroit ou il n'y à pas de condition PHP.
Pour ma part au premier essai je n'ai pas fait gaffe, et j'ai eu le même problème.

Yacodo

Hors ligne

Pied de page des forums