2

如果我的服务器帐户中有一个包含以下代码的插件:

function script_options() {
    $scripts = array(
        'Forum' => array(
            '403' => 'phpBB2',
            '5' => 'phpBB3',
            '417' => 'Simple Machines Forum',
        ),
        'Blog' => array(
            '410' => 'b2evolution',
            '418' => 'Movable Type',
            '409' => 'Textpattern',
            '400' => 'WordPress',
        ),
        'Wiki' => array(
            '413' => 'DokuWiki',
        ),
    );
    $result = '<option value="">'.__rp('none','none').'</option>';
    foreach ($scripts as $group => $list) {
        $result .= "<optgroup label=\"$group\">";
        foreach ($list as $script_key => $script_value) {
            $result .= "<option value=\"$script_key\"".($script_key == isset($_GET['script'])?$_GET['script']:false ? ' selected="selected"':'').">$script_value</option>";
        }
        $result .= '</optgroup>';
    }
    return $result;
}

我怎样才能做出第一选择('400' 'Wordpress');如果用户没有选择它自己选择Wordpress的任何东西。

4

1 回答 1

3

看来您并没有完全理解这段代码的作用,所以让我为您总结一下。

让我们从最后开始,逆向工作:当函数返回时,$result变量包含一个 HTML 片段,其中包含一堆<optgroup>标签,而这些标签包含<option>标签。我假设这个 HTML 被粘贴到<select>这个函数之外的某个标签中(顺便说一句,<select>是一个HTML的东西;PHP 有一个select()与此完全无关的函数,所以为了避免混淆,不要将 HTML<select>称为“PHP 中的选择选项” )。

foreach在此之前的循环$result通过连接各个 HTML 块来构造值,而这些循环又派生自在函数开头声明的嵌套关联数组。如果你仔细观察这些循环,你会发现生成的 HTML 的树结构遵循嵌套数组的树结构:每个顶级元素都变成一个<optgroup>,并且名称是从数组键派生的;每个二级元素变成一个<option>,其中键进入value属性(确定提交包含表单时使用的值),值进入用户可见的标签内容。数组元素是按顺序访问的,因此数组中最先出现的内容也会在生成的 HTML 中出现。

在这种情况下,您需要了解两件事<select>:首先,您可以通过添加selected标签来定义默认选择哪个选项(表达这一点的标准方式是<option selected="selected">...</option>);在您的<select>. 其次,如果您的选项都没有select属性,则第一个成为默认值。

现在,这对你意味着什么?很简单:您可以让您的代码设置selectedWordPress 条目的属性;这样,您的选项的顺序与现在、optgroups 和所有选项完全相同,但 WordPress 将被预先选择。或者您可以将 WordPress 的元素作为第一个元素,将其放在 中的第一个元素,<select>并且应该预先选择它,因为没有选项具有selected属性。

于 2013-01-12T13:10:50.723 回答