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 :
- l'outil de fabrication et de consultation, un navigateur web, est multi plateforme, ouvert et largement répandu
- la méthode de consultation, en ligne, permet une diffusion aisée et rapide du support
- possibilité de créer/modifier la présentation à plusieurs
- impression de la présentation sous la forme d'une page
- la possibilité d'hyperliens dans les diapositives peut offrir des renvois utiles à la présentation
On signalera aussi les inconvénients suivants :
- il n'y a pas de maîtrise de l'espace de la page : le texte peut "déborder" et forcer l'utilisation de l'ascenseur
- sauf serveur web local, il n'est pas possible de réaliser une présentation si l'on est pas connecté sur un support xnet
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 :
- s'intègre parfaitement dans WikiNi : pas de balises supplémentaires ou de page à modifier
- construction très simple du diaporama
Inconvénients :
- ne permet pas de lier plusieurs pages du wiki
- modification très légère du coeur de WikiNi version 0.1.1.0.3 : 3 lignes de code... (pas de modification pour 0.4.1rc)
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):
- case "raw":
- echo $this->Method($this->method);
- break;
Insérer les 3 lignes suivantes :
- case "slide_show": // ajout
- echo $this->Method($this->method); // ajout
- break; // ajout
Cette solution intègre :
- un menu de navigation permettant :
- l'affichage de la diapositive suivante
- l'affichage de la diapositive précédente
- le retour à la première diapositive
- une sortie du diaporama
- un lien direct permettant d'éditer la page
- l'édition directe de la page à partir d'un double-clic
- la reconnaissance automatique d'un fichier slideshow.css ; si ce fichier est absent, des styles par défaut sont utilisés (ces derniers sont inclus dans slide_show.php, pas besoin d'aller les créer dans wakka.css)
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 :
- L'inclusion de page marche très bien, il est donc simple de faire un slide show de 40 ou 50 pages. Dans une seule page, cela me semble impossible d'y mettre 40 slides.
- Il ne manque plus que des images ! (voir l'ActionAttach ?)
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 :
- une fonction d'augmentation/diminution de la taille des caractères pour s'adapter à la résolution de l'écran de sortie (via des touches du clavier ou des liens)
- des fonctions de navigation via les touches du clavier (suivant, précédent, première diapo, sortie, etc.) (JavaScript),
- dans le menu de navigation (?), un export de toutes les diapositives, sous forme de fichiers HTML, permettant d'utiliser le diaporama hors ligne le cas échéant,
- un paramètre permettant d'afficher ou non le menu de navigation ("&menu=on" ?),
- un paramètre pour répéter un titre sur toutes les pages ("&title=" ?),
- un paramètre pour choisir un fond de page ("&background=" ?),
- un paramètre pour choisir une feuille de style ("&stylesheet=" ?),
- un paramètre pour faire apparaître le sommaire sur chaque diapo, en surlignant la diapo en cours.
(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è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écédent</a>",
" :: <a href=\"",$this->href(),"/slide_show&slide=1\">[dé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 :
- Pas de balise supplémentaire
- Pas de modification du coeur de WikiNi
- Facilement mis en oeuvre par plusieurs personnes puisque chaque diapo est une page distincte
Inconvénients :
- ne permet pas de changer l'habillage de la page (l'affichage du menu de navigation ou autres est inutile dans le cadre d'un diaporama !) (CharlesNepote)
- pas si le diaporama est affiché dans une fenêtre popup, mais de toute façon on a le même problème avec la solution 1 --GarfieldFr
- impose le choix de nom de page (CharlesNepote)
- que se passe-t-il si je veux réorganiser l'ordre des pages ??? (CharlesNepote)
- le nom du produit présenté change ? il faut alors modifier toutes les pages... (CharlesNepote)
--
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 :
- Une action pour sa simplicité d'utilisation (solution2) et sa modularité (inutile si on rend modulaire les méthodes).
- Une seule page contenant toutes les diapos (solution1)
- L'action serait alors appelée depuis une page quelconque avec : {{diaporama page="MaPresentation"}} où "MaPresentation" serait la page contenant toutes les diapos.
- Affichage du diaporama dans une fenêtre popup pouvant prendre l'ensemble de la taille de l'écran et sans bordure/menu/bouton présent dans les navigateurs et sans l'entête et le pied de page de WikiNi.
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 :
- l'outil de fabrication et consultation, un navigateur web, est multi plateforme, ouvert et largement répandu (à l'inverse de PowerPoint par exemple)
- l'outil de fabrication et consultation n'a pas à subir un processus d'installation
- la méthode de consultation, en ligne, permet une diffusion aisée et rapide du support ; à l'inverse la diffusion d'un document PowerPoint est moins aisée : le document ne s'ouvre pas directement dans un navigateur, le document encombre les boites aux lettres des destinataires
- possibilité de créer/modifier la présentation à plusieurs ; la création à plusieurs d'un document PowerPoint est plus délicate : chacun doit fabriquer sa diapositive dans son coin, il est impossible de travailler à plusieurs sur une diapositive, etc.
- la possibilité d'hyperliens dans les diapositives peut offrir des renvois utiles à la présentation ; les logiciels bureautiques peuvent intégrer des liens mais leur ouverture s'effectue dans un navigateur et non directement dans l'application ce qui est moins pratique (attente de l'ouverture du navigateur, jonglage entre plusieurs applications, etc.).
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) :
- le contenu n'est accessible que pour certains navigateurs
- une diapositive de PowerPoint peut générer jusqu'à des dizaines de fichiers pour une page un peu complexe
- le contenu est diffusé sous forme de frame, avec toutes les difficultés d'accessibilité que cela entraine
- le résultat dans un navigateur est parfois illisible : taille de polices minuscules et impossibles à agrandir, etc.
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
- Une solution simple pour tes besoins d'impression c'est la FeuilleDeStyleWikiNiPourLimpression, nous l'utilisons au bureau avec beaucoup de bonheur. Si tu recherches une solution plus complète, il faut que tu précises tes besoins. -- CharlesNepote
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