现公布自定义表单控件的部分代码,这个纯属个人利用空闲时间所做,欢迎大家交流。
ckeditor插件代码
插件配置文件plugin.js,该文件放在ckeditor下的plugins目录下
/** * 自定义表单设计器 计算控件 * author tony 2012-08-14 */CKEDITOR.plugins.add('xd_calcu',{ init : function(editor){ var pluginName = 'xd_calcu'; editor.addCommand(pluginName,new CKEDITOR.dialogCommand(pluginName)); editor.ui.addButton(pluginName,{ label:'计算控件', command:pluginName, icon : CKEDITOR.plugins.getPath(pluginName) + 'calc.gif' }); CKEDITOR.dialog.add(pluginName,this.path + 'dialogs/xd_calcu.js'); if ( editor.addMenuItems ) { editor.addMenuItems( { xd_calcu : { label : '日历控件', command : 'xd_calcu', group : 'textfield', icon : CKEDITOR.plugins.getPath('xd_calcu') + 'calc.gif' } }); } if ( editor.contextMenu ) { editor.contextMenu.addListener( function( element ) { if ( element && !element.isReadOnly() ) { var name = element.getName(); var input_type = element.getAttribute('input_type'); if ( name == 'input' && input_type === 'calc'){ return { xd_calcu : CKEDITOR.TRISTATE_ON }; } } }); } editor.on( 'doubleclick', function( evt ) { var element = evt.data.element; if ( element.is( 'input' ) ) evt.data.dialog = 'xd_calcu'; }); }});
对话框文件xd_calcu.js
/** * 智能表单 计算控件 * @author tony 2012-08-14 *///显示公式说明function displayRemark(){ var displayDom = document.getElementById('displayRemark'); if(displayDom){ if(displayDom.style.display === 'none'){ displayDom.style.display = 'block'; } else { displayDom.style.display = 'none'; } }} CKEDITOR.dialog.add('xd_calcu',function(editor){ var elements = [ { id : 'calcName', type : 'text', widths : ['100px','150px'], label : '控件名称:', labelLayout : 'horizontal', labelStyle : 'font-weight:bold', style : 'width:150px;margin-left:25px;' }, { id : 'calcValue', type : 'textarea', widths : ['100px','150px'], rows : '3', cols : '45', label : '计算公式:', labelLayout : 'horizontal', labelStyle : 'font-weight:bold', style : 'width:150px;margin-left:25px;' }, { type : 'html', widths : ['10%','80%'], html : '
控件的php解析代码
find('input[element_type="xd_calcu"]'); if(!empty($calcus)){ foreach($calcus as $e){ if($opType === 'w'){ $name = $e->name; $index = explode('_',$name); $value = $e->value; $elementValue = $value; if(isset($formData[$name]) && $formData[$name]){ $elementValue = $formData[$name]; } $htmlText = ' title).'" type="text" class="CALC" classname="CALC" prec="'.($e->prec).'">'; //获取计算项 $elementArray = array(); $calcuElement = $html->find('input'); foreach($calcuElement as $calcuE){ if(strpos($value,$calcuE->title) >= 0){ $elementArray[] = $calcuE; } } $calcuString = $this->calculate($value,$elementArray); $htmlText .= '