Fork me on GitHub




(1) 2 »


Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Bonjour à tous,

Ce matin, grand soleil, les petits oiseaux chantent, café chaud enfin bref, tout ce qu'il faut pour commencer une bonne journée.
J'admire mon travail de la nuit : la création d'un magnifique formulaire d'inscription (45 éléments de formulaire...) pour mon nouveau module.
Quand soudain, l'horreur, le gros nuage qui assombrit la matinée. Que vois-je au centre de la page qui fait comme une tâche au milieu de tous ces beaux champs bien stylés ? Mais oui, c'est bien lui : le vilain "input file" avec son look des années 80 .
Open in new window
Ne pouvant me résigner à laisser cette antiquité à la vue de tous, je décide de le relooker un peu. Un petit tour sur internet et quelques minutes plus tard, l'astuce surgit: Cacher le "input file" et le piloter avec une zone de texte, un simple bouton et un peu de javascript (ça c'est pour la théorie).
La solution vient d'elle-même : créer un nouvel élément de formulaire pour notre Xoops préféré (pour ceux qui suivent, c'est mon truc en ce moment lol).

Rassurez-vous, je vais faire court . Pour les impatients : le résultat final est en fin de post.
Attention... c'est parti...

1- Dans /class/xoopsform créez un fichier formfilehidden.php et collez le code suivant dedans :
<?php
/**
 * XOOPS form element
 *
 * You may not change or alter any portion of this comment or credits
 * of supporting developers from this source code or any supporting source code
 * which is considered copyrighted (c) material of the original comment or credit authors.
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
 *
 * @copyright       The XOOPS Project http://sourceforge.net/projects/xoops/
 * @license         GNU GPL 2 (http://www.gnu.org/licenses/old-licenses/gpl-2.0.html)
 * @package         kernel
 * @subpackage      form
 * @author          slider84 From original XoopsFormFile by Kazumi Ono (AKA onokazu) http://www.myweb.ne.jp/http://jp.xoops.org/
 */
 
defined('XOOPS_ROOT_PATH') or die('Restricted access');

/**
 * A file upload field
 */
class XoopsFormFileHidden extends XoopsFormElement
{
   
    var 
$_maxFileSize//Maximum size for an uploaded file
    
var $_size;
    var 
$_maxlength;
    var 
$_value;
    
    
/**
     * Constructor
     *
     * @param string $caption Caption
     * @param string $name "name" attribute
     * @param int $maxfilesize Maximum size for an uploaded file
     * @param int $size Size for the text area
     * @param int $maxlength Maximum text length for text area
     */
    
function XoopsFormFileHidden($caption$name$maxfilesize$size$maxlength$value '')
    {
        
$this->setCaption($caption);
        
$this->setName($name);
        
$this->_maxFileSize intval($maxfilesize);
    
$this->_size intval($size);
        
$this->_maxlength intval($maxlength);
        
$this->setValue($value);
    
$this->_type "button";
    }
    
    
/**
     * Get the maximum filesize
     *
     * @return int
     */
    
function getMaxFileSize()
    {
        return 
$this->_maxFileSize;
    }


    function 
getSize()
    {
        return 
$this->_size;
    }
    
    
/**
     * Get maximum text length
     *
     * @return int
     */
    
function getMaxlength()
    {
        return 
$this->_maxlength;
    }
    
    
/**
     * Get initial content
     *
     * @param bool $encode To sanitizer the text? Default value should be "true"; however we have to set "false" for backward compat
     * @return string
     */
    
function getValue($encode false)
    {
        return 
$encode htmlspecialchars($this->_valueENT_QUOTES) : $this->_value;
    }
    

    
/**
     * Set initial text value
     *
     * @param  $value string
     */
    
function setValue($value)
    {
        
$this->_value $value;
    }

function 
getType()
    {
        return 
in_arraystrtolower($this->_type), array("button""submit""reset") ) ? $this->_type "button";
    }

    
/**
     * prepare HTML for output
     *style='visibility:hidden;height:0px'
     * @return string HTML
     */
    
