#155 Proposition de classe XoopsFormSelectColor

open
nobody
5
2014-09-10
2006-08-15
Garrath
No

Sorry for my bad english

I proposed here a Select Box for color. It's near than
Zoulou proposed here
https://sourceforge.net/tracker/?func=detail&atid=430842&aid=1535023&group_id=41586
but it's not have the same visuel.

You found in archive the class and modified file for
use in xoops_version.php like this
[code]
$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';
[/code]

En français :
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
[code]
<?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-&gt;getSize()."" ".$this-&gt;getExtra()."<br=""> 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($value, ENT_QUOTES);
            $ret .= "<option value='".$color."'

style='".$style.":".$color.";'";
if (count($this->getValue()) > 0 &&
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;

}

}
?>
[/code]

Voilà pour la classe.

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

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
[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;
[/code]
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
[code]
$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;
[/code]
avec ici un tableau de couleur predefinie dans
$tabcouleur de ce type la :
[code]
$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'... );
[/code]

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.
[code]
$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';
[/code]

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...).

Discussion

  • Garrath

    Garrath - 2006-08-15

    class XoopsFormSelectColor

     
  • Skalpa Keo

    Skalpa Keo - 2006-08-21

    Logged In: YES
    user_id=882380

    Somebody sent something similar to this a little before you,
    and it's been committed to the SVN already.
    The only difference with your version is that zoullou's
    colorpicker uses a textfield and a JS script instead of a
    selectbox as you did (which is ok when you need a small
    list of colors but that I dont like so much when you
    generate the entire palette server-side).

    So 2 solutions:
    - The actual element is enough for you, and we keep it like this
    - You may try to change the code that has already been
    committed, and enhance it so a "select" is rendered when a
    list of colors is provided, or the text/dhtml thing
    otherwise (IMO it wouldn't be too hard, just a matter of a
    couple well-placed if/else)

    Am switching the tracker status to "pending", which means
    that it will be closed automatically if no feedback is
    recieved within a week (meaning that you'd consider the
    actual element sufficient for your needs).

    Thanks for helping us making XOOPS better.

    PS: Please do not paste more than a couple of lines of code
    like this, it makes the item difficult to read. That's what
    attachments are for ;-). I also described the procedure to
    follow in the "Core development" forum recently, you may
    want to read it.

     
  • Garrath

    Garrath - 2006-08-21

    Logged In: YES
    user_id=1576365

    You can use this class with a list of color or not.
    If you don't put a list of color there is a generator into
    the class to put a list exactly the same like the choice
    color in the editor dhtml.
    Otherwise the list of color is an array like that :
    $tabcouleur = array('aliceblue' => 'aliceblue',
    'antiquewhite' => 'antiquewhite',
    'aqua' => 'aqua',
    'aquamarine' => 'aquamarine', ...)

    This class can replace the code on the editor too...

     

Log in to post a comment.

Get latest updates about Open Source Projects, Conferences and News.

Sign up for the SourceForge newsletter:





No, thanks