Wikini

DiscussionsActionRecentChanges

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-18-204-56-104.compute-1.amazonaws.com

Discussions sur l'ActionRecentChanges


Changements récents par catégorie

La liste des pages récemment modifiées peut être fastidieuse à parcourir pour qui ne vient pas régulièrement sur le Wiki. Cette liste génère également beacoup de bruit pour qui n'est intéressé que par un seul sujet du wiki.
Je pense qu'il existe un besoin pour réduire l'affichage des derniers changements à une catégorie de page : une espèce de mix entre "backlinks" et "recentchanges". Il devrait être possible de ne lister que les changements récents des pages ayant un lien vers une autre page ; on pourrait par exemple avoir :
Il devient donc plus facile de faire vivre plusieurs communautés d'utilisateurs et/ou de sujets sur un même wiki.

On pourrait donc avoir un paramètre supplémentaire dans cet esprit : {{RecentChanges category="DirectionCommerciale"}}
Qu'en pensez-vous ? Je pense que la mise en oeuvre n'est pas très complexe. (Si l'un d'entre vous veut se lancer, faut pas hésiter ; je manque un peu de temps ces derniers temps.)
-- CharlesNepote

J'ai testé le petit code suivant qui focntionne bien.
/action/recentchanges3.php
<?php
//
$category $this->GetParameter("category");

$pages $this->LoadAll("select p.tag, p.time, p.user, p.owner ".
        
"from ".$this->config["table_prefix"]."pages p, ".$this->config["table_prefix"]."links l ".
        
"where p.latest = 'Y' and p.comment_on = '' and p.tag = l.from_tag and to_tag = '".mysql_escape_string($category)."'order by time desc");

foreach (
$pages as $i => $page)
        {
            
// echo entry
            
echo "(",$page["time"],") (",$this->ComposeLinkToPage($page["tag"], "revisions""historique"0),") ",$this->ComposeLinkToPage($page["tag"], """"0)," . . . . ",$this->Format($page["user"]),"<br />\n" ;
        }
?>


Je vais l'améliorer progressivement...
-- CharlesNepote

Changements récents en excluant une catégorie

Encore plus fort, il peut être très intéressant d'afficher les changements récents en excluant une ou plusieurs catégories. Exemples d'applications :
Avantages fonctionnels :
Inconvénients fonctionnels :
Il me paraît donc important, comme les derniers changements par catégorie, d'indiquer à l'utilisateur que ces derniers changements ne reflètent pas tous les derniers changements du site.
-- CharlesNepote

Changements agrégés

On peut aller encore plus loin en intégrant des flux externes via des fils RSS : on peut agréger les changements récents de plusieurs wikis relativement à un sujet particulier. La mise en oeuvre est cependant plus complexe.
-- CharlesNepote



Ce qui se fait ailleurs

J'ai apporté plusieurs modifications à cette action pour répondre à certains de nos besoins.

Voici par exemple ce que nous mettons sur notre page d'accueil :
Les 5 [[DerniersChangements dernières pages éditées]]~: {{recentchanges max="5" separator=", " notorphaned="true" exclude="Page%;ParametresUtilisateur;%TableauDeBord%;Dernier%;BacASable"}}
Les 5 [[PagesLesPlusVisitees pages les plus visitées]]~: {{toppages max="5" separator=", " exclude="Page%;ParametresUtilisateur;%TableauDeBord%;Dernier%;BacASable;ProgFou%"}}.
Les 5 derniers [[UtilisateursDeCeWiki utilisateurs]] créés~: {{listusers last="5" separator=", "}}.


Ce qui donne ceci :
Les 5 dernières pages éditées : SSH, AlDo, ProjetLDAP, NeNiameyCnf, AstucesScreen.
Les 5 pages les plus visitées : ListeDesLogiciels, ModelePareFeu, ListeDesConfigurations, AuFMessagerie, ListeDesModeles.
Les 5 derniers utilisateurs créés : AlDo, DarkoStanar, EricDane, FritsDouma, MathieuGiannecchini?.

Le paramètre "separator" permet d'affiche une liste d'éléments de manière linéaire.
Le paramètre "notorphaned" permet d'exclure les pages orphelines de la requête.
Le paramètre "exclude" permet d'exclure certaines pages de la requête (dès le SELECT).
Tout ceci à bien entendu demandé quelques modifications (assez légères et compatibles) du fichier wakka.php.
-- ProgFou

Je trouve tes options "separator" et "exclude" très intéressantes (vite : le source ;) ; je suis plus mitigé sur le paramètre "notorphaned". A quoi t sert ce dernier ?
-- CharlesNepote

Pour le "notorphaned", en fait je pense qu'on en a plus besoin à présent... C'était surtout dû au fait qu'on ne voulait pas exclure un certain nombre de pages et qu'il se trouvaient que la plupart étaient orphelines. Maintenant que j'ai implémenté une exclusion efficace avec possibilité d'utiliser LIKE/%, on en a sans doute plus besoin... Je vais vérifier à l'occasion. (sources à venir rapidement, il faut juste que je nettoie un peu le bruit des autres modifications autour... ;-))
-- ProgFou

Concernant le paramètre "exclude", au niveau de l'action {{RecentChanges}} le changement est très simple : ajouter le paramètre exclude au chargement des pages avec LoadRecentlyChanged($max, $this->GetParameter($exclude)). La définition de la fonction LoadRecentlyChanged change alors comme suit :
<?php
function LoadRecentlyChanged($limit=50$exclude="") {
        
$limit= (int) $limit;
        if (
$pages $this->LoadAll("select tag, time, user, owner from ".$this->config["table_prefix"]."pages where latest = 'Y' and comment_on = ''".$this->QueryMakeExclude($exclude)." order by time desc limit $limit"))
        {
                foreach (
$pages as $page)
                {
                        
$this->CachePage($page);
                }
                return 
$pages;
        }
}
function 
QueryMakeExclude($exclude$field="tag")
{
        if (!
$exclude) return "";
        
$tags explode(";"$exclude);
        foreach (
$tags as $key => $tag)
        {
                
$tags[$key] = $field." NOT LIKE '".mysql_escape_string($tags[$key])."'";
        }
        return 
" AND (".implode(" and "$tags).")";
}
?>

Au passage, je suis un peu perturbé par le fait que les pages soient "cachées" alors qu'elles ne sont pas "pleinement" chargées : on n'en récupère pas ici toutes les colonnes utiles. Je sens un bug à venir...
-- ProgFou

Concernant le paramètre "separator", j'ai incrusté le bout de code suivant juste après le LoadRecentlyChanged :
<?php
        
if ($this->GetParameter("separator"))
        {
                
$separator $this->GetParameter("separator");
                foreach (
$pages as $i => $page)
                {
                        
// echo separator before each entry,
                        // except before the first one (index 0)
                        
if ($i != 0) { echo $separator; }
                        
// echo entry
                        
echo $this->ComposeLinkToPage($page["tag"], """"0);
                }
        }
        else
        if (
$this->GetParameter("max"))
        ...
?>

-- ProgFou

Je pense qu'on peut "voir un peu plus grand" pour le paramètre "exclude", cf. FonctionDeSelectionDePage. -- CharlesNepote


Très surprenant comme action :

Il n'y a pas de commentaire sur cette page. [Afficher commentaires/formulaire]