RTLizing html_checkboxes
[email protected] (Armen Baghumian) Wed, 28 Mar 2007 14:32:02 +0330
| Newsgroups | php.smarty.dev |
|---|---|
| Message-ID | <20070328143202.544c2916@localhost> |
--MP_qhCzblpK3mV_EudOaxTZsSq
Content-Type: text/plain; charset=US-ASCII
Content-Transfer-Encoding: 7bit
Content-Disposition: inline
Hi there,
I just fixed a problem in html_checkboxes for right to left languages.
lets explain the problem.
I'll try to explain that with an screenshot.
I just put {html_checkboxes} in a <div dir="rtl"> and got some screenshots.
In (1) you will see html_checkboxes, every thing seems normal but when
I clicked *Anonymous* label, it checked wrong checkbox (it was not wrong
it just rendered in wrong way), (2) shows this problem.
(3) and (4) shows the problem when I used <br /> as a separator.
Okey, I wish I explained the problem well, sorry my english is poor.
I just attached a patch for this problem. it just add dir attribute to
an span (if label attribute was false) or the label tag.
I just use direction attribute for html_checkboxes to prevent conflicts
with extra variables (because *dir* could be used as extra attribute).
(5) and (6) shows fixed html_checkboxes result.
html_radios has this problem too, but html_options is okey.
I'll patch html_radios later if my current patch approved.
Regards,
Armen
--MP_qhCzblpK3mV_EudOaxTZsSq
Content-Type: application/x-php; name=function.html_checkboxes.php
Content-Transfer-Encoding: base64
Content-Disposition: attachment; filename=function.html_checkboxes.php
PD9waHAKLyoqCiAqIFNtYXJ0eSBwbHVnaW4KICogQHBhY2thZ2UgU21hcnR5CiAqIEBzdWJwYWNr
YWdlIHBsdWdpbnMKICovCgoKLyoqCiAqIFNtYXJ0eSB7aHRtbF9jaGVja2JveGVzfSBmdW5jdGlv
biBwbHVnaW4KICoKICogRmlsZTogICAgICAgZnVuY3Rpb24uaHRtbF9jaGVja2JveGVzLnBocDxi
cj4KICogVHlwZTogICAgICAgZnVuY3Rpb248YnI+CiAqIE5hbWU6ICAgICAgIGh0bWxfY2hlY2ti
b3hlczxicj4KICogRGF0ZTogICAgICAgMjQuRmViLjIwMDM8YnI+CiAqIFB1cnBvc2U6ICAgIFBy
aW50cyBvdXQgYSBsaXN0IG9mIGNoZWNrYm94IGlucHV0IHR5cGVzPGJyPgogKiBJbnB1dDo8YnI+
CiAqICAgICAgICAgICAtIG5hbWUgICAgICAgKG9wdGlvbmFsKSAtIHN0cmluZyBkZWZhdWx0ICJj
aGVja2JveCIKICogICAgICAgICAgIC0gdmFsdWVzICAgICAocmVxdWlyZWQpIC0gYXJyYXkKICog
ICAgICAgICAgIC0gb3B0aW9ucyAgICAob3B0aW9uYWwpIC0gYXNzb2NpYXRpdmUgYXJyYXkKICog
ICAgICAgICAgIC0gY2hlY2tlZCAgICAob3B0aW9uYWwpIC0gYXJyYXkgZGVmYXVsdCBub3Qgc2V0
CiAqICAgICAgICAgICAtIHNlcGFyYXRvciAgKG9wdGlvbmFsKSAtIGllIDxicj4gb3IgJm5ic3A7
CiAqICAgICAgICAgICAtIG91dHB1dCAgICAgKG9wdGlvbmFsKSAtIHRoZSBvdXRwdXQgbmV4dCB0
byBlYWNoIGNoZWNrYm94CiAqICAgICAgICAgICAtIGFzc2lnbiAgICAgKG9wdGlvbmFsKSAtIGFz
c2lnbiB0aGUgb3V0cHV0IGFzIGFuIGFycmF5IHRvIHRoaXMgdmFyaWFibGUKICogICAgICAgICAg
IC0gZGlyZWN0aW9uICAob3B0aW9uYWwpIC0gYWRkIGRpcmVjdGlvbiBmb3IgZmllbGRzCiAqIEV4
YW1wbGVzOgogKiA8cHJlPgogKiB7aHRtbF9jaGVja2JveGVzIHZhbHVlcz0kaWRzIG91dHB1dD0k
bmFtZXN9CiAqIHtodG1sX2NoZWNrYm94ZXMgdmFsdWVzPSRpZHMgbmFtZT0nYm94JyBzZXBhcmF0
b3I9Jzxicj4nIG91dHB1dD0kbmFtZXN9CiAqIHtodG1sX2NoZWNrYm94ZXMgdmFsdWVzPSRpZHMg
Y2hlY2tlZD0kY2hlY2tlZCBzZXBhcmF0b3I9Jzxicj4nIG91dHB1dD0kbmFtZXN9CiAqIDwvcHJl
PgogKiBAbGluayBodHRwOi8vc21hcnR5LnBocC5uZXQvbWFudWFsL2VuL2xhbmd1YWdlLmZ1bmN0
aW9uLmh0bWwuY2hlY2tib3hlcy5waHAge2h0bWxfY2hlY2tib3hlc30KICogICAgICAoU21hcnR5
IG9ubGluZSBtYW51YWwpCiAqIEBhdXRob3IgICAgIENocmlzdG9waGVyIEt2YXJtZSA8Y2hyaXN0
b3BoZXIua3Zhcm1lQGZsYXNoamFiLmNvbT4KICogQGF1dGhvciBjcmVkaXRzIHRvIE1vbnRlIE9o
cnQgPG1vbnRlQGlzcGkubmV0PgogKiBAdmVyc2lvbiAgICAxLjAKICogQHBhcmFtIGFycmF5CiAq
IEBwYXJhbSBTbWFydHkKICogQHJldHVybiBzdHJpbmcKICogQHVzZXMgc21hcnR5X2Z1bmN0aW9u
X2VzY2FwZV9zcGVjaWFsX2NoYXJzKCkKICovCmZ1bmN0aW9uIHNtYXJ0eV9mdW5jdGlvbl9odG1s
X2NoZWNrYm94ZXMoJHBhcmFtcywgJiRzbWFydHkpCnsKICAgIHJlcXVpcmVfb25jZSAkc21hcnR5
LT5fZ2V0X3BsdWdpbl9maWxlcGF0aCgnc2hhcmVkJywnZXNjYXBlX3NwZWNpYWxfY2hhcnMnKTsK
CiAgICAkbmFtZSA9ICdjaGVja2JveCc7CiAgICAkdmFsdWVzID0gbnVsbDsKICAgICRvcHRpb25z
ID0gbnVsbDsKICAgICRzZWxlY3RlZCA9IG51bGw7CiAgICAkc2VwYXJhdG9yID0gJyc7CiAgICAk
bGFiZWxzID0gdHJ1ZTsKICAgICRvdXRwdXQgPSBudWxsOwogICAgJGRpcmVjdGlvbiA9ICdsdHIn
OwoKICAgICRleHRyYSA9ICcnOwoKICAgIGZvcmVhY2goJHBhcmFtcyBhcyAkX2tleSA9PiAkX3Zh
bCkgewogICAgICAgIHN3aXRjaCgkX2tleSkgewogICAgICAgICAgICBjYXNlICduYW1lJzoKICAg
ICAgICAgICAgY2FzZSAnc2VwYXJhdG9yJzoKICAgICAgICAgICAgY2FzZSAnZGlyZWN0aW9uJzoK
ICAgICAgICAgICAgICAgICQkX2tleSA9ICRfdmFsOwogICAgICAgICAgICAgICAgYnJlYWs7Cgog
ICAgICAgICAgICBjYXNlICdsYWJlbHMnOgogICAgICAgICAgICAgICAgJCRfa2V5ID0gKGJvb2wp
JF92YWw7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ29wdGlvbnMn
OgogICAgICAgICAgICAgICAgJCRfa2V5ID0gKGFycmF5KSRfdmFsOwogICAgICAgICAgICAgICAg
YnJlYWs7CgogICAgICAgICAgICBjYXNlICd2YWx1ZXMnOgogICAgICAgICAgICBjYXNlICdvdXRw
dXQnOgogICAgICAgICAgICAgICAgJCRfa2V5ID0gYXJyYXlfdmFsdWVzKChhcnJheSkkX3ZhbCk7
CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ2NoZWNrZWQnOgogICAg
ICAgICAgICBjYXNlICdzZWxlY3RlZCc6CiAgICAgICAgICAgICAgICAkc2VsZWN0ZWQgPSBhcnJh
eV9tYXAoJ3N0cnZhbCcsIGFycmF5X3ZhbHVlcygoYXJyYXkpJF92YWwpKTsKICAgICAgICAgICAg
ICAgIGJyZWFrOwoKICAgICAgICAgICAgY2FzZSAnY2hlY2tib3hlcyc6CiAgICAgICAgICAgICAg
ICAkc21hcnR5LT50cmlnZ2VyX2Vycm9yKCdodG1sX2NoZWNrYm94ZXM6IHRoZSB1c2Ugb2YgdGhl
ICJjaGVja2JveGVzIiBhdHRyaWJ1dGUgaXMgZGVwcmVjYXRlZCwgdXNlICJvcHRpb25zIiBpbnN0
ZWFkJywgRV9VU0VSX1dBUk5JTkcpOwogICAgICAgICAgICAgICAgJG9wdGlvbnMgPSAoYXJyYXkp
JF92YWw7CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGNhc2UgJ2Fzc2lnbic6
CiAgICAgICAgICAgICAgICBicmVhazsKCiAgICAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAg
ICAgICBpZighaXNfYXJyYXkoJF92YWwpKSB7CiAgICAgICAgICAgICAgICAgICAgJGV4dHJhIC49
ICcgJy4kX2tleS4nPSInLnNtYXJ0eV9mdW5jdGlvbl9lc2NhcGVfc3BlY2lhbF9jaGFycygkX3Zh
bCkuJyInOwogICAgICAgICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgICAgICAgICAkc21h
cnR5LT50cmlnZ2VyX2Vycm9yKCJodG1sX2NoZWNrYm94ZXM6IGV4dHJhIGF0dHJpYnV0ZSAnJF9r
ZXknIGNhbm5vdCBiZSBhbiBhcnJheSIsIEVfVVNFUl9OT1RJQ0UpOwogICAgICAgICAgICAgICAg
fQogICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgfQogICAgfQoKICAgIGlmICghaXNzZXQo
JG9wdGlvbnMpICYmICFpc3NldCgkdmFsdWVzKSkKICAgICAgICByZXR1cm4gJyc7IC8qIHJhaXNl
IGVycm9yIGhlcmU/ICovCgogICAgc2V0dHlwZSgkc2VsZWN0ZWQsICdhcnJheScpOwogICAgJF9o
dG1sX3Jlc3VsdCA9IGFycmF5KCk7CgogICAgaWYgKGlzX2FycmF5KCRvcHRpb25zKSkgewoKICAg
ICAgICBmb3JlYWNoICgkb3B0aW9ucyBhcyAkX2tleT0+JF92YWwpCiAgICAgICAgICAgICRfaHRt
bF9yZXN1bHRbXSA9IHNtYXJ0eV9mdW5jdGlvbl9odG1sX2NoZWNrYm94ZXNfb3V0cHV0KCRuYW1l
LCAkX2tleSwgJF92YWwsICRzZWxlY3RlZCwgJGV4dHJhLCAkc2VwYXJhdG9yLCAkbGFiZWxzLCAk
ZGlyZWN0aW9uKTsKCgogICAgfSBlbHNlIHsKICAgICAgICBmb3JlYWNoICgkdmFsdWVzIGFzICRf
aT0+JF9rZXkpIHsKICAgICAgICAgICAgJF92YWwgPSBpc3NldCgkb3V0cHV0WyRfaV0pID8gJG91
dHB1dFskX2ldIDogJyc7CiAgICAgICAgICAgICRfaHRtbF9yZXN1bHRbXSA9IHNtYXJ0eV9mdW5j
dGlvbl9odG1sX2NoZWNrYm94ZXNfb3V0cHV0KCRuYW1lLCAkX2tleSwgJF92YWwsICRzZWxlY3Rl
ZCwgJGV4dHJhLCAkc2VwYXJhdG9yLCAkbGFiZWxzLCAkZGlyZWN0aW9uKTsKICAgICAgICB9Cgog
ICAgfQoKICAgIGlmKCFlbXB0eSgkcGFyYW1zWydhc3NpZ24nXSkpIHsKICAgICAgICAkc21hcnR5
LT5hc3NpZ24oJHBhcmFtc1snYXNzaWduJ10sICRfaHRtbF9yZXN1bHQpOwogICAgfSBlbHNlIHsK
ICAgICAgICByZXR1cm4gaW1wbG9kZSgiXG4iLCRfaHRtbF9yZXN1bHQpOwogICAgfQoKfQoKZnVu
Y3Rpb24gc21hcnR5X2Z1bmN0aW9uX2h0bWxfY2hlY2tib3hlc19vdXRwdXQoJG5hbWUsICR2YWx1
ZSwgJG91dHB1dCwgJHNlbGVjdGVkLCAkZXh0cmEsICRzZXBhcmF0b3IsICRsYWJlbHMsICRkaXJl
Y3Rpb24pIHsKICAgICRfb3V0cHV0ICA9ICcnOwogICAgJF9vdXRwdXQgLj0gKCRsYWJlbHMpPyc8
bGFiZWwgZGlyPSInLnNtYXJ0eV9mdW5jdGlvbl9lc2NhcGVfc3BlY2lhbF9jaGFycygkZGlyZWN0
aW9uKS4nIj4nOgogICAgICAgICAgICAgICAgICAgICAgICAgICc8c3BhbiBkaXI9Iicuc21hcnR5
X2Z1bmN0aW9uX2VzY2FwZV9zcGVjaWFsX2NoYXJzKCRkaXJlY3Rpb24pLiciPic7CgogICAgJF9v
dXRwdXQgLj0gJzxpbnB1dCB0eXBlPSJjaGVja2JveCIgbmFtZT0iJwogICAgICAgIC4gc21hcnR5
X2Z1bmN0aW9uX2VzY2FwZV9zcGVjaWFsX2NoYXJzKCRuYW1lKSAuICdbXSIgdmFsdWU9IicKICAg
ICAgICAuIHNtYXJ0eV9mdW5jdGlvbl9lc2NhcGVfc3BlY2lhbF9jaGFycygkdmFsdWUpIC4gJyIn
OwoKICAgIGlmIChpbl9hcnJheSgoc3RyaW5nKSR2YWx1ZSwgJHNlbGVjdGVkKSkgewogICAgICAg
ICRfb3V0cHV0IC49ICcgY2hlY2tlZD0iY2hlY2tlZCInOwogICAgfQogICAgJF9vdXRwdXQgLj0g
JGV4dHJhIC4gJyAvPicgLiAkb3V0cHV0OwogICAgJF9vdXRwdXQgLj0gKCRsYWJlbHMpPyc8L2xh
YmVsPic6Jzwvc3Bhbj4nOwogICAgJF9vdXRwdXQgLj0gJHNlcGFyYXRvcjsKCiAgICByZXR1cm4g
JF9vdXRwdXQ7Cn0KCj8+Cg==
--MP_qhCzblpK3mV_EudOaxTZsSq
Content-Type: text/x-patch; name=function.html_checkboxes.php.patch
Content-Transfer-Encoding: 7bit
Content-Disposition: attachment; filename=function.html_checkboxes.php.patch
--- function.html_checkboxes.php.orig 2007-03-28 13:42:56.000000000 +0330
+++ function.html_checkboxes.php 2007-03-28 13:42:32.000000000 +0330
@@ -22,6 +22,7 @@
* - separator (optional) - ie <br> or
* - output (optional) - the output next to each checkbox
* - assign (optional) - assign the output as an array to this variable
+ * - direction (optional) - add direction for fields
* Examples:
* <pre>
* {html_checkboxes values=$ids output=$names}
@@ -49,6 +50,7 @@
$separator = '';
$labels = true;
$output = null;
+ $direction = 'ltr';
$extra = '';
@@ -56,6 +58,7 @@
switch($_key) {
case 'name':
case 'separator':
+ case 'direction':
$$_key = $_val;
break;
@@ -104,13 +107,13 @@
if (is_array($options)) {
foreach ($options as $_key=>$_val)
- $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
+ $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $direction);
} else {
foreach ($values as $_i=>$_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
- $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels);
+ $_html_result[] = smarty_function_html_checkboxes_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $direction);
}
}
@@ -123,9 +126,11 @@
}
-function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels) {
- $_output = '';
- if ($labels) $_output .= '<label>';
+function smarty_function_html_checkboxes_output($name, $value, $output, $selected, $extra, $separator, $labels, $direction) {
+ $_output = '';
+ $_output .= ($labels)?'<label dir="'.smarty_function_escape_special_chars($direction).'">':
+ '<span dir="'.smarty_function_escape_special_chars($direction).'">';
+
$_output .= '<input type="checkbox" name="'
. smarty_function_escape_special_chars($name) . '[]" value="'
. smarty_function_escape_special_chars($value) . '"';
@@ -134,8 +139,8 @@
$_output .= ' checked="checked"';
}
$_output .= $extra . ' />' . $output;
- if ($labels) $_output .= '</label>';
- $_output .= $separator;
+ $_output .= ($labels)?'</label>':'</span>';
+ $_output .= $separator;
return $_output;
}
--MP_qhCzblpK3mV_EudOaxTZsSq--