13.6.00 méthode de template number()
This commit is contained in:
parent
af8b02a906
commit
640169c036
@ -6,6 +6,7 @@
|
|||||||
- Corrections syntaxiques.
|
- Corrections syntaxiques.
|
||||||
- Rotation des fichiers journaux (plus de 4 mo et 5 archives compressées).
|
- Rotation des fichiers journaux (plus de 4 mo et 5 archives compressées).
|
||||||
- Nouvelle propriété *required* pour les template de saisie de texte obligatoire. Génération d'un repère sur le label du champ et interception du champ invalide par le navigateur qui affiche une popup.
|
- Nouvelle propriété *required* pour les template de saisie de texte obligatoire. Génération d'un repère sur le label du champ et interception du champ invalide par le navigateur qui affiche une popup.
|
||||||
|
- Nouvelle méthode de template *number()* pour créer un champ de saisie acceptant les propriétés min, max, step et pattern.
|
||||||
|
|
||||||
**Corrections :**
|
**Corrections :**
|
||||||
- Lors de l'ajout d'un nouvel utilisateur, en cas d'erreur de saisie et de validation du formulaire, le mail de confirmation n'est pas expédié.
|
- Lors de l'ajout d'un nouvel utilisateur, en cas d'erreur de saisie et de validation du formulaire, le mail de confirmation n'est pas expédié.
|
||||||
|
@ -140,7 +140,7 @@ class core extends common
|
|||||||
$css .= 'span.mce-text{background-color: unset !important;}';
|
$css .= 'span.mce-text{background-color: unset !important;}';
|
||||||
$css .= 'body,.row > div{font-size:' . $this->getData(['theme', 'text', 'fontSize']) . '}';
|
$css .= 'body,.row > div{font-size:' . $this->getData(['theme', 'text', 'fontSize']) . '}';
|
||||||
$css .= 'body{color:' . $this->getData(['theme', 'text', 'textColor']) . '}';
|
$css .= 'body{color:' . $this->getData(['theme', 'text', 'textColor']) . '}';
|
||||||
$css .= 'select,input[type=password],input[type=email],input[type=text],input[type=date],input[type=time],input[type=week],input[type=month],input[type=datetime-local],.inputFile,select,textarea{color:' . $this->getData(['theme', 'text', 'textColor']) . ';background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';}';
|
$css .= 'select,input[type=password],input[type=email],input[type=text],input[type=date],input[type=time],input[type=week],input[type=month],input[type=datetime-local],input[type=number],.inputFile,select,textarea{color:' . $this->getData(['theme', 'text', 'textColor']) . ';background-color:' . $this->getData(['theme', 'site', 'backgroundColor']) . ';}';
|
||||||
// spécifiques au module de blog
|
// spécifiques au module de blog
|
||||||
$css .= '.blogDate {color:' . $this->getData(['theme', 'text', 'textColor']) . ';}.blogPicture img{border:1px solid ' . $this->getData(['theme', 'text', 'textColor']) . '; box-shadow: 1px 1px 5px ' . $this->getData(['theme', 'text', 'textColor']) . ';}';
|
$css .= '.blogDate {color:' . $this->getData(['theme', 'text', 'textColor']) . ';}.blogPicture img{border:1px solid ' . $this->getData(['theme', 'text', 'textColor']) . '; box-shadow: 1px 1px 5px ' . $this->getData(['theme', 'text', 'textColor']) . ';}';
|
||||||
// Couleur fixée dans admin.css
|
// Couleur fixée dans admin.css
|
||||||
@ -168,7 +168,7 @@ class core extends common
|
|||||||
$colors = helper::colorVariants($this->getData(['theme', 'button', 'backgroundColor']));
|
$colors = helper::colorVariants($this->getData(['theme', 'button', 'backgroundColor']));
|
||||||
$css .= '.speechBubble,.button,.button:hover,button[type=submit],.pagination a,.pagination a:hover,input[type=checkbox]:checked + label:before,input[type=radio]:checked + label:before,.helpContent{background-color:' . $colors['normal'] . ';color:' . $colors['text'] . '}';
|
$css .= '.speechBubble,.button,.button:hover,button[type=submit],.pagination a,.pagination a:hover,input[type=checkbox]:checked + label:before,input[type=radio]:checked + label:before,.helpContent{background-color:' . $colors['normal'] . ';color:' . $colors['text'] . '}';
|
||||||
$css .= '.helpButton span{color:' . $colors['normal'] . '}';
|
$css .= '.helpButton span{color:' . $colors['normal'] . '}';
|
||||||
$css .= 'input[type=text]:hover,input[type=date]:hover,input[type=time]:hover,input[type=week]:hover,input[type=month]:hover,input[type=datetime-local]:hover,input[type=password]:hover,.inputFile:hover,select:hover,textarea:hover{border-color:' . $colors['normal'] . '}';
|
$css .= 'input[type=text]:hover,input[type=date]:hover,input[type=time]:hover,input[type=week]:hover,input[type=month]:hover,input[type=datetime-local]:hover,input[type=number]:hover,input[type=password]:hover,.inputFile:hover,select:hover,textarea:hover{border-color:' . $colors['normal'] . '}';
|
||||||
$css .= '.speechBubble:before{border-color:' . $colors['normal'] . ' transparent transparent transparent}';
|
$css .= '.speechBubble:before{border-color:' . $colors['normal'] . ' transparent transparent transparent}';
|
||||||
$css .= '.button:hover,button[type=submit]:hover,.pagination a:hover,input[type=checkbox]:not(:active):checked:hover + label:before,input[type=checkbox]:active + label:before,input[type=radio]:checked:hover + label:before,input[type=radio]:not(:checked):active + label:before{background-color:' . $colors['darken'] . '}';
|
$css .= '.button:hover,button[type=submit]:hover,.pagination a:hover,input[type=checkbox]:not(:active):checked:hover + label:before,input[type=checkbox]:active + label:before,input[type=radio]:checked:hover + label:before,input[type=radio]:not(:checked):active + label:before{background-color:' . $colors['darken'] . '}';
|
||||||
$css .= '.helpButton span:hover{color:' . $colors['darken'] . '}';
|
$css .= '.helpButton span:hover{color:' . $colors['darken'] . '}';
|
||||||
@ -361,7 +361,7 @@ class core extends common
|
|||||||
$css .= '.button.buttonGreen, button[type=submit] {background-color: ' . $colors['normal'] . ';color: ' . $colors['text'] . ';}.button.buttonGreen:hover, button[type=submit]:hover {background-color: ' . $colors['darken'] . ';color: ' . $colors['text'] . ';}.button.buttonGreen:active, button[type=submit]:active {background-color: ' . $colors['darken'] . ';color: ' . $colors['text'] . ';}';
|
$css .= '.button.buttonGreen, button[type=submit] {background-color: ' . $colors['normal'] . ';color: ' . $colors['text'] . ';}.button.buttonGreen:hover, button[type=submit]:hover {background-color: ' . $colors['darken'] . ';color: ' . $colors['text'] . ';}.button.buttonGreen:active, button[type=submit]:active {background-color: ' . $colors['darken'] . ';color: ' . $colors['text'] . ';}';
|
||||||
$colors = helper::colorVariants($this->getData(['admin', 'backgroundBlockColor']));
|
$colors = helper::colorVariants($this->getData(['admin', 'backgroundBlockColor']));
|
||||||
$css .= '.buttonTab, .block {border: 1px solid ' . $this->getData(['admin', 'borderBlockColor']) . ';}.buttonTab, .block h4 {background-color: ' . $colors['normal'] . ';color:' . $colors['text'] . ';}';
|
$css .= '.buttonTab, .block {border: 1px solid ' . $this->getData(['admin', 'borderBlockColor']) . ';}.buttonTab, .block h4 {background-color: ' . $colors['normal'] . ';color:' . $colors['text'] . ';}';
|
||||||
$css .= 'table tr,input[type=email],input[type=date],input[type=time],input[type=month],input[type=week],input[type=datetime-local],input[type=text],input[type=password],select:not(#barSelectLanguage),select:not(#barSelectPage),textarea:not(.editorWysiwyg), textarea:not(.editorWysiwygComment),.inputFile{background-color: ' . $colors['normal'] . ';color:' . $colors['text'] . ';border: 1px solid ' . $this->getData(['admin', 'borderBlockColor']) . ';}';
|
$css .= 'table tr,input[type=email],input[type=date],input[type=time],input[type=month],input[type=week],input[type=datetime-local],input[type=text],input[type=number],input[type=password],select:not(#barSelectLanguage),select:not(#barSelectPage),textarea:not(.editorWysiwyg), textarea:not(.editorWysiwygComment),.inputFile{background-color: ' . $colors['normal'] . ';color:' . $colors['text'] . ';border: 1px solid ' . $this->getData(['admin', 'borderBlockColor']) . ';}';
|
||||||
// Bordure du contour TinyMCE
|
// Bordure du contour TinyMCE
|
||||||
$css .= '.mce-tinymce{border: 1px solid ' . $this->getData(['admin', 'borderBlockColor']) . '!important;}';
|
$css .= '.mce-tinymce{border: 1px solid ' . $this->getData(['admin', 'borderBlockColor']) . '!important;}';
|
||||||
// Enregistre la personnalisation
|
// Enregistre la personnalisation
|
||||||
|
@ -992,6 +992,106 @@ class template
|
|||||||
return $html;
|
return $html;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Génère un champ de saisie de type number (input[type="number"])
|
||||||
|
*
|
||||||
|
* Cette méthode crée un champ numérique HTML complet avec son wrapper,
|
||||||
|
* son label et ses messages d'aide/erreur. Elle gère automatiquement
|
||||||
|
* la conversion des valeurs en nombres et les contraintes de validation.
|
||||||
|
*
|
||||||
|
* @param string $nameId Identifiant unique du champ, utilisé pour name et id
|
||||||
|
* @param array $attributes Tableau des attributs du champ avec les clés suivantes :
|
||||||
|
* @type boolean $before Active la récupération des données précédentes en cas d'erreur (défaut: true)
|
||||||
|
* @type string $class Classes CSS additionnelles pour l'input (défaut: '')
|
||||||
|
* @type string $classWrapper Classes CSS additionnelles pour le wrapper (défaut: '')
|
||||||
|
* @type boolean $noDirty Désactive le marquage dirty du champ (défaut: false)
|
||||||
|
* @type boolean $disabled Désactive le champ (défaut: false)
|
||||||
|
* @type string $help Texte d'aide affiché sous le label (défaut: '')
|
||||||
|
* @type string $label Texte du label (défaut: '')
|
||||||
|
* @type string $placeholder Texte de placeholder (défaut: '')
|
||||||
|
* @type boolean $readonly Rend le champ en lecture seule (défaut: false)
|
||||||
|
* @type mixed $value Valeur initiale du champ (défaut: '')
|
||||||
|
* @type number $min Valeur minimum autorisée (défaut: null)
|
||||||
|
* @type number $max Valeur maximum autorisée (défaut: null)
|
||||||
|
* @type number $step Pas d'incrémentation (ex: 1 pour entiers, 0.01 pour prix) (défaut: null)
|
||||||
|
* @type string $pattern Expression régulière de validation (défaut: null)
|
||||||
|
*
|
||||||
|
* @return string Code HTML du champ number complet
|
||||||
|
*/
|
||||||
|
public static function number($nameId, array $attributes = [])
|
||||||
|
{
|
||||||
|
// Attributs par défaut spécifiques aux champs numériques
|
||||||
|
$attributes = array_merge([
|
||||||
|
'type' => 'number',
|
||||||
|
'before' => true,
|
||||||
|
'class' => '',
|
||||||
|
'classWrapper' => '',
|
||||||
|
'noDirty' => false,
|
||||||
|
'disabled' => false,
|
||||||
|
'help' => '',
|
||||||
|
'id' => $nameId,
|
||||||
|
'label' => '',
|
||||||
|
'name' => $nameId,
|
||||||
|
'placeholder' => '',
|
||||||
|
'readonly' => false,
|
||||||
|
'value' => '',
|
||||||
|
'min' => null,
|
||||||
|
'max' => null,
|
||||||
|
'step' => null,
|
||||||
|
'pattern' => null
|
||||||
|
], $attributes);
|
||||||
|
|
||||||
|
// Conversion de la valeur en nombre si elle n'est pas vide
|
||||||
|
if ($attributes['value'] !== '') {
|
||||||
|
$attributes['value'] = floatval($attributes['value']);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Nettoyage des attributs null pour ne pas les afficher dans le HTML
|
||||||
|
foreach (['min', 'max', 'step', 'pattern'] as $attr) {
|
||||||
|
if ($attributes[$attr] === null) {
|
||||||
|
unset($attributes[$attr]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// Traduction de l'aide et de l'étiquette
|
||||||
|
$attributes['label'] = helper::translate($attributes['label']);
|
||||||
|
$attributes['help'] = helper::translate($attributes['help']);
|
||||||
|
|
||||||
|
// Sauvegarde des données en cas d'erreur
|
||||||
|
if ($attributes['before'] && array_key_exists($attributes['id'], common::$inputBefore)) {
|
||||||
|
$attributes['value'] = common::$inputBefore[$attributes['id']];
|
||||||
|
}
|
||||||
|
|
||||||
|
// Début du wrapper
|
||||||
|
$html = '<div id="' . $attributes['id'] . 'Wrapper" class="inputWrapper ' . $attributes['classWrapper'] . '">';
|
||||||
|
|
||||||
|
// Label
|
||||||
|
if ($attributes['label']) {
|
||||||
|
$html .= self::label($attributes['id'], $attributes['label'], [
|
||||||
|
'help' => $attributes['help']
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Notice
|
||||||
|
$notice = '';
|
||||||
|
if (array_key_exists($attributes['id'], common::$inputNotices)) {
|
||||||
|
$notice = common::$inputNotices[$attributes['id']];
|
||||||
|
$attributes['class'] .= ' notice';
|
||||||
|
}
|
||||||
|
$html .= self::notice($attributes['id'], $notice);
|
||||||
|
|
||||||
|
// Input number
|
||||||
|
$html .= sprintf(
|
||||||
|
'<input type="number" %s>',
|
||||||
|
helper::sprintAttributes($attributes)
|
||||||
|
);
|
||||||
|
|
||||||
|
// Fin du wrapper
|
||||||
|
$html .= '</div>';
|
||||||
|
|
||||||
|
return $html;
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Crée un champ texte long
|
* Crée un champ texte long
|
||||||
* @param string $nameId Nom et id du champ
|
* @param string $nameId Nom et id du champ
|
||||||
|
@ -1180,6 +1180,7 @@ input[type='datetime-local'],
|
|||||||
input[type='time'],
|
input[type='time'],
|
||||||
input[type='month'],
|
input[type='month'],
|
||||||
input[type='week'],
|
input[type='week'],
|
||||||
|
input[type='number'],
|
||||||
.inputFile,
|
.inputFile,
|
||||||
select,
|
select,
|
||||||
textarea {
|
textarea {
|
||||||
@ -1205,6 +1206,7 @@ input[type='datetime-local']:hover,
|
|||||||
input[type='time']:hover,
|
input[type='time']:hover,
|
||||||
input[type='month']:hover,
|
input[type='month']:hover,
|
||||||
input[type='week']:hover,
|
input[type='week']:hover,
|
||||||
|
input[type='number']:hover,
|
||||||
.inputFile:hover,
|
.inputFile:hover,
|
||||||
select:hover,
|
select:hover,
|
||||||
textarea:hover {
|
textarea:hover {
|
||||||
@ -1219,6 +1221,7 @@ input[type='datetime-local'].notice,
|
|||||||
input[type='time'].notice,
|
input[type='time'].notice,
|
||||||
input[type='month'].notice,
|
input[type='month'].notice,
|
||||||
input[type='week'].notice,
|
input[type='week'].notice,
|
||||||
|
input[type='number'].notice,
|
||||||
.inputFile.notice,
|
.inputFile.notice,
|
||||||
select.notice,
|
select.notice,
|
||||||
textarea.notice {
|
textarea.notice {
|
||||||
@ -1234,6 +1237,7 @@ input[type='datetime-local'].notice:hover,
|
|||||||
input[type='time'].notice:hover,
|
input[type='time'].notice:hover,
|
||||||
input[type='month'].notice:hover,
|
input[type='month'].notice:hover,
|
||||||
input[type='week'].notice:hover,
|
input[type='week'].notice:hover,
|
||||||
|
input[type='number'].notice:hover,
|
||||||
.inputFile.notice:hover,
|
.inputFile.notice:hover,
|
||||||
select.notice:hover,
|
select.notice:hover,
|
||||||
textarea.notice:hover {
|
textarea.notice:hover {
|
||||||
|
@ -20,10 +20,10 @@
|
|||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
<div class="col2">
|
<div class="col2">
|
||||||
<?php echo template::text('configProxyPort', [
|
<?php echo template::number('configProxyPort', [
|
||||||
'label' => 'Port du proxy',
|
'label' => 'Port du proxy',
|
||||||
'placeholder' => '6060',
|
'placeholder' => '6060',
|
||||||
'value' => $this->getData(['config', 'proxyPort'])
|
'value' => $this->getData(['config', 'proxyPort']),
|
||||||
]); ?>
|
]); ?>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user