解决OneThink中模型中字段参数为函数时无返回值的问题
来源:互联网 发布:淘宝买人心果树 编辑:程序博客网 时间:2024/06/13 02:40
创建模型
针对OT,创建一个模板,就插入**_model表一条记录,当此时,并并不创建模型的附表。
模型中创建字段
func_type字段如下
指定字段的参数为函数,函数get_func_type定义如下
/** *获取函数类型 * @param intger $type 类型 * @param array $all 函数类型 * @author dqs <dequanLi_edu@126.com>*/function get_func_type(){ $map=array('status'=>1); $info=M('func_type')->field('id,name')->select($map); $types=array(); foreach ($info as $value) { $types[$value['id']]=$value['name']; } return $types;}
在创建字段的时候,就将该字段类型,添加到**_attribute表中,用于生成输入界面,如文本框,按钮等,如下图
当第一次字段的时候,就创建了模型附表,表名为**_document_模型名字
创建分类
选择函数模型
解决字段的属性为函数时候的bug
在该分类下添加文章,发现OT中,对应模型字段类型属性为函数时候,出现问题。如下:
通过深究代码发现:
/Admin/Common/function.php中parse_field_attr方法有问题
function parse_field_attr($string) { if(0 === strpos($string,':')){ // 采用函数定义 return eval(substr($string,1).';'); }...
将其改为:
function parse_field_attr($string) { if(0 === strpos($string,':')){ // 采用函数定义 return eval('return '.substr($string,1).';'); }
问题解决。
关于php中eval函数,可以参考这里。
补充
关于OT中模型、分类、文章关系
文章属于某个分类,分类绑定在某个模型上。
OT中模型属性怎样和文章中输入单元对应
因为针对模型中每个属性,如函数模型
字段contenttext和func_type在**_attribute表中都有对应的属性简介
在Admin/View/Article/add.html或Admin/View/Article/edit.html中有对应生成代码。如edit.html中如下:
<volist name="fields[$key]" id="field"> <if condition="$field['is_show'] == 1 || $field['is_show'] == 3"> <div class="form-item cf"> <label class="item-label">{$field['title']}<span class="check-tips"><notempty name="field['remark']">({$field['remark']})</notempty></span></label> <div class="controls"> <switch name="field.type"> <case value="num"> <input type="text" class="text input-medium" name="{$field.name}" value="{$data[$field['name']]}"> </case> <case value="string"> <input type="text" class="text input-large" name="{$field.name}" value="{$data[$field['name']]}"> </case> <case value="textarea"> <label class="textarea input-large"> <textarea name="{$field.name}">{$data[$field['name']]}</textarea> </label> </case> <case value="datetime"> <input type="text" name="{$field.name}" class="text input-large time" value="{$data[$field['name']]|time_format}" placeholder="请选择时间" /> </case> <case value="bool"> <select name="{$field.name}"> <volist name=":parse_field_attr($field['extra'])" id="vo"> <option value="{$key}" <eq name="data[$field['name']]" value="$key">selected</eq>>{$vo}</option> </volist> </select> </case> <case value="select"> <select name="{$field.name}"> <volist name=":parse_field_attr($field['extra'])" id="vo"> <option value="{$key}" <eq name="data[$field['name']]" value="$key">selected</eq>>{$vo}</option> </volist> </select> </case> <case value="radio"> <volist name=":parse_field_attr($field['extra'])" id="vo"> <label class="radio"> <input type="radio" value="{$key}" name="{$field.name}" <eq name="data[$field['name']]" value="$key">checked="checked"</eq>>{$vo} </label> </volist> </case> <case value="checkbox"> <volist name=":parse_field_attr($field['extra'])" id="vo"> <label class="checkbox"> <input type="checkbox" value="{$key}" name="{$field.name}[]" <if condition="check_document_position($data[$field['name']],$key)">checked="checked"</if>>{$vo} </label> </volist> </case> <case value="editor"> <label class="textarea"> <textarea name="{$field.name}">{$data[$field['name']]}</textarea> {:hook('adminArticleEdit', array('name'=>$field['name'],'value'=>$data[$field['name']]))} </label> </case> <case value="picture"> <div class="controls"> <input type="file" id="upload_picture_{$field.name}"> <input type="hidden" name="{$field.name}" id="cover_id_{$field.name}" value="{$data[$field['name']]}"/> <div class="upload-img-box"> <notempty name="data[$field['name']]"> <div class="upload-pre-item"><img src="__ROOT__{$data[$field['name']]|get_cover='path'}"/></div> </notempty> </div> </div> <script type="text/javascript"> //上传图片 /* 初始化上传插件 */ $("#upload_picture_{$field.name}").uploadify({ "height" : 30, "swf" : "__STATIC__/uploadify/uploadify.swf", "fileObjName" : "download", "buttonText" : "上传图片", "uploader" : "{:U('File/uploadPicture',array('session_id'=>session_id()))}", "width" : 120, 'removeTimeout' : 1, 'fileTypeExts' : '*.jpg; *.png; *.gif;', "onUploadSuccess" : uploadPicture{$field.name}, 'onFallback' : function() { alert('未检测到兼容版本的Flash.'); } }); function uploadPicture{$field.name}(file, data){ var data = $.parseJSON(data); var src = ''; if(data.status){ $("#cover_id_{$field.name}").val(data.id); src = data.url || '__ROOT__' + data.path $("#cover_id_{$field.name}").parent().find('.upload-img-box').html( '<div class="upload-pre-item"><img src="' + src + '"/></div>' ); } else { updateAlert(data.info); setTimeout(function(){ $('#top-alert').find('button').click(); $(that).removeClass('disabled').prop('disabled',false); },1500); } } </script> </case> <case value="file"> <div class="controls"> <input type="file" id="upload_file_{$field.name}"> <input type="hidden" name="{$field.name}" value="{:think_encrypt(json_encode(get_table_field($data[$field['name']],'id','','File')))}"/> <div class="upload-img-box"> <present name="data[$field['name']]"> <div class="upload-pre-file"><span class="upload_icon_all"></span>{$data[$field['name']]|get_table_field=###,'id','name','File'}</div> </present> </div> </div> <script type="text/javascript"> //上传图片 /* 初始化上传插件 */ $("#upload_file_{$field.name}").uploadify({ "height" : 30, "swf" : "__STATIC__/uploadify/uploadify.swf", "fileObjName" : "download", "buttonText" : "上传附件", "uploader" : "{:U('File/upload',array('session_id'=>session_id()))}", "width" : 120, 'removeTimeout' : 1, "onUploadSuccess" : uploadFile{$field.name}, 'onFallback' : function() { alert('未检测到兼容版本的Flash.'); } }); function uploadFile{$field.name}(file, data){ var data = $.parseJSON(data); if(data.status){ var name = "{$field.name}"; $("input[name="+name+"]").val(data.data); $("input[name="+name+"]").parent().find('.upload-img-box').html( "<div class=\"upload-pre-file\"><span class=\"upload_icon_all\"></span>" + data.info + "</div>" ); } else { updateAlert(data.info); setTimeout(function(){ $('#top-alert').find('button').click(); $(that).removeClass('disabled').prop('disabled',false); },1500); } } </script> </case> <default/> <input type="text" class="text input-large" name="{$field.name}" value="{$data[$field['name']]}"> </switch> </div> </div> </if> </volist>
在上面我创建的字段func_type是select类型,需要执行的代码如下:
<select name="{$field.name}"> <volist name=":parse_field_attr($field['extra'])" id="vo"> <option value="{$key}" <eq name="data[$field['name']]" value="$key">selected</eq>>{$vo}</option> </volist> </select>
parse_field_attr函数在/Admin/Common/function.php中定义。
1 0
- 解决OneThink中模型中字段参数为函数时无返回值的问题
- onethink 中在后台创建模型的时候 在字段里面添加的函数
- 无参数无返回值的函数sayHello,并在main中执行
- 解决eclipse中android添加重载函数时参数为arg0,arg1的问题
- 解决eclipse中android添加重载函数时参数为arg0,arg1的问题
- 解决eclipse中android添加重载函数时参数为arg0,arg1的问题
- onethink开发中遇到的问题
- 无返回值的函数交换参数
- 有参数无返回值的函数
- 解决cxf中list中对象为1个时返回json串问题的配置文件
- 在重写的onMeasure()函数中,getMeasured的返回值为0,怎么解决?
- SendRedirect中参数为中文时解决乱码问题
- 解决PowerDesigner中DBMS设置的问题-创建物理模型时DBMS选项为空
- 解决PowerDesigner中DBMS设置的问题-创建物理模型时DBMS选项为空
- 在JavaScript中使用Qt对象成员函数的参数及返回值问题
- 编程中函数的返回值的定义问题的解决
- 表中字段值为NULL时,hibernate查询不会返回该字段
- sparksql udf自定义函数中参数过多问题的解决
- Android进程间通信之--Messenger(信使)
- 将Unity场景以Wavefront Obj格式导出
- MapX4.0在 win8 64位上的安装与VS2010控件破解
- IntelliJ idea的使用心得
- Mysql基础篇---运算符和函数
- 解决OneThink中模型中字段参数为函数时无返回值的问题
- Leetcode Climbing Stairs
- return false 的秘密
- Hadoop搭建伪分布式 & 上传和下载文件
- 鸽巢(计数)排序--java
- Codeforces Round #361 (Div. 2) D RMQ+二分
- 查看网页中的密码
- java之原子性
- Java反射