formselect.php

来自「Bug tracker, and reporter.」· PHP 代码 · 共 174 行

PHP
174
字号
<?php/** * Zend Framework * * LICENSE * * This source file is subject to the new BSD license that is bundled * with this package in the file LICENSE.txt. * It is also available through the world-wide-web at this URL: * http://framework.zend.com/license/new-bsd * If you did not receive a copy of the license and are unable to * obtain it through the world-wide-web, please send an email * to license@zend.com so we can send you a copy immediately. * * @category   Zend * @package    Zend_View * @subpackage Helper * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License *//** * Abstract class for extension */require_once 'Zend/View/Helper/FormElement.php';/** * Helper to generate "select" list of options * * @category   Zend * @package    Zend_View * @subpackage Helper * @copyright  Copyright (c) 2005-2008 Zend Technologies USA Inc. (http://www.zend.com) * @license    http://framework.zend.com/license/new-bsd     New BSD License */class Zend_View_Helper_FormSelect extends Zend_View_Helper_FormElement{    /**     * Generates 'select' list of options.     *     * @access public     *     * @param string|array $name If a string, the element name.  If an     * array, all other parameters are ignored, and the array elements     * are extracted in place of added parameters.     *     * @param mixed $value The option value to mark as 'selected'; if an     * array, will mark all values in the array as 'selected' (used for     * multiple-select elements).     *     * @param array|string $attribs Attributes added to the 'select' tag.     *     * @param array $options An array of key-value pairs where the array     * key is the radio value, and the array value is the radio text.     *     * @param string $listsep When disabled, use this list separator string     * between list values.     *     * @return string The select tag and options XHTML.     */    public function formSelect($name, $value = null, $attribs = null,        $options = null, $listsep = "<br />\n")    {        $info = $this->_getInfo($name, $value, $attribs, $options, $listsep);        extract($info); // name, id, value, attribs, options, listsep, disable        // force $value to array so we can compare multiple values        // to multiple options.        $value = (array) $value;        // check if element may have multiple values        $multiple = '';        if (substr($name, -2) == '[]') {            // multiple implied by the name            $multiple = ' multiple="multiple"';        }        if (isset($attribs['multiple'])) {            // Attribute set            if ($attribs['multiple']) {                // True attribute; set multiple attribute                $multiple = ' multiple="multiple"';                // Make sure name indicates multiple values are allowed                if (!empty($multiple) && (substr($name, -2) != '[]')) {                    $name .= '[]';                }            } else {                // False attribute; ensure attribute not set                $multiple = '';            }            unset($attribs['multiple']);        }         // now start building the XHTML.        $disabled = '';        if (true === $disable) {            $disabled = ' disabled="disabled"';        }        // Build the surrounding select element first.        $xhtml = '<select'                . ' name="' . $this->view->escape($name) . '"'                . ' id="' . $this->view->escape($id) . '"'                . $multiple                . $disabled                . $this->_htmlAttribs($attribs)                . ">\n    ";        // build the list of options        $list = array();        foreach ((array) $options as $opt_value => $opt_label) {            if (is_array($opt_label)) {                $opt_disable = '';                if (is_array($disable) && in_array($opt_value, $disable)) {                    $opt_disable = ' disabled="disabled"';                }                $list[] = '<optgroup'                        . $opt_disable                        . ' label="' . $this->view->escape($opt_value) .'">';                foreach ($opt_label as $val => $lab) {                    $list[] = $this->_build($val, $lab, $value, $disable);                }                $list[] = '</optgroup>';            } else {                $list[] = $this->_build($opt_value, $opt_label, $value, $disable);            }        }        // add the options to the xhtml and close the select        $xhtml .= implode("\n    ", $list) . "\n</select>";        return $xhtml;    }    /**     * Builds the actual <option> tag     *     * @param string $value Options Value     * @param string $label Options Label     * @param array  $selected The option value(s) to mark as 'selected'     * @param array|bool $disable Whether the select is disabled, or individual options are     * @return string Option Tag XHTML     */    protected function _build($value, $label, $selected, $disable)    {        if (is_bool($disable)) {            $disable = array();        }        $opt = '<option'             . ' value="' . $this->view->escape($value) . '"'             . ' label="' . $this->view->escape($label) . '"';        // selected?        if (in_array($value, $selected, 0 === $value)) {            $opt .= ' selected="selected"';        }        // disabled?        if (in_array($value, $disable)) {            $opt .= ' disabled="disabled"';        }        $opt .= '>' . $this->view->escape($label) . "</option>";        return $opt;    }}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?