ListeActions
Sujet de cette page
Le but de cette page est de présenter pour discussion une action que j'ai écrite pour attacher un fichier à une page
WikiNi.
2004-04-28 : L'action
{{attach}} a été entièrement réécrite.
Mise à jour le 2004-05-08 : Gestion de version des fichiers et gestionnaire de fichiers.
NB: l'évolution de la fonctionnalité liée à l'insertion d'images est en cours de discussion sur
ErgonomieInclureUneImage.
Démonstration
Dernière version
Ce que fait cette action
- Elle permet d'uploader un fichier sur le site, dans un sous-répertoire d'un répertoire défini pour recevoir les uploads. Le sous-répertoire a pour nom le nom de la page d'où à lieu l'attachement. Le cas ou le safe_mode de PHP est activé (exemple sur Free.fr) est traité et tous les fichiers uploadés seront dans même répertoire mais leur nom sera préfixé avec le nom de la page d'où a eu lieu l'upload
- Si le fichier attaché est une image, elle est affichée dans la page. Cette image peut être sensible, les liens possibles pour une image sensible sont le nom d'une page WikiNi, un lien interwiki et un URL "normal".
- Si le fichier attaché n'est pas une image, alors il est disponible en téléchargement. Un gestionnaire de téléchargement se charge d'empêcher l'exécution de scripts PHP ou autres sur le serveur.
Syntaxe
L'action
{{attach}} prend les paramètres suivants :
- file ou attachfile: nom du fichier tel qu'il sera sur le serveur. Les espaces sont remplacés par des "_". (OBLIGATOIRE)
- desc ou attachdesc: description du fichier. C'est le texte qui sera affiché comme lien vers le fichier ou dans l'attribut alt de la balise <img>. Ce paramètre est obligatoire pour les images pour être conforme au XHTML.
- link ou attachlink: URL de lien pour une image sensible. le lien peut être un nom de page WikiNi, un lien interwiki ou une adresse HTTP. Ce paramètre est ignoré si le fichier n'est pas une image.
- class: indique le nom de la ou les classes de style à utiliser pour afficher l'image. les noms des classes sont séparés par un espace.
Exemples
- Attacher un fichier archive:
- {{attach file="archive.zip"}}
- Attacher un fichier archive avec une description
- {{attach file="archive.zip" desc="Code source de l'application"}}
- Afficher une image:
- {{attach file="image.png" desc="voici une image"}}
- Afficher une image sensible:
- {{attach file="image.png" desc="voici une image" link="PagePrincipale"}}
{{attach file="image.png" desc="voici une image" link="WikiNi:PagePrincipale"}}
{{attach file="image.png" desc="voici une image" link="http://www.wikini.net"}}
- Afficher une image collé sur le bord droit et sans contour:
- {{attach file="image.png" desc="voici une image" class="right noborder"}}
Gestionnaire des fichiers attachés
Une action
{{attachfm}} qui ne prend pas de paramètre permet d'afficher facilement un lien vers le gestionnaire des fichiers attachés à la page courante. Ce gestionnaire permet de mettre des fichiers à la poubelle, de vider la poubelle, de récupérer un fichier depuis la poubelle.
Installation
L'archive comprend
6 fichiers :
attach.php, attach.class.php, attachfm.php, filemanager.php, download.php, upload.php.
- Copiez le fichier attach.php dans le répertoire des actions (/actions)
- Copiez le fichier attach.class.php dans le répertoire des actions (/actions)
- Copiez le fichier attachfm.php dans le repertoire des actions (/actions)
- Copiez le fichier filemanager.php dans le répertoire des handlers (/handlers/page)
- Copiez le fichier upload.php dans le répertoire des handlers (/handlers/page)
- Copiez le fichier download.php dans le répertoire des handlers (/handlers/page)
- Créez le répertoire racine des uploads sur le site du wiki. Si le SAFE_MODE de PHP est activé, vous devez créer vous même ce répertoire et autoriser l'écriture dans ce répertoire pour l'utilisateur et le groupe.
- Ouvrez le fichier wakka.config.php et ajoutez la configuration de l'action.
- Tous les paramètres de configuration ont une valeur par défaut.
- Le configuration par défaut est:
$wakkaConfig["attach_config"] = array(
"upload_path" => 'files', //répertoire racine des uploads
"ext_images" => 'gif|jpeg|png|jpg', //extension des fichiers images
"ext_script" => 'php|php3|asp|asx|vb|vbs|js', //extension des script(non utilisé)
"update_symbole" => '*', //symbole pour permettre une mise-à-jour du fichier
"max_file_size" => 1024*100, //taille maximum du fichier en octets (100Ko par défaut)
"fmDelete_symbole" => 'Supr', //symbole à afficher pour le lien "supprimer" dans le gestionnaire de fichier
"fmRestore_symbole" => 'Rest', //symbole à afficher pour le lien "restaurer" dans le gestionnaire de fichier
"fmTrash_symbole" => 'Poubelle'); //symbole à afficher pour le lien "Poubelle" dans le gestionnaire de fichier
- Ajoutez la définition des classe CSS à utiliser pour les images. Le nom de la classe CSS doit commencer par .attach_. Voici quelques exemples de classe:
.attach_margin05em { margin: 0.5em;} /* marge de 0.5 em autour de l'image*/
.attach_margin1em { margin: 1em;} /* marge de 1em autour de l'image*/
.attach_left {float: left;} /* bloc flottant à gauche */
.attach_right {float: right;} /* bloc flottant à droite */
.attach_noborder {border-width: 0px;} /* pas de bordure */
.attach_vmiddle {vertical-align: text-bottom;} /* alignement vertical au milieu */
- Pour configurer l'aspect du gestionnnaire de fichier utiliser les classes de style .tableFM , tableFMCol1 et tableFMCol2. La classe tableFM est appliquée au tableau affichant les fichiers. Le tableau utilise les balises <THEAD>, <TFOOT> et <TBODY> conformes au HTML4.
Exemple :
.tableFM {border: thin solid Black; width: 100%; }
.tableFM THEAD { background-color: Silver; font-weight: bold; text-align: center; }
.tableFM TFOOT { background-color: Silver; font-weight: bold; text-align: left; }
.tableFM TBODY TR { text-align: center; }
.tableFMCol1 { background-color: Aqua; }
.tableFMCol2 { background-color: Yellow; }
Limitation
Actuellement l'action
{{attach}} ne fonctionne pas si le mode rewrite est utilisé (paramètre rewrite_mode à 1 dans le fichier de configuration). Vous
devez donc mettre le paramètre
"rewrite_mode" => "0" dans le fichier de configuration.
- Euh... Tu veux rire ?! Il faut trouver une solution dans ton script car c'est une contrainte parfois tout bonnement inacceptable ! -- ProgFou
- Ben non, je ris pas. En plus j'ai pas le temps de le faire en ce moment donc ... si tu es volontaire pour corriger ce problème "inacceptable"... --GarfieldFr
- Je modère mon "inacceptable" : je veux dire par là que quand le design t'impose de faire de la ré-écriture d'URL (= pas le choix), c'est dommage de se priver de ton action juste parce qu'elle ne supporte pas la ré-écriture d'URL... Je ne l'avais pas encore installé sur mon site, mais du coup je suis déjà certain que ça ne fonctionnera pas... :-( Je serais bien volontaire pour participer là dessus mais, hélas, le temps me manque en ce moment et ce n'est pas (encore) dans mes priorités... Peut-être que je m'y mettrai quand on m'imposera d'avoir des attachements sur mes pages... ;-) Ceci dit, mon "inacceptable" ne m'empêche pas de reconnaître du bon boulo : le tiens ! -- ProgFou
- J'avais bien compris et tu as tout à fait raison d'indiquer que c'est dommage que ca ne marche pas avec une redirection d'URL. Il va donc falloir que je trouve comment configurer la redirection d'URL et comment l'utiliser dans attach. Mais c'est pas pour tout de suite... si il y a des volontaires... --GarfieldFr
Mode Réécriture d'URL
Il est tout à fait possible d'utiliser l'action avec la réécriture d'URL d'Apache sans aucune modification du code de l'action. Voici un test que je viens de réaliser, ne me demandez pas d'expliquer mais ca marche:
RewriteEngine on
#On n'applique pas les règles aux fichiers CSS
# CSS dans handler
RewriteRule ^([^/]*)/(.*)\.css$ $2\.css [QSA,L,NC]
# CSS dan sles pages normales
RewriteRule ^(.*)\.css$ $1\.css [QSA,L,NC]
#*******************************************************************************
# REGLES POUR L'ACTION ATTACH
#*******************************************************************************
#RewriteRule ^(.*)/filenamager$ wakka.php?wiki=$1/filemanager
# Regles pour l'affichage des images du filemanager
#Image dans le filemanager
RewriteRule ^([^/]*)/images/(.*)$ images/$2 [QSA,L,NC]
#Image "update"
RewriteRule ^images/(.*)$ images/$1 [QSA,L,NC]
# Regle pour l'affichage d'une image ou lien vers un fichier
RewriteRule ^uploads/(.*)$ uploads/$1 [QSA,L,NC]
#*******************************************************************************
#Regle générale pour les pages
#Page avec un handler
RewriteRule ^([^/]+)/(.*)$ wakka.php?wiki=$1/$2 [L,QSA,NC]
#page sans handler
RewriteRule ^(.*)$ wakka.php?wiki=$1 [L,NC,QSA]
NB: le flag NC dans les options indique que l'on fait les comparaisons sans considérer la casse. A supprimer éventuellement...
Dans cet exemple, j'ai considéré que l'on avait utilisé des images au lieu de mots pour les liens de mise à jour et dans le filemanager (voir l'astuce chapitre suivant) et que ces images étaient dans le répertoire
images à la racine du wiki.
Je pense que c'est la meilleure méthode car modifier le code implique que l'on considère une exploitation privilégiée de
WikiNi avec Apache.
Astuces
Si vous voulez mettre des images pour le lien de mise à jour, de suppression et de restauration de fichier, vous pouvez mettre quelque chose comme ceci dans le fichier de configuration :
$wakkaConfig["attach_config"] = array(
- "update_symbole" => '<img alt="Mettre à jour" src="images/update.gif" border="none"/>',
- "fmDelete_symbole" => '<img alt="Supprimer" src="images/delete.gif" border="none"/>',
- "fmRestore_symbole" => '<img alt="Restaurer" src="images/restaure.gif" border="none"/>',
- "fmTrash_symbole" => '<img alt="Corbeille" src="images/corbeill.gif" border="none"/>');
Je met à disposition des petite images pour ci-dessus http://metaweb.ath.cx/wakka.php?wiki=ContribActionAttach -- Err404
- c'est sur mon serveur web qui me sert à tester, donc parfois il n'est pas disponible (ben oui j'expérimente...)
- tant qu'à mettre un alt, autant mettre quelque chose dedans hein ;-) -- LordFarquaad
pour augmenter la taille des fichiers en upload
Il faut rajouter les paramètres suivants dans wakka.config.php (juste après "preview_before_save" => "0"); )
pour personnaliser l'action qui permet d'envoyer des fichiers sur un wiki :
$wakkaConfig["attach_config"] = array(
"upload_path" => 'files', //répertoire racine des uploads
"update_symbole" => '*', //symbole pour faire un update du fichier
"max_file_size" => 1024*2000); //taille maximum du fichier en octet (100Ko par defaut)
Ensuite on peut régler la taille maximum comme on veux en changeant le max_file_size. Attention la majeure partie des hébergeurs limite cette taille à 2 Mega.
ActionAttachDiscussion ActionAttachBug
PageSuivieParGarfieldFr
ListeDesActionsWikini
ActionsEnCoursDeDiscussion