ラジオリストで、btnグループとして表示する必要があるカスタムフィールドを作成しようとしています。標準のtype="radio"
をXMLで使用すると期待どおりに機能しますが(rating2)、カスタムフィールドとしてレンダリングされると(rating1)、定期的にフォーマットされたラジオリストのみを表示します。
2つの間で異なるか欠落しているクラス名がいくつかあることがわかりますが、XMLでclass="btn-group"
を指定することで対処できると想定して、それらを指定する方法または場所を特定できません。
誰かがこれを行うことに成功しましたか?もしそうなら、このコードで何が欠けているか間違っていますか?
フォーム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>
models/fields/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;
}
}
JHtml radiolist
関数を見て、それはカスタムクラスをサポートしません。実際のコアファイルを介してradio
クラスを手動で追加します。
ここで私が行ったことは、コア無線フィールドのコピーを取り、いくつかのことを取り除いて、必要に応じて修正しました。お役に立てれば:
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);
}
}
テスト済みおよび動作中
お役に立てれば