function render()
    {
        return 
"<input type='hidden' name='MAX_FILE_SIZE' value='" $this->getMaxFileSize() . "' /><input type='file' style='visibility:hidden;height:0px' name='" $this->getName()."_input" "' id='" $this->getName()."_input" "' title='" $this->getTitle() . "'" .$this->getExtra() . " />
<input type='hidden' name='xoops_upload_file[]' id='xoops_upload_file[]' value='" 
$this->getName() ."_input" "' />
<br><div class='block inline'><input type='text' readonly='readonly' name='" 
$this->getName() ."_txt""' title='" $this->getTitle() . "' id='" $this->getName() ."_txt""' size='" $this->getSize() . "' maxlength='" $this->getMaxlength() . '" value="' $this->getValue() . "' 
onclick='javascript:
$("
#".$this->getName()."_input"."").click();
$("input[type=file]").change(function() {
   var 
fullPath document.getElementById("" $this->getName()."_input" "").value;
document.getElementsByName("" $this->getName() ."_txt""")[0].value fullPath;
}); 
'/>
<input type='" . 
$this->getType() . "' class='formButton' name='" . $this->getName() ."_btn". "'  id='" . $this->getName() ."_btn". "' value='" . _BROWSE . "' title='" . $this->getValue() . "'
onclick='
javascript:
$(
"#".$this->getName()."_input"."").click();
$(
"input[type=file]").change(function() {
   var 
fullPath document.getElementById("" $this->getName()."_input" "").value;
document.getElementsByName("" $this->getName() ."_txt""")[0].value fullPath;
}); 
' /></div>";

    }
}
?>

2- Dans /class/xoopsload.php rajoutez dans la fonction loadCoreConfig():
'xoopsformfilehidden' => XOOPS_ROOT_PATH '/class/xoopsform/formfilehidden.php',

3- Dans /class/xoopsformloader rajoutez :
xoops_load('XoopsFormFileHidden');

4- Dans /language/french/global.php rajoutez :
define("_BROWSE","Parcourir...");

5- Ajout dans un formulaire comme tout élément de xoops :
$variable = new XoopsFormFileHidden($caption$name$maxfilesize$size$maxlength);

Ormis $caption, $name et $maxfilesize qui sont identiques à ceux de l'élément XoopsFormFile d'origine :
$size= Taille de la zone de texte.
$maxlength= Nombre de caractères max dans la zone de texte.
Aprés quelques heures de travail et de torture de neurones, voici le résultat du relooking :
Open in new window
Testé sur 2.5.5 et 2.5.6. Si certains se sentent une âme d'aventurier et veulent bien le tester sur d'autres versions...

Posté le : 22/06/2013 22:19
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 16/03/2009 16:40
De Tende (06)
Messages: 3528
Peux-tu me faire parvenir par mail les fichiers modifiés de Xoops 2.5.6 ?

Ce sera plus rapide pour que j'ajoute cela à Xoops 2.5.7, après avoir testé bien sûr

Merci encore

Posté le : 22/06/2013 22:44

Open in new window

Xoopseuse Mai 2012 | Responsable équipe internationale | Recherche avancée en bas de page !
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
@Cesag: C'est parti
PS: j'ai testé sous Firefox, Opéra et Chrome. Pas eu le temps de tester sous IE.

@alain01 si tu passes: Ce coup-ci tu n'auras pas à abuser pour l'internationalisation

Posté le : 22/06/2013 22:58
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 16/03/2009 16:40
De Tende (06)
Messages: 3528
Pas reçu, je t'ai mail mon courriel

Sinon tu le vois sur mon profil.

Posté le : 22/06/2013 23:04

Open in new window

Xoopseuse Mai 2012 | Responsable équipe internationale | Recherche avancée en bas de page !
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Ok, envoyé.

Posté le : 22/06/2013 23:09
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 16/05/2003 18:10
De Rhone-Alpes
Messages: 4051
Sliiiiide,
comme tu montes en puissance !!!

Cool, maintenant, tu nous proposes même des tutos...
J'adore... Forcément !

Posté le : 23/06/2013 00:25

