在osCMax的选择框中选择多个默认值或以前选择的值


Select multiple default, or previously chosen, values in a select box in osCMax

我使用以下方法显示多选框,它在新表单中运行良好。

echo tep_draw_pull_down_menu("cat[$i][]", $cat_array, '', 'id=cat3, size=5 multiple');

但在编辑表单中,我希望默认情况下选择插入到添加表单中的值

默认情况下要选择的值存储在一个数组中。因此,我将数组传递给默认值,如下所示。

echo tep_draw_pull_down_menu("cat[$i][]", $cat_array, "$arr", 'id=cat3, size=5 multiple');

但它没有选择所需的值。它一次只选择一个值,因为我们无法将数组传递给默认值。

我该怎么做?

如果不更改一些代码库,您将无法做到这一点。

默认情况下,tep_draw_pull_down_menu方法只允许和检查字符串。它根本不希望传递多个值进行检查。

编辑includes/functions/html_output.php中的tep_draw_pull_down_menu方法,方法如下:

if ($default == $values[$i]['id']) {

将其更改为以下内容:

if ($default == $values[$i]['id'] || (is_array($default) && in_array($values[$i]['id'], $default))) {

额外的位添加了一个检查,以查看传递的$default变量是否为数组,如果是,则检查select选项的当前值是否在其中。如果两项计数均为"是",则将该选项标记为已选中。

下面是一个使用中的例子:

$cat_array[] = array("id" => 'marvelman', "text" => 'Kimota!');
$cat_array[] = array("id" => 'rorschach', "text" => 'hurm');
$cat_array[] = array("id" => 'cerebus', "text" => 'Something Fell');
$cat_array[] = array("id" => 'wolvie', "text" => 'Snikt!');
$cat_array[] = array("id" => 'spider-man', "text" => 'Thwip');
$arr = array('rorschach', 'wolvie', 'cerebus');
echo tep_draw_pull_down_menu("cat[$i][]", $cat_array, $arr, 'id="cat3" size="5" multiple');

您可能也不希望用引号传递$arr变量,除非您明确希望传递字符串$arr,而不是其值数组。