Wikini

ExemplePropositionHandlerDiaporama

PagePrincipale :: DerniersChangements :: DerniersCommentaires :: ParametresUtilisateur :: Vous êtes ec2-3-227-239-9.compute-1.amazonaws.com

Besoin


Il peut être utile de transformer WikiNi en diaporama. On peut envisager plusieurs solutions fonctionnelles mais je crois que la meilleure est de bâtir un diaporama à partir d'une seule page en l'affichant à l'aide d'un "handler" particulier.
Une solution de diaporama présente les intérêts suivants :
On signalera aussi les inconvénients suivants :
Par ailleurs, ToutLeMondePeutEcrire et donc modifier votre présentation en cours d'utilisation : cela peut être un avantage comme un inconvénient.

Sans rivaliser avec les logiciels spécialisés comme PowerPoint ou OpenOffice Impress, un diaporama web peut être graphiquement très abouti ; on verra par exemple :

Cette fonctionnalité est réalisée sur plusieurs moteurs de wiki :

On pourra aussi regarder CraoWiki:PointPuissant (interwiki)...

Solution 1

Le diaporama est construit à partir d'une page où chaque section définie par un titre de niveau 1 représente une diapositive.
Avantages :
Inconvénients :

Réalisation de la solution 1

Le code ci-dessous (brut de décoffrage (avec encore plein d'info de débogage)), permet d'établir un diaporama à partir d'une page où chaque section définie par un titre de niveau 2 représente une diapositive.

Pour qu'il fonctionne avec WikiNi 0.4.1rc, il suffit d'ajouter ce fichier slide_show.php dans le répertoire /handler/page/.
Attention, pour fonctionner avec WikiNi 0.1.1.0.3 et antérieurs il faut ajouter le code suivant à wakka.php :

Après les 3 lignes (3/4 du fichier):
Insérer les 3 lignes suivantes :


Cette solution intègre :

Cette solution (slide_show version 0.07) peut-être visible sur les pages suivantes :
Merci de me faire toutes les remarques possibles.

Deux petites remarques :
En tout cas, c'est un bon travail.
--GarfieldFr

Bien sûr il reste tout de même un peu de travail, notamment de mise en forme.
J'envisage d'ajouter quelques fonctionnalités supplémentaires comme :

(Pour la navigation via JavaScript, je veux bien un petit coup de main...)

slide_show.php

<?php
    
/*
Handler "slide_show" pour WikiNi version WikiNi 0.4.1rc.
Développé par Charles Népote.
Version 0.07 du 25/03/2004.
Licence GPL.

Utilise les classes de style :
.slide { font-size: 160%; margin: 5%; background-color: #FFFFFF; padding: 30px; border: 1px inset; line-height: 1.5; }
.slide UL, LI { font-size: 100%; }
.slide LI LI { font-size: 90% }
.sl_nav p { text-decoration: none; text-align: right; font-size: 80%; line-height: 0.4; }
.sl_nav A { text-decoration: none; }
.sl_nav a:hover { color: #CF8888 }
.sum { font-size: 8px; }
*/

// On teste si le script n'est pas appelé en direct
if (!eregi("wakka.php"$_SERVER['PHP_SELF']))
{
    die (
"acc&egrave;s direct interdit");
}

// On teste si l'utilisateur peut lire la page
if (!$this->HasAccess("read"))
{
    return;
}
else
{
    
// On teste si la page existe
    
if (!$this->page)
    {
        return;
    }
    else
    {
        
/*
        Exemple de page :
        
        (1) Présentation xxxxxxxxxxxxxx
        
        ===== (2) Titre =====
        Diapo 2.
        
        ===== (3) Titre =====
        Diapo 3.
        
        ===== (4) Titre =====
        Diapo 4.
        
        ===== (5) Titre =====
        Diapo 5.
        
        ===== (6) Titre =====
        Diapo 6.
        
        ===== (7) Titre =====
        Diapo 7.
        
        Autre exemple :
        
        ===== (1) Titre =====
        Diapo 1.
        
        ===== (2) Titre =====
        Diapo 2.
        
        ===== (3) Titre =====
        Diapo 3.
        
        ===== (4) Titre =====
        Diapo 4.
        
        ===== (5) Titre =====
        Diapo 5.
        
        ===== (6) Titre =====
        Diapo 6.
        
        ===== (7) Titre =====
        Diapo 7.
        
        */

        //
        // découpe la page
        
$body_f $this->format($this->page["body"]);
        
$body preg_split('/(.*<h2>.*<\/h2>)/',$body_f,-1,PREG_SPLIT_DELIM_CAPTURE);
        if (
$_REQUEST["debug"] == "1"print_r("<div style=\"display: none\">".$body."</div>");

        
// Si la première diapositive commence par un titre de niveau 1
        
if (preg_match('/^<h2>.*<\/h2>/'$body_f)) $major "0";
        else 
$major "1";
        
        
$user $this->GetUser(); // echo $this->GetUser();

        // On teste toutes les paramètres du handler "slide_show" ; s'il n'y en a pas, c'est le paramètre "slide=1" qui est invoqué par défaut

        /*
        switch ($_REQUEST["method"])
        {
            case "export":
                export();
                break;
            case "show":
                showSlide();
                break;
            default:
                showSlide();
                break;
        }
        */

        //if ($_REQUEST["export"]) { return; }
            

        
if (!$body)
        {
            return;
        }
        else
        {
            
// Si on ne précise pas de paramètre, on affiche par défaut la première diapo
            
if (!$_REQUEST["slide"] or $_REQUEST["slide"] == "1"$slide "1";
            else 
$slide $_REQUEST["slide"];

            
// Affiche l'en-tête
            
echo
            
"<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">\n";
            echo
            
"<html>\n\n\n",
            
"<head>\n",
            
"<title>"$this->GetWakkaName(), ":"$this->GetPageTag(), "</title>\n",
            
"<meta name=\"robots\" content=\"noindex, nofollow\" />\n",
            
"<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\" />\n";
            echo
            
"<style type=\"text/css\" media=\"all\"> @import \"wakka.css\";</style>\n";
            
// Teste s'il existe une feuille de style externe, sinon utilise des styles par défaut
            
if (!file_exists("slideshow.css"))
            {
                echo 
"<style type=\"text/css\">\n",
                
".slide { font-size: 160%; margin: 5%; background-color: #FFFFFF; padding: 30px; border: 1px inset; line-height: 1.5; }\n",
                
".slide UL, LI { font-size: 100%; }\n",
                
".slide LI LI { font-size: 90% }\n",
                
".sl_nav p { text-decoration: none; text-align: right; font-size: 80%; line-height: 0.4; }\n",
                
".sl_nav A { text-decoration: none; }\n",
                
".sl_nav a:hover { color: #CF8888 }\n",
                
".sum { font-size: 8px; }\n",
                
"</style>\n";
            }
            else
            {
                echo 
"<style type=\"text/css\" media=\"all\"> @import \"slideshow.css\";</style>\n";
            }

            echo
            
"</head>\n\n\n";
            
            
// Affiche le corps de la page
            
echo
            
"<body ";
            echo (!
$user || ($user["doubleclickedit"] == 'Y')) ? "ondblclick=\"document.location='".$this->href("edit")."';\" " """>\n";

            
// Affichage du sommaire [à compléter]
            /*
            if ($_REQUEST["sum"] == "on")
            {
                echo "<ul class=\"sum\">\n";
                if ($major = "1") echo "<li>", $this->format($body[0]), "</li>\n";
                foreach ($body as $title_sum)
                {
                    $i = $i + 1;
                    $type = gettype($i/2);
                    // Ne retourne que les 50 premiers caractères du titre
                    $title_sum = substr($title_sum, 0, 50);
                    if ($type == "integer")
                    {
                        echo "<li>",$this->format($title_sum),"</li>\n";
                    }
                }
                echo "</ul>\n\n";
            }
            */

            // Affichage du menu de navigation
            
echo
            
"<div class=\"sl_nav\">\n",
            
"<p>";
            if (
$slide !== "1")
            echo
            
"<a href=\"",$this->href(),"/slide_show&slide=",$_REQUEST['slide']-1,"\"><< pr&eacute;c&eacute;dent</a>",
            
" :: <a href=\"",$this->href(),"/slide_show&slide=1\">[d&eacute;but]</a>\n";
            echo 
" :: ";
            if (
$body[($slide)*2-($nb*2)+2] or $slide == "1")
            echo 
"<a href=\"",$this->href(),"/slide_show&slide=",$slide+1,"\">suivant >></a>\n";
            echo
            
"</p>\n";
            echo 
"<p><a href=\"",$this->href(),"/edit\">Editer </a> :: <a href=\"",$this->href(),"\">[]-></a></p>\n";
            echo
            
"</div>\n\n";

            echo
            
"<div class=\"slide\">\n";
            
            
// Si c'est la première diapositive
            
if ($slide == "1" and $major == "1")
            {
                echo 
$body[0], "<br /><br />";
            }

            
// A partir de la deuxième diapositive
            
else
            {
                echo
                
$body[($slide*2)-($major*2)-1].$body[($slide*2)-($major*2)],"\n";
                echo 
"\n";
            }
            echo
            
"</div>\n\n";

            echo
            
"</body>\n",
            
"</html>";
        }
    }
}
?>


-- CharlesNepote

Solution 2


L'inconvénient de la solution 1 est la modification de wakka.php pour supporter un outil (le diaporama) dont l'utilisation est très restreinte en nombre d'utilisateurs. Je pense qu'une action devrait être utilisable à la place. Je verais bien une action du genre : {{diaporama page="MaPresentation" start="1" end="20"}}
Avec une série de pages dont le nom serait "MaPresentation001" à "MaPresentation020". Chaque page représentant une diapositive du diaporama. Les paramètres "start" et "end" permettent de définir la partie du diaporama utilisée. Le résultat de l'exécution de l'action serait l'affichage de boutons de navigation (suivant, précédent, début, fin) et de l'affichage de la diapositive comme une page incluse ou dans une fenêtre popup.
Avantages :
Inconvénients :
--GarfieldFr

L'inconvénient de la solution 1 est à relativiser : il pèse 3 lignes de code... c'est assez faible...
Les inconvénients de la solution 2 me paraissent plus importants.
Pourquoi ne pas modulariser les handlers de façon à éviter tout ajout de code dans le coeur de WikiNi (à la façon des actions ou des formateurs pour la coloration syntaxique) ? Cela me paraît assez simple à mettre un oeuvre. -- CharlesNepote

L'idée de rendre les handlers modulaire comme pour la coloration syntaxique, j'y avait pensé mais sans trouver de solution me satisfaisant à première vue, mais cela me semble être une nécessitée.
Pour répondre à la liste des inconvenient de la solution 2, il doit être possible de faire un mélange de 2 solutions :
Par contre, que se passerait il si on appelait la méthode /slide_show pour une page n'ayant pas de diaporama ? A mon avis, les "handlers" devraient être applicable à toutes les pages de WikiNi.
--GarfieldFr


Discussion


Quel est l'interêt d'un tel diaporama dans le contexte de WikiNi ? Je conçois tout à fait l'utilité, mais il me semble que ce doit être un développement spécifique ou un ajout non standard peu de personne ayant l'utilité d'un tel diaporama. De plus, dans un contexte d'entreprise, un outil comme Power Point (et je suppose OpenOffice) a une fonction qui permet d'exporter un diaporama en page web reliées entre elle. --GarfieldFr

J'ai listé au début de cette page les intérêts propres d'une fonction de diaporama.
Comparativement à PowerPoint et OpenOffice Impress, un diaporama-wiki présente les intérêts suivants :
As-tu déjà vu un export HTML d'un document PowerPoint ? C'est tout simplement une catastrophe (testé le 04/11/2003 avec MS PowerPoint 2000) :
Peut-être qu'OpenOffice Impress fait mieux, mais cela n'enlève en rien les avantages d'édition communautaire que propose le wiki.
Par ailleurs je ne suis pas sûr que "peu de personnes" aient l'utilité d'une telle fonction. D'un autre côté je n'ai pas du tout l'intention d'imposer cette fonction et son adoption sera consensuelle ou ne sera pas (comme on l'a toujours fait sur WikiNi ;)
-- CharlesNepote

En effet, l'indépendance de plate forme est intéressante. Pour PowerPoint, je n'ai pas regardé de génération depuis longtemp en effet.... En ce qui concerne le public concerné, lorsque je dis peu de personnes c'est bien sûr par rapport à l'ensemble des personnes utilisant un Wiki.
--GarfieldFr

Je penche très en faveur d'une fonction diaporama pour Wikini. Je pense qu'il y a un grand nombre de personnes que cela pourrait intéresser. En tout état de cause, si c'est bien incorporé il n'y aura pas ralentissement de Wikini pour cette fonction. Beaucoup d'avantages et peu d'inconvénients.
-- PatrickPaul

Dans la même veine, j'ai écris une action d'enchainement de page. Ca n'est pas du diaporama, mais peut-être que ça peut aider : NavigationEntrePage --GarfieldFr

Je reviens d'un diaporama sur grand écran ! C'est magnifique ! (voir exemple sans contenu sur site FidelioEspoir)
Merci. Sans m'avancer grand merci de la part des enseignants, des cadres pressés, des formateurs ...peu de monde ?

Beaucoup de points communs : diaporama et impression sont deux actions "sortie". A ce titre, elles doivent avoir beaucoup de code en commun...? -- FidelioEspoir

S'il n'y a pas d'objection, étant donné que le handler est totalement modulaire et qu'il n'a aucun impact sur le reste de l'application, je propose de l'intégrer au CVS lundi 5 avril. (AIntegrerAuCVS) -- CharlesNepote
Pour ma part je suis aussi pour vu que ce n'est pas intrusif et que le ralentissement est completement négligeable. -- ProgFou

Je l'utilise depuis une semaine. C'est aussi un moyen simple pour lire les pages avec des polices plus grandes (accès aux mal-voyants). -- FidelioEspoir

Intégrer le changement de feuille de style

A terme il serait bien de l'intégrer aussi dans l'idée de basculement (switch) de feuille de style : que la feuille de style d'impression aussi puisse être interchangeable. -- ProgFou

Pourquoi pas. J'y réfléchis. -- CharlesNepote

Affichage des pages internes liées au diaporama

Suggestion : Quand une diapo est affichée on peut cliquer sur les liens, mais la page choisie est affichée normalement. Serait-il possible de maintenir l'affichage diapo ? C'est un changement que la pratique du diaporama m'incite à faire. -- FidelioEspoir

A voir. L'idéal serait peut-être d'avoir deux petites icônes pour chaque lien : l'une permettant de voir le lien sous forme de diaporama, l'autre permettant de voir la page normale. -- CharlesNepote


Problèmes rencontrés




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