Open in new window
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Merci alain.
J'espère que tous les tests seront concluants même si j'en ai fait un bon paquet (comme sur tinymcev4 ) j'essaie de ne rien laisser passer mais on n'est jamais à l'abri d'un oubli.
Eh oui, j'aime bien faire des tutos. C'est grâce aux tiens entre autre que j'ai commencé, il est normal que j'en fasse profiter à mon tour la communauté . En plus j'avais une âme de poète aujourd'hui

Posté le : 23/06/2013 00:36
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Attention: petit bug avec certains thèmes (dont celui par défaut). Je suis en train de regarder ça.

Posté le : 23/06/2013 10:20

Open in new window

Xoops 2.5.7.2 - Debian 8.2 - Apache 2.4.10 - MySQL 5.5.47 - Php 5.6.17
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Résolu, c'était un petit problème avec Jquery du coup, j'ai modifié le code de la fonction render() pour ne pas l'utiliser:
function render()
    {
        return 
"<input type='hidden' name='MAX_FILE_SIZE' value='" $this->getMaxFileSize() . "' /><input type='file' style='visibility:hidden;height:0px' name='" $this->getName(). "' id='" $this->getName(). "' title='" $this->getTitle() . "'" .$this->getExtra() . " />
<input type='hidden' name='xoops_upload_file[]' id='xoops_upload_file[]' value='" 
$this->getName() . "' />
<br><div class='block inline'><input type='text' readonly='readonly' name='" 
$this->getName() ."_txt""' title='" $this->getTitle() . "' id='" $this->getName() ."_txt""' size='" $this->getSize() . "' maxlength='" $this->getMaxlength() . '" value="' $this->getValue() . "' 
onclick='javascript:
document.getElementById("" . 
$this->getName(). "").click();
var inputElement = document.getElementById("" . 
$this->getName(). "");
inputElement.addEventListener("
change", handleFiles, false);
function handleFiles() {
var fullPath = document.getElementById("" . 
$this->getName(). "").value;
document.getElementsByName("" . 
$this->getName() ."_txt". "")[0].value = fullPath;
}; '/>
<input type='" 
$this->getType() . "' class='formButton' name='" $this->getName() ."_btn""'  id='" $this->getName() ."_btn""' value='" _BROWSE "' title='" $this->getValue() . "'
onclick='javascript:
document.getElementById("" . 
$this->getName(). "").click();
var inputElement = document.getElementById("" . 
$this->getName(). "");
inputElement.addEventListener("
change", handleFiles, false);
function handleFiles() {
var fullPath = document.getElementById("" . 
$this->getName(). "").value;
document.getElementsByName("" . 
$this->getName() ."_txt". "")[0].value = fullPath;
}; '/></div>"
;
    }
}

@Cesag: je t'envoie le fichier modifié

Posté le : 23/06/2013 12:21
Partager Twitter Partagez cette article sur GG+
Re: Relooking "Input file" dans formulaire.
Admin Frxoops
Inscrit: 05/03/2005 05:20
De Vaucluse
Messages: 960
Bon, ça passe partout sauf... sous IE. Pourquoi ne suis-je pas étonné... lol

Si une âme charitable passe par là et veut bien me filer un petit coup de main sur le javascript , je suis preneur.

Posté le : 23/06/2013 13:02

Open in new window

Xoops 2.5.7.2 - Debian 8.2 - Apache 2.4.10 - MySQL 5.5.47 - Php 5.6.17
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant
(1) 2 »



Vous pouvez voir les sujets.
Vous ne pouvez pas débuter de nouveaux sujets.
Vous ne pouvez pas répondre aux contributions.
Vous ne pouvez pas éditer vos contributions.
Vous ne pouvez pas effacez vos contributions.
Vous ne pouvez pas ajouter de nouveaux sondages.
Vous ne pouvez pas voter en sondage.
Vous ne pouvez pas attacher des fichiers à vos contributions.
Vous ne pouvez pas poster sans approbation.

Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

28 Personne(s) en ligne (22 Personne(s) connectée(s) sur Forum) | Utilisateur(s): 0 | Invité(s): 28 | Plus ...