Supporto volontario e collaborativo per Joomla!® in italiano

Un problema con i checkbox nello sviluppo di un componente

Valutazione attuale: 5 / 5

Stella attivaStella attivaStella attivaStella attivaStella attiva
 

Il tema

codiceIl checkBox ha la caratteristica di assumere un valore, predefinito, solo nel caso esso sia checked.
Ovvero un form invia ( tra l'altro via Post o Get) il valore del checkBox solo se questi è checked. Nel caso esso non sia checked non invia niente. Questo comportamento può generare un problema.

Il problema

Associando il valore di un campo di una tabella di DB ad un tag di tipo checkBox, si riscontrano due eventualità

  1. nel caso il checkBox sia checked al post del form e conseguente memorizzazione del record, tutto procede come previsto: il valore associato al checked viene memorizzato nel campo del record della tabella del db.
  2. nel caso il checkBox non sia checked al post del form il corrispondente valore non viene passato e, quindi, non memorizzato nel campo del record della tabella del db. La cosa non va bene quando, in aggiornamento di un record, si vuole commutare lo stato del valore associato al checkBox: da checked a (not)checked.

La soluzione

Primo intervento



Nel file XML, associato al form interessato, ovvero il form che contiene il campo checkBox, occorrerà inserire il tag di decodifica del campo stesso. Nell’ esempio il campo della tabella ha nome thumbNail: creiamo, quindi, il nuovo tipo di campo come da manuale.

Listato frammento script: com_example/models/forms/mio_form.xml

 
<!—Frammento di codice XML relativo alla ridefinizione di un checkBox—>
<field name="thumbNail" type="checkhidebox" id = "thumbNail"
label = "COM_EXAMPLE_LBL_CKECKBOX"
description = "COM_EXAMPLE_DESC_CKECKBOX"
class = ""
default = "0"
/>
 

nb: il “type” a cui fa riferimento il field è checkhidebox.

ad esso sarà associato il file successivo


Secondo intervento

grazie alla ::Rules form field type:: provvisto da joomla! possiamo creare un nuovo tipo di campo di nome checkhidebox esattamente con lostesso nome del campo creato nell’ intervento I.
In tal caso occorrerà creare uno script di nome checkhidebox.php e memorizzarlo nella opportuna cartella com_example/models/fields.

Lo script in questione consta nel creare un campo composto da un input.hidden con il nome del campo della tabella del Db interessata e, da un checkBox di supporto al quale è demandata l’azione di associare qualunque valore desiderato al campo di input 1 / 0 - On / Off - true / false. Tale azione viene associata all’ evento onchange come visibile dallo script sottostante.
Il checkBox continuerà a essere nullo nel caso non sia checked ma, non avrà più importanza perché, il valore inviato dal form sarà quello assunto dal tag input.hidden che, in quanto tale, sarà sempre inviato.

Listato script: com_example/models/fields/checkhidebox.php

 
<?php
/**
* @version 1.0.0
* @package com_example
* @copyright Copyright (C) 2014. Tutti i diritti riservati.
* @license GNU General Public License versione 2 o successiva; vedi LICENSE.txt
* @author Capera <Questo indirizzo email è protetto dagli spambots. È necessario abilitare JavaScript per vederlo.> - http://caperaweb.it
*/
defined('JPATH_BASE') or die;
jimport('joomla.form.formfield');
/**
* Supports an HTML select list of categories
*/
class JFormFieldCheckHideBox extends JFormField {
/**
* The form field type.
*
* @var string
* @since 1.6
*/
protected $type = 'checkhidebox';
/**
* Method to get the field input markup.
*
* @return string The field input markup.
* @since 1.6
*/
protected function getInput() {
//
$html = array();
$id = $this->id;
$name = $this->name;
$value = $this->value;
//
$html[] = "<input type='text' name='$name' value='$value' id='$id' />”;
$html[] = "<input
type='checkbox'
name='support_$name'
onchange='if (this.checked) {
document.getElementById(\"$id\").value=\"1\";}
else
{document.getElementById(\”$id\").value=\"0\";
}' " . ($value == '0' ? '' : 'checked' ) . "/>";
return implode($html);
}
}
 


CommentaCommenta questo articolo sul forum

Ho scritto e condiviso questo articolo su Joomla.it, fallo anche tu. Invia ora un nuovo articolo!
Leonardo Lomartire
Nome: Leonardo LomartireSito: http://www.capera.it
Alcune informazioni su di me:


Ho anche scritto:
         ✔ diventa autore su Joomla.it

Ultima versione di Joomla!®

downloadVer. 3.7.0 Stabile Italiana
Data di rilascio: 25 Aprile 2016
(leggi la notizia Demo online

Le migliori estensioni gratuite

Un elenco aggiornato con i link a più di 100 estensioni fra componenti, moduli e plugin gratuiti per Joomla! 3

Manuale in italiano

Manuale in italianoPer conoscere meglio Joomla!, le sue caratteristiche ed il metodo di utilizzo leggi il manuale tradotto in italiano.

Molto utili anche le risposte alle domande più frequenti: FAQ

Sicurezza del proprio sito Joomla!Leggi anche: Nozioni sulla sicurezza del proprio sito

Autori di articoli recenti

Invia un articolo!Scrivi un articolo su Joomla.it e ricevi i ricavi dalle pubblicità di Google Adsense!
Segui queste istruzioni, condividi e collabora con la community. L'elenco degli autori attivi sul sito.

Libri consigliati

Torna su

Joomla.it sui Social Network

JoomlaDay Italia

JoomlaDay

Newsletter

Inserisci qui la tua e.mail: