From 802e0549eee62a78796afc4976a53b015b7c849f Mon Sep 17 00:00:00 2001 From: etc Date: Mon, 2 May 2016 23:00:42 +0200 Subject: [PATCH] Checkbox sets As alternative to multiple selects --- textpattern/lib/txplib_forms.php | 38 ++++++++++++++++++++++++++++++-- 1 file changed, 36 insertions(+), 2 deletions(-) diff --git a/textpattern/lib/txplib_forms.php b/textpattern/lib/txplib_forms.php index b2d37437ee..2f705b1ef5 100644 --- a/textpattern/lib/txplib_forms.php +++ b/textpattern/lib/txplib_forms.php @@ -169,8 +169,8 @@ function selectInput($name = '', $array = array(), $value = '', $blank_first = f $atts .= ' '.trim($onchange); } - return n.''.n.join(n, $out).n.'' - .($multiple ? n.''.n : ''); // TODO: use jQuery UI selectmenu? + return n.''.n.join(n, $out).n.''.n + .($multiple ? hInput($name, '').n : ''); // TODO: use jQuery UI selectmenu? } /** @@ -410,6 +410,40 @@ function checkbox2($name, $value, $tabindex = 0, $id = '') return checkbox($name, 1, $value, $tabindex, $id); } +/** + * A checkbox set. + * + * @param string $name The field + * @param array $array The values => labels array + * @param array $value Checked values + * @param string $wraptag An HTML wrapper tag for the set + * @param string $break Checkboxes wrapper/separator + * @param string $class Class applied to the wraptag + * @param string $breakclass Class applied to break tag + * @param string $atts HTML attributes applied to the wraptag + * @param string $breakatts HTML attributes applied to the break tag + * @param string $id HTML id applied to the wraptag +* @return string HTML input + * @example + * echo checkboxSet('fruit', array('a'=>'Apple', 'b'=>'Banana'), array('b')); + */ + +function checkboxSet($name = '', $array = array(), $value = array(), $wraptag = '', $break = '', $class = '', $breakclass = '', $atts = '', $breakatts = '', $id = '') +{ + $out = array(); + + if ($name) { + $name .= '[]'; + } + + foreach ($array as $avalue => $alabel) { + $out[] = checkbox($name, $avalue, in_array($avalue, $value)).n + .''; + } + + return $out ? n.doWrap($out, $wraptag, $break, $class, $breakclass, $atts, $breakatts, $id).n.hInput($name, '') : ''; +} + /** * A single radio button. *