-
Notifications
You must be signed in to change notification settings - Fork 99
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Smarty html_checkboxes_ex html_radios_ex を廃止 #815
Comments
html_checkboxes や html_radios を拡張している理由って何でしょうか? PHPStan で、 ざっと、Smarty の標準実装と比べると、label_ids が そもそも拡張が必要かや、現実装が実現方法として望ましいかも気になりますが、少なくとも必要となった理由はソースに記録しておくべきと思い起票した次第です。 |
EC-CUBE2.13から2.17へバージョンアップする際に、2.13のテンプレートとの互換性を維持するためにこのような実装にしたと記憶しています。 |
ちょっと勘違いがありました。Smarty 標準のカスタム関数を書き換えていると思っていたのですが、新たなカスタム関数として *_ex が追加されている様子ですね。 html_radios_ex の利用箇所
html_checkboxes_ex の利用箇所
よって、html_checkboxes_ex は直ちに削除で良さそうですが、html_radios_ex はもう少し調査が必要そうです。 |
古いSmartyは実装がいまいちで、labelとか使ってないから拡張していたイメージがあります |
function.html_radios_ex.php が追加された時点のソースで差異を調べました。
--- 7ea6ec8e9-function.html_radios.php 2024-01-06 17:57:52.115876226 +0900
+++ 7ea6ec8e9-function.html_radios_ex.php 2024-01-06 17:58:03.855873704 +0900
@@ -38,7 +38,7 @@
* @return string
* @uses smarty_function_escape_special_chars()
*/
-function smarty_function_html_radios($params, &$smarty)
+function smarty_function_html_radios_ex($params, &$smarty)
{
require_once $smarty->_get_plugin_filepath('shared','escape_special_chars');
@@ -48,12 +48,15 @@
$selected = null;
$separator = '';
$labels = true;
- $label_ids = false;
+ $label_ids = true;
$output = null;
$extra = '';
foreach($params as $_key => $_val) {
switch($_key) {
+ case 'tags':
+ $$_key = split("\|", $_val);
+ break;
case 'name':
case 'separator':
$$_key = (string)$_val;
@@ -76,7 +79,6 @@
case 'options':
$$_key = (array)$_val;
break;
-
case 'values':
case 'output':
$$_key = array_values((array)$_val);
@@ -108,13 +110,13 @@
if (isset($options)) {
foreach ($options as $_key=>$_val)
- $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids);
+ $_html_result[] = smarty_function_html_radios_output_ex($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $tags);
} else {
foreach ($values as $_i=>$_key) {
$_val = isset($output[$_i]) ? $output[$_i] : '';
- $_html_result[] = smarty_function_html_radios_output($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids);
+ $_html_result[] = smarty_function_html_radios_output_ex($name, $_key, $_val, $selected, $extra, $separator, $labels, $label_ids, $tags);
}
}
@@ -127,8 +129,25 @@
}
-function smarty_function_html_radios_output($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids) {
+function smarty_function_html_radios_output_ex($name, $value, $output, $selected, $extra, $separator, $labels, $label_ids, $tags) {
$_output = '';
+
+ $_output .= '<input type="radio" name="'
+ . smarty_function_escape_special_chars($name) . '" value="'
+ . smarty_function_escape_special_chars($value) . '"';
+
+ if ($labels && $label_ids) {
+ $_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!', '_', $name . '_' . $value));
+ $_output .= ' id="' . $_id . '"';
+ }
+ if ((string)$value == $selected) {
+ $_output .= ' checked="checked"';
+ }
+
+ $_output .= $extra . ' />';
+
+ $_output .= $tags[0];
+
if ($labels) {
if($label_ids) {
$_id = smarty_function_escape_special_chars(preg_replace('![^\w\-\.]!', '_', $name . '_' . $value));
@@ -137,16 +156,12 @@
$_output .= '<label>';
}
}
- $_output .= '<input type="radio" name="'
- . smarty_function_escape_special_chars($name) . '" value="'
- . smarty_function_escape_special_chars($value) . '"';
- if ($labels && $label_ids) $_output .= ' id="' . $_id . '"';
+ // �ͤ�����
+ $_output .= $output;
+
+ $_output .= $tags[1];
- if ((string)$value==$selected) {
- $_output .= ' checked="checked"';
- }
- $_output .= $extra . ' />' . $output;
if ($labels) $_output .= '</label>';
$_output .= $separator;
ざっくり、以下の感じでしょうか。
|
引き続き、EC-CUBE 2.11 以降で、唯一の利用箇所について考察します。
<td>
-<input type="radio" name="sex" value="1" id="sex_1"><label for="sex_1">男性</label>
+<label><input type="radio" name="sex" value="1">男性</label>
-<input type="radio" name="sex" value="2" id="sex_2"><label for="sex_2">女性</label>
+<label><input type="radio" name="sex" value="2">女性</label>
</td>
Smarty 公式マニュアル のサンプルだと、id 値が出力される記述なので、その相違はやや気になりますが、実質的にはどちらでも良く、むしろ ID 競合のリスクが軽減するとも思います。 うろ覚えですが、大昔に 追って対応を考えて PR しようと思いますが、他に関連する情報がありましたら、引き続き教えてください。 |
Smarty html_checkboxes_ex html_radios_ex を廃止 #815
コメントの内容を踏まえ、以下を PR する予定。
多分、#800 と競合する。
The text was updated successfully, but these errors were encountered: