Fork me on GitHub






Proposition de classe XoopsFormSelectColor
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
Bonjour, je sais pas si je suis au bon endroit alors tant pis je le fait ici

Voila, j'ai eu un besoin de pouvoir choisir des couleurs pour une preference de module, et là je me suis aperçu qu'il n'y avait pas de classe predefinie pour cela au niveau des classes FormSelect qui sont utilisées pour la gestion des formulaires de façons generales et surtout par l'administration.

J'ai donc palié a mon besoin et je le mets ici, cela peut etre utile à d'autre .

J'ai cree une classe XoopsFormSelectColor qui peut servir a modifier la couleur du texte (style color) ou du fond (style backgroundcolor).
Dans class/xoopsform/formselectcolor.php
<?php
/*
 * Created on 15 août 06
 *
 */
if (!defined('XOOPS_ROOT_PATH')) {
    die(
"XOOPS root path not defined");
}

/**
 * A select field
 * 
 * @package     kernel
 * @subpackage  form
 * 
 * @author        Lionel FORTE aka Garrath
 * @copyright    
 */
class XoopsFormSelectColor extends XoopsFormSelect {
    var 
$_back false;

    
/**
     * Constructor
     * 
     * @param    string    $caption    Caption
     * @param    string    $name       "name" attribute
     * @param    mixed    $value        Pre-selected value (or array of them).
     * @param    bool    $back            if back is true then backgroundcolor else color
     */
    
function XoopsFormSelectColor($caption$name$value=null$back=false ){
        
$this->_back $back;        
        
$this->XoopsFormSelect($caption$name$value);
    }


    
/**
     * Prepare HTML for output
     * 
     * @return    string  HTML
     */
    
function render(){
        
$color $this->getValue();    //Il ne peut pas y avoir plusieurs choix ici
        
$style $this->_back'background-color':'color';
        
$stylejs $this->_back'backgroundColor':'color';
        
$ret "<select  size='".$this->getSize()."'".$this->getExtra()." style='".$style.":".$color[0]."' onchange='style.".$stylejs."=this.options[this.selectedIndex].value;'";
        
$ret .= " name='".$this->getName()."' id='".$this->getName()."'>n";
        
        
        if (
count($this->getOptions()) ){
            foreach ( 
$this->getOptions() as $value => $name ) {
                
$color htmlspecialchars($valueENT_QUOTES);
                
$ret .= "<option value='".$color."' style='".$style.":".$color.";'";
                if (
count($this->getValue()) > && in_array($value$this->getValue())) {
                    
$ret .= " selected='selected'";
                }
            
$ret .= ">".$name."</option>n";
            }
        }
        else{
            
$colorarray = array("00""33""66""99""CC""FF");
            
$ret .= "<option value='COLOR'>"._COLOR."</option>n";
            foreach ( 
$colorarray as $color1 ) {
                foreach ( 
$colorarray as $color2 ) {
                    foreach ( 
$colorarray as $color3 ) {
                        
$ret .= "<option value='#".$color1.$color2.$color3."' style='background-color:#".$color1.$color2.$color3.";color:#".$color1.$color2.$color3.";'>#".$color1.$color2.$color3."</option>n";
                    }
                }
            }
        }
        
$ret .= "</select>";
        return 
$ret;

    }
}
?>


Voilà pour la classe.

Pour l'utiliser il faut modifier le fichier class/xoopsformloader.php pour rajouter le chemin vers la nouvelle classe
include_once XOOPS_ROOT_PATH."/class/xoopsform/formselectcolor.php";


Pour que cette classe soit utilisé pour les preferences d'un module il faut modifier le fichier modules/system/admin/preferences/main.php
rajouter ce bout de code
case 'selectcolorback':
                
$back true;
           case 
'selectcolor':
                
$ele = new XoopsFormSelectColor($title$config[$i]->getVar('conf_name'), $config[$i]->getConfValueForOutput(), isset($back));
                unset(
$back);
                
$options =& $config_handler->getConfigOptions(new Criteria('conf_id'$config[$i]->getVar('conf_id')));
                
$opcount count($options);
                for (
$j 0$j $opcount$j++) {
                    
$optval defined($options[$j]->getVar('confop_value')) ? constant($options[$j]->getVar('confop_value')) : $options[$j]->getVar('confop_value');
                    
$optkey defined($options[$j]->getVar('confop_name')) ? constant($options[$j]->getVar('confop_name')) : $options[$j]->getVar('confop_name');
                    
$ele->addOption($optval$optkey);
                }
                break;

dans les 2 boucles avec le switch a l'interieure des tests sur op est egale a show et showmod

