Fork me on GitHub

Rapport de message :*
 

Proposition de classe XoopsFormSelectColor

Titre du sujet : Proposition de classe XoopsFormSelectColor
par garrath sur 15/08/2006 17:55:17

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...).
Propulsé avec XOOPS | Graphisme adapté par Tatane, Grosdunord, Montuy337513

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