it-swarm.dev

Come definire un elenco di campi personalizzati come gruppo btn?

Sto cercando di creare un campo personalizzato che è un elenco radio e deve essere visualizzato come gruppo btn. Funziona come previsto quando si utilizza lo standard type="radio"in XML ( rating2 ), ma quando viene visualizzato come un campo personalizzato ( rating1 ), visualizza solo un elenco radio regolarmente formattato.

Vedo che ci sono un numero di nomi di classe diversi o mancanti tra i due, ma che non riescono a capire come o dove specificarli, presumendo che specificando class="btn-group" nell'XML dovrebbe occuparsene.

Qualcuno ha avuto successo nel fare questo, e in caso affermativo cosa manca o è sbagliato in questo codice?

enter image description here

Modulo XML

<field name="rating1"
    type="ContentRating"
    class="btn-group"
    label="Rating 1" />

<field name="rating2"
    type="radio"
    class="btn-group"
    label="Rating 2" >
    <option value="Y">TV-Y</option>
    <option value="Y7">TV-Y7</option>
    <option value="G">TV-G</option>
    <option value="PG">TV-PG</option>
    <option value="14">TV-14</option>
    <option value="MA">TV-MA</option>
</field>

modelli/campi/contentrating.php

class JFormFieldContentRating extends JFormField {
    protected $type = 'ContentRating';
    protected function getInput() {
        $options = array(
            JHtml::_('select.option', 'Y', 'TV-Y'),
            JHtml::_('select.option', 'Y7', 'TV-Y7'),
            JHtml::_('select.option', 'G', 'TV-G'),
            JHtml::_('select.option', 'PG', 'TV-PG'),
            JHtml::_('select.option', '14', 'TV-14'),
            JHtml::_('select.option', 'MA', 'TV-MA')
        );
    // Some of the variations tried - none work
        $html = JHtml::_('select.radiolist', $options, $this->name, null, 'value', 'text', $this->value, $this->id);
        $html = JHtml::_('select.radiolist', $options, $this->name, array('class'=>''), 'value', 'text', $this->value, $this->id);
        $html = JHtml::_('select.radiolist', $options, $this->name, array('class'=>'btn'), 'value', 'text', $this->value, $this->id);
        $html = JHtml::_('select.radiolist', $options, $this->name, "class='btn-group'", 'value', 'text', $this->value, $this->id);
        return $html;
    }
}
3
GDP

Dopo aver visto il JHtml radiolist funzione, non supporta classi personalizzate. Aggiunge manualmente la classe radio tramite il file core effettivo.

Quello che ho fatto qui è stato preso una copia del campo radio principale, messo a nudo alcune cose e modificato per le tue esigenze. Spero che sia di aiuto:

class JFormFieldContentRating extends JFormField {

    protected $type = 'ContentRating';

    protected function getInput() {

        $options = array(
            JHtml::_('select.option', 'Y', 'TV-Y'),
            JHtml::_('select.option', 'Y7', 'TV-Y7'),
            JHtml::_('select.option', 'G', 'TV-G'),
            JHtml::_('select.option', 'PG', 'TV-PG'),
            JHtml::_('select.option', '14', 'TV-14'),
            JHtml::_('select.option', 'MA', 'TV-MA')
        );

        $html = array();

        $class = !empty($this->class) ? ' class="radio ' . $this->class . '"' : ' class="radio"';

        $html[] = '<fieldset id="' . $this->id . '"' . $class. ' >';

        foreach ($options as $i => $option)
        {
            $checked = ((string) $option->value == (string) $this->value) ? ' checked="checked"' : '';
            $class = !empty($option->class) ? ' class="' . $option->class . '"' : '';

            $onclick = !empty($option->onclick) ? ' onclick="' . $option->onclick . '"' : '';
            $onchange = !empty($option->onchange) ? ' onchange="' . $option->onchange . '"' : '';

            $html[] = '<input type="radio" id="' . $this->id . $i . '" name="' . $this->name . '" value="'
                . htmlspecialchars($option->value, ENT_COMPAT, 'UTF-8') . '"' . $checked . $class . $onclick
                . $onchange . ' />';

            $html[] = '<label for="' . $this->id . $i . '"' . $class . ' >'
                . JText::alt($option->text, preg_replace('/[^a-zA-Z0-9_\-]/', '_', $this->fieldname)) . '</label>';

        }

        $html[] = '</fieldset>';

        return implode($html);
    }
}

Testato e funzionante

Spero che sia di aiuto

5
Lodder