Et maintenant au niveau du xoops_version de votre module il n'y a plus qu'a mettre cela par exemple pour definir une couleur de fond
$modversion['config'][2]['name'] = 'PM_COLOR_THISBOX';
$modversion['config'][2]['title'] = '_MI_PM_COLOR_THISBOX';
$modversion['config'][2]['description'] = '_MI_PM_COLOR_THISBOX_DESC';
$modversion['config'][2]['formtype'] = 'selectcolorback';
$modversion['config'][2]['valuetype'] = 'string';
$modversion['config'][2]['default'] = 'red';
$modversion['config'][2]['options'] = $tabcouleur;

avec ici un tableau de couleur predefinie dans $tabcouleur de ce type la :
$tabcouleur = array('aliceblue' => 'aliceblue',  
'antiquewhite' => 'antiquewhite'
'aqua' => 'aqua'
'aquamarine' => 'aquamarine'
'azure' => 'azure'
'beige' => 'beige'
'bisque' => 'bisque'
'black' => 'black'
'blanchedalmond' => 'blanchedalmond'
'blue' => 'blue'
'blueviolet' => 'blueviolet'
'brown' => 'brown'... );


Si vous ne voulez pas definir un tableau de couleur, il en sera créé un automatiquement un utilisant les codes en hexa (exactement le meme que sur l'editeur).


ceci defini par exemple une couleur d'ecriture avec le tableau de couleur genere automatiquement.
$modversion['config'][3]['name'] = 'PM_COLOR_ALLBOX';
$modversion['config'][3]['title'] = '_MI_PM_COLOR_ALLBOX';
$modversion['config'][3]['description'] = '_MI_PM_COLOR_ALLBOX_DESC';
$modversion['config'][3]['formtype'] = 'selectcolor';
$modversion['config'][3]['valuetype'] = 'string';
$modversion['config'][3]['default'] = '#006699';



Vous allez me dire: quel est l'interet?
J'en avais besoins et rajouter des classes css pour ce que je voulais faire avec me paraissait pas super top et puis la classe peut etre utilisé par ailleurs dans n'importe quel type de formulaire (comme dans l'editeur par exemple...).

Posté le : 15/08/2006 17:55
Partager Twitter Partagez cette article sur GG+
Re: Proposition de classe XoopsFormSelectColor
Guest_
Zoullou a fait la même chose

Posté le : 15/08/2006 18:01
Partager Twitter Partagez cette article sur GG+
Re: Proposition de classe XoopsFormSelectColor
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
lol

Ben ca montre que c utile alors ;)

Ca serait pas mal de rajouter cela direct dans xoops alors...

Posté le : 15/08/2006 18:35
Partager Twitter Partagez cette article sur GG+
Re: Proposition de classe XoopsFormSelectColor
Xoops accro
Inscrit: 04/02/2003 01:54
De Le Mans
Messages: 12273
Zoullou a publié son travail sur le tracker.

Il est possible de contribuer à Xoops en allant sur cette page.

Posté le : 15/08/2006 19:16
Partager Twitter Partagez cette article sur GG+
Re: Proposition de classe XoopsFormSelectColor
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
Le but semble etre a peu pres le meme effectivement.

La presentation differe pourtant, moi cela fait apparaitre comme son nom l'indique une boite select en fait exactement comme celle qui apparait dans l'editeur.

En ce qui concerne la contribution a Xoops. J'ai beau relativement bien lire l'anglais (par obligation professionnel), j'evite en regle general de le parler et de l'ecrire, car j'ai peur de pas etre super comprehensible (surtout l'ecrit d'ailleurs parler on arrive toujours a se comprendre avec la personne en face).
Et le but de la communaute Franco n'est-il pas aussi de pouvoir proposer des choses et en Francais? Si on peut pas le faire en français vous aller perdre toutes les bonnes volontes ne s'exprimant pas tres bien en anglais et toutes les bonnes idees que des developpeurs français et ne sachant pas s'exprimer en anglais pourraient avoir.

Posté le : 15/08/2006 19:42
Partager Twitter Partagez cette article sur GG+
Re: Proposition de classe XoopsFormSelectColor
Régulier
Inscrit: 06/01/2006 23:55
Messages: 379
bon j'ai fait ce que j'ai pu sur sourceforge...

Posté le : 15/08/2006 20:06
Partager Twitter Partagez cette article sur GG+
Re: Proposition de classe XoopsFormSelectColor
Xoops accro
Inscrit: 04/02/2003 01:54
De Le Mans
Messages: 12273
Rassure toi garrath pour l'anglais, je suis dans le même cas mais à la longue on y arrive, et les anglophones sont indulgents avec nous.

L'objectif est de faire avancer xoops, quelque soit l'origine linguistique des contributions.

Posté le : 15/08/2006 20:50
Partager Twitter Partagez cette article sur GG+

 Haut   Précédent   Suivant



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

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