⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 hierselect.php

📁 Piwik#Opensourcewebanalytics一款可以和GOOGLE媲美的开源统计系统,运用AJAX.功能强大.无色提示:按照需要PHP5.1以上和MySQL数据库支持。
💻 PHP
📖 第 1 页 / 共 2 页
字号:
        $this->_js = '';        if (!$this->_flagFrozen) {            // set the onchange attribute for each element except last            $keys     = array_keys($this->_elements);            $onChange = array();            for ($i = 0; $i < count($keys) - 1; $i++) {                $select =& $this->_elements[$keys[$i]];                $onChange[$i] = $select->getAttribute('onchange');                $select->updateAttributes(                    array('onchange' => '_hs_swapOptions(this.form, \'' . $this->_escapeString($this->getName()) . '\', ' . $keys[$i] . ');' . $onChange[$i])                );            }                        // create the js function to call            if (!defined('HTML_QUICKFORM_HIERSELECT_EXISTS')) {                $this->_js .= <<<JAVASCRIPTfunction _hs_findOptions(ary, keys){    var key = keys.shift();    if (!key in ary) {        return {};    } else if (0 == keys.length) {        return ary[key];    } else {        return _hs_findOptions(ary[key], keys);    }}function _hs_findSelect(form, groupName, selectIndex){    if (groupName+'['+ selectIndex +']' in form) {        return form[groupName+'['+ selectIndex +']'];     } else {        return form[groupName+'['+ selectIndex +'][]'];     }}function _hs_unescapeEntities(str){    var div = document.createElement('div');    div.innerHTML = str;    return div.childNodes[0] ? div.childNodes[0].nodeValue : '';}function _hs_replaceOptions(ctl, optionList){    var j = 0;    ctl.options.length = 0;    for (i in optionList) {        var optionText = (-1 == String(optionList[i]).indexOf('&'))? optionList[i]: _hs_unescapeEntities(optionList[i]);        ctl.options[j++] = new Option(optionText, i, false, false);    }}function _hs_setValue(ctl, value){    var testValue = {};    if (value instanceof Array) {        for (var i = 0; i < value.length; i++) {            testValue[value[i]] = true;        }    } else {        testValue[value] = true;    }    for (var i = 0; i < ctl.options.length; i++) {        if (ctl.options[i].value in testValue) {            ctl.options[i].selected = true;        }    }}function _hs_swapOptions(form, groupName, selectIndex){    var hsValue = [];    for (var i = 0; i <= selectIndex; i++) {        hsValue[i] = _hs_findSelect(form, groupName, i).value;    }    _hs_replaceOptions(_hs_findSelect(form, groupName, selectIndex + 1),                        _hs_findOptions(_hs_options[groupName][selectIndex], hsValue));    if (selectIndex + 1 < _hs_options[groupName].length) {        _hs_swapOptions(form, groupName, selectIndex + 1);    }}function _hs_onReset(form, groupNames){    for (var i = 0; i < groupNames.length; i++) {        try {            for (var j = 0; j <= _hs_options[groupNames[i]].length; j++) {                _hs_setValue(_hs_findSelect(form, groupNames[i], j), _hs_defaults[groupNames[i]][j]);                if (j < _hs_options[groupNames[i]].length) {                    _hs_replaceOptions(_hs_findSelect(form, groupNames[i], j + 1),                                        _hs_findOptions(_hs_options[groupNames[i]][j], _hs_defaults[groupNames[i]].slice(0, j + 1)));                }            }        } catch (e) {            if (!(e instanceof TypeError)) {                throw e;            }        }    }}function _hs_setupOnReset(form, groupNames){    setTimeout(function() { _hs_onReset(form, groupNames); }, 25);}function _hs_onReload(){    var ctl;    for (var i = 0; i < document.forms.length; i++) {        for (var j in _hs_defaults) {            if (ctl = _hs_findSelect(document.forms[i], j, 0)) {                for (var k = 0; k < _hs_defaults[j].length; k++) {                    _hs_setValue(_hs_findSelect(document.forms[i], j, k), _hs_defaults[j][k]);                }            }        }    }    if (_hs_prevOnload) {        _hs_prevOnload();    }}var _hs_prevOnload = null;if (window.onload) {    _hs_prevOnload = window.onload;}window.onload = _hs_onReload;var _hs_options = {};var _hs_defaults = {};JAVASCRIPT;                define('HTML_QUICKFORM_HIERSELECT_EXISTS', true);            }            // option lists            $jsParts = array();            for ($i = 1; $i < $this->_nbElements; $i++) {                $jsParts[] = $this->_convertArrayToJavascript($this->_options[$i]);            }            $this->_js .= "\n_hs_options['" . $this->_escapeString($this->getName()) . "'] = [\n" .                          implode(",\n", $jsParts) .                          "\n];\n";            // default value; if we don't actually have any values yet just use            // the first option (for single selects) or empty array (for multiple)            $values = array();            foreach (array_keys($this->_elements) as $key) {                if (is_array($v = $this->_elements[$key]->getValue())) {                    $values[] = count($v) > 1? $v: $v[0];                } else {                    // XXX: accessing the supposedly private _options array                    $values[] = $this->_elements[$key]->getMultiple() || empty($this->_elements[$key]->_options[0])?                                array():                                $this->_elements[$key]->_options[0]['attr']['value'];                }            }            $this->_js .= "_hs_defaults['" . $this->_escapeString($this->getName()) . "'] = " .                          $this->_convertArrayToJavascript($values, false) . ";\n";        }        include_once('HTML/QuickForm/Renderer/Default.php');        $renderer = new HTML_QuickForm_Renderer_Default();        $renderer->setElementTemplate('{element}');        parent::accept($renderer);        if (!empty($onChange)) {            $keys     = array_keys($this->_elements);            for ($i = 0; $i < count($keys) - 1; $i++) {                $this->_elements[$keys[$i]]->updateAttributes(array('onchange' => $onChange[$i]));            }        }        return (empty($this->_js)? '': "<script type=\"text/javascript\">\n//<![CDATA[\n" . $this->_js . "//]]>\n</script>") .               $renderer->toHtml();    } // end func toHtml    // }}}    // {{{ accept()    function accept(&$renderer, $required = false, $error = null)    {        $renderer->renderElement($this, $required, $error);    } // end func accept    // }}}    // {{{ onQuickFormEvent()    function onQuickFormEvent($event, $arg, &$caller)    {        if ('updateValue' == $event) {            // we need to call setValue() so that the secondary option            // matches the main option            return HTML_QuickForm_element::onQuickFormEvent($event, $arg, $caller);        } else {            $ret = parent::onQuickFormEvent($event, $arg, $caller);            // add onreset handler to form to properly reset hierselect (see bug #2970)            if ('addElement' == $event) {                $onReset = $caller->getAttribute('onreset');                if (strlen($onReset)) {                    if (strpos($onReset, '_hs_setupOnReset')) {                        $caller->updateAttributes(array('onreset' => str_replace('_hs_setupOnReset(this, [', "_hs_setupOnReset(this, ['" . $this->_escapeString($this->getName()) . "', ", $onReset)));                    } else {                        $caller->updateAttributes(array('onreset' => "var temp = function() { {$onReset} } ; if (!temp()) { return false; } ; if (typeof _hs_setupOnReset != 'undefined') { return _hs_setupOnReset(this, ['" . $this->_escapeString($this->getName()) . "']); } "));                    }                } else {                    $caller->updateAttributes(array('onreset' => "if (typeof _hs_setupOnReset != 'undefined') { return _hs_setupOnReset(this, ['" . $this->_escapeString($this->getName()) . "']); } "));                }            }            return $ret;        }    } // end func onQuickFormEvent    // }}}    // {{{ _convertArrayToJavascript()   /**    * Converts PHP array to its Javascript analog    *    * @access private    * @param  array     PHP array to convert    * @param  bool      Generate Javascript object literal (default, works like PHP's associative array) or array literal    * @return string    Javascript representation of the value    */    function _convertArrayToJavascript($array, $assoc = true)    {        if (!is_array($array)) {            return $this->_convertScalarToJavascript($array);        } else {            $items = array();            foreach ($array as $key => $val) {                $item = $assoc? "'" . $this->_escapeString($key) . "': ": '';                if (is_array($val)) {                    $item .= $this->_convertArrayToJavascript($val, $assoc);                } else {                    $item .= $this->_convertScalarToJavascript($val);                }                $items[] = $item;            }        }        $js = implode(', ', $items);        return $assoc? '{ ' . $js . ' }': '[' . $js . ']';    }        // }}}    // {{{ _convertScalarToJavascript()   /**    * Converts PHP's scalar value to its Javascript analog    *    * @access private    * @param  mixed     PHP value to convert    * @return string    Javascript representation of the value    */    function _convertScalarToJavascript($val)    {        if (is_bool($val)) {            return $val ? 'true' : 'false';        } elseif (is_int($val) || is_double($val)) {            return $val;        } elseif (is_string($val)) {            return "'" . $this->_escapeString($val) . "'";        } elseif (is_null($val)) {            return 'null';        } else {            // don't bother            return '{}';        }    }    // }}}    // {{{ _escapeString()   /**    * Quotes the string so that it can be used in Javascript string constants       *    * @access private    * @param  string    * @return string    */    function _escapeString($str)    {        return strtr($str,array(            "\r"    => '\r',            "\n"    => '\n',            "\t"    => '\t',            "'"     => "\\'",            '"'     => '\"',            '\\'    => '\\\\'        ));    }    // }}}} // end class HTML_QuickForm_hierselect?>

⌨️ 快捷键说明

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