Wikini

VerificationDeModificationDeLaPage

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-54-198-41-76.compute-1.amazonaws.com
Il est très pénible de voir que des pages qui n'ont subi aucune modification sont néanmoins enregistrées lorsqu'on clique sur le bouton "Sauver" de la page d'édition.
Deux gros inconvénients sont au moins visibles :

Cette fonctionnalité est intégré à WikiNi à partir de la version 0.4.1rc (GarfieldFr et CharlesNepote).


Discussions

La solution utilisée actuellement passe par une comparaison de chaîne (cf. code ci-dessous).
<?php
[....]
            
// store
            
if (!$error)
            {
                
$body str_replace("\r"""$_POST["body"]);
                
                if(
rtrim($body)==rtrim($this->page["body"])) {
                    
$this->SetMessage("Cette page n\'a pas été enregistrée car elle n\'a subi aucune modification.");
                    
$this->Redirect($this->href());
                }

                
// add page (revisions)
                
$this->SavePage($this->tag$body);
[....]
?>


Une autre idée pour la comparaison : utiliser un CRC qui serait stocké dans la base de données. Chaque versions d'une page a un CRC différent ; il suffirait de calculer le CRC de la nouvelle version de la page et de le comparer au CRC de la version précédente. Cela implique une modification de la table des pages pour ajouter la colonne CRC. Il faudrait voir si le calcule d'un CRC est plus rapide que la comparaison de deux textes.

Résultat du test : le CRC est nettement plus lent ! (surprise !) donc la comparaison des chaînes s'impose.

-- GarfieldFr

Ce n'est pas franchement surprenant : un CRC fait plusieurs calculs pour chaque octet ! Alors qu'une comparaison de chaîne toute simple fait juste un test d'égalité (en fait une soustraction avec test de valeur nulle ;)) pour chaque octet. CQFD. ;-)
Par ailleurs, c'est très bien d'avoir fait cela, car ça va me permettre de chercher/trouver de quel coté insérer du code pour faire du cache de génération de page ! ;-)
-- ProgFou

Au passage, je suis venu lire cette page en m'attendant à y trouver un autre besoin que celui-ci : la possibilité de voir la modification d'une page sans avoir besoin d'aller la consulter ou de fouiller les DerniersChangements.
Je pense à quelque chose comme un handler /meta qui permettrait de récupérer les meta-informations d'une page, et une action ou autre permettant ensuite d'afficher l'info qui nous intéresse. Une application directe serait un lien interwiki avec affichage (optionel, vu que pas supporté partout) des date/user actuels de cette page.
-- ProgFou

Il existe déjà un fils RSS pour les changements intervenus sur tout le site : http://www.wikini.net/wakka.php?wiki=DerniersChangementsRSS/xml
Cela dit, cela n'existe pas au niveau de la page. Je n'en vois pas encore l'intérêt, mais rien n'empêche de le développer puisque les handler sont désormais modulaires (et ça peut être assez facile à développer). Je ne comprend pas bien ton histoire de lien interwiki avec affichage des date/user de la page... Peux-tu donner un exemple ?
A propos d'expérimentations interwiki, j'ai lancé quelques idées (voir un peu plus) sur ce sujet sur CraoWiki:VocabulaireWikiSiteExchange (interwiki). Les métadonnées produites par le handler "/meta" pourraient d'ailleurs être compatibles avec le vocabulaire WikiSiteExchange? (qui reste très ouvert à toutes propositions, je le rapelle).
-- CharlesNepote

Je pense à un truc tout simple : pouvoir suivre les pages que j'ai commenté, sans avoir à les visiter (c'est long quand on en modifie beaucoup). Je cherche donc une solution proche de la syndication, mais qui serait plus large que "les 10 dernières pages" : il faudrait pouvoir récupérer les infos de syndication de n'importe quelle page à priori, pour les afficher (optionnellement) à la suite du lien interwiki. Cela veut probablement dire qu'il faut que je modifie le traitement des liens interwiki pour vérifier si l'utilisateur a ajouté une option comme /details au NomWiki et faire un appel de la page avec le handler /xml pour en retirer les infos à ajouter à droite du lien. Un exemple serait sans doute plus clair : [[WikiNi/details:ProgFou]] devrait m'afficher quelque chose comme WikiNi:ProgFou (interwiki) dernière modification le 2004-01-02 13:13:55 par ProgFou. Je crois que je vais commencer par en faire une action avant de (re)tapper dans le code de WikiNi ... ;-)
-- ProgFou


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