quickform.php
来自「视频监控网络部分的协议ddns,的模块的实现代码,请大家大胆指正.」· PHP 代码 · 共 206 行
PHP
206 行
<?php//// +----------------------------------------------------------------------+// | PHP Version 4 |// +----------------------------------------------------------------------+// | Copyright (c) 1997, 1998, 1999, 2000, 2001, 2002, 2003 The PHP Group |// +----------------------------------------------------------------------+// | This source file is subject to version 2.02 of the PHP license, |// | that is bundled with this package in the file LICENSE, and is |// | available at through the world-wide-web at |// | http://www.php.net/license/2_02.txt. |// | If you did not receive a copy of the PHP license and are unable to |// | obtain it through the world-wide-web, please send a note to |// | license@php.net so we can mail you a copy immediately. |// +----------------------------------------------------------------------+// | Authors: Wolfram Kriesing <wolfram@kriesing.de> |// +----------------------------------------------------------------------+// $Id: QuickForm.php,v 1.3 2003/07/24 11:54:28 cain Exp $//require_once 'HTML/Template/Xipe/Options.php';/***** @package HTML_Template_Xipe_Filter_QuickForm* @access public* @version 03/04/22* @author Wolfram Kriesing <wolfram@kriesing.de>*/class HTML_Template_Xipe_Filter_QuickForm extends HTML_Template_Xipe_Options{ /** * for passing values to the class, i.e. like the delimiters * @access private * @var array $options the options for initializing the filter class */ var $options = array( 'delimiter' => array() // first value of the array is the begin delimiter, second the end delimiter ); var $_namespace = 'form'; var $_allFrozen = false; function HTML_Template_Xipe_Filter_QuickForm($options=array(),$namespace='form') { parent::HTML_Template_Xipe_Options($options); $this->_namespace = $namespace; } function process($input,&$form) { // do only run the methods below if we find a '<form:' string in the $input // otherwise is just invain if (strpos($input,'<'.$this->_namespace.':')) { $input = $this->elementExists($input,$form); $input = $this->elementName($input,$form); $input = $this->element($input,$form); $input = $this->showOnEdit($input); } return $input; } function element($input,&$form) { if ($elements=$this->_process('~<'.$this->_namespace.':element\s.*/>~iU',$input)) { // set it to true, so the first not frozen element will correct it again // this way the checking is easier $this->_allFrozen = true; foreach ($elements as $tag=>$parsed) { $elHtml = ''; if (isset($parsed['attributes'])) { $attribs = $parsed['attributes']; if (isset($attribs['NAME'])) { $elName = $attribs['NAME']; if (!PEAR::isError($element = $form->getElement($elName))) { if ($form->isElementRequired($elName)) { $element->updateAttributes(array('class'=>'required')); } $frozen = $element->isFrozen(); $elHtml = $frozen?$element->getFrozenHtml():$element->toHtml(); if ($error=$form->getElementError($elName)) { $elHtml = '<font class="warning">'.$error.'</font><br>'.$elHtml; } // if the current element is not frozen and if it is // not a submit button or a hidden field // then we set _allFrozen to false // for some reason QF doesnt freeze a file element, so we ignore it here $type = $element->getType(); if (!$frozen && $type!='submit' && $type!='hidden' && $type!='file') { $this->_allFrozen = false; } } } } $input = str_replace($tag,$this->_escape($elHtml),$input); } } return $input; } function elementName($input,&$form) { if ($elements=$this->_process('~<'.$this->_namespace.':elementName\s.*/>~iU',$input)) { foreach ($elements as $tag=>$parsed) { $label = ''; if (isset($parsed['attributes'])) { $attribs = $parsed['attributes']; } // replace PHP_SELF by {$_SERVER['PHP_SELF']} if (isset($attribs['NAME'])) { $elName = $attribs['NAME']; if (!PEAR::isError($element = $form->getElement($elName))) { $label = $element->getLabel(); if ($form->isElementRequired($elName)) { $label.= ' <font class="required">*</font>'; } } } $input = str_replace($tag,$this->_escape($label),$input); } } return $input; } /** * This handles the tag <form:showOnEdit/> * * This tag is used for surrounding stuff that shall only be shown * when editing the data. This is i.e. some instructions of how to * insert text etc. When the frozen data will be shown this info is * mostly not needed. If this is the case simply use this tag to surround * the pieces you dont want to see with the frozen data. * */ function showOnEdit($input) { $tagName = $this->_namespace.':showOnEdit'; if ($this->_allFrozen) { // remove all the stuff which is inside 'showOnEdit' $input = preg_replace("~<$tagName>.*<\/$tagName>~Uis",'',$input); } else { // remove the 'showOnEdit' tags, since the stuff inside there shall be shown $input = preg_replace('~<'.$tagName.'>~Ui','',$input); $input = preg_replace('~</'.$tagName.'>~Ui','',$input); } return $input; } /** * This can be used to surround a piece of template code to check * if the given element exists at all, if it is not given the piece * of code will simply be removed. * * */ function elementExists($input,&$form) { $tagName = $this->_namespace.':elementExists'; preg_match_all('~<'.$tagName.'\s+name="([^"]+)".*>.*<\/'.$tagName.'>~Uis',$input,$results); if (sizeof($results[1])) { foreach ($results[1] as $k=>$aName) { if ($form->elementExists($aName)) { // remove the <form:elementExists opening and closing XML tag $input = preg_replace('~<'.$tagName.'\s+name="'.preg_quote($aName).'".*>(.*)<\/'.$tagName.'>~Us','$1',$input); } else { // remove all the content and the XML tags $input = preg_replace('~<'.$tagName.'\s+name="'.preg_quote($aName).'".*>.*<\/'.$tagName.'>~Uis','',$input); } } } return $input; } function _process($regExp,&$input) { $ret = array(); if (preg_match_all($regExp,$input,$_elTags)) { $elTags = array_unique($_elTags[0]); // replace each tag with the given attributes foreach ($elTags as $aTag) { $p = xml_parser_create(); xml_parse_into_struct($p,$aTag,$vals); xml_parser_free($p); $attribs = array(); $ret[$aTag] = $vals[0]; } } return $ret; } /** * Escape all delimiters, since the content is not meant to be interpreted! * * */ function _escape($string) { $string = str_replace($this->options['delimiter'][0],'\\'.$this->options['delimiter'][0],$string); return str_replace($this->options['delimiter'][1],'\\'.$this->options['delimiter'][1],$string); }}?>
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?