# MultiImages **Repository Path**: u123/MultiImages ## Basic Information - **Project Name**: MultiImages - **Description**: 一个ThinkPHP3.2.3的插件,功能是增加一个存储多图ID的字段,同时相应的增加多图上传功能的表单。 - **Primary Language**: PHP - **License**: GPL-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2017-01-01 - **Last Updated**: 2020-12-19 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README  **Onethink多图字段插件 By Creatint** v0.4 **描述** :这是一个Onethink1.1的插件,它的功能是增加一个“多图字段”(增加在编辑模型时需要选择的字段列表中),并相应的在后台中增加多图上传表单。 **更新内容** : 修复了删除图片发生的bug **安装步骤** : 先参照[TP、OT修改过滤器钩子](https://git.oschina.net/yotaku/Page/wikis/ThinkPHP%E3%80%81Onethink%E9%92%A9%E5%AD%90%E4%BF%AE%E6%94%B9%E4%B8%BA%E8%BF%87%E6%BB%A4%E5%99%A8%E9%92%A9%E5%AD%90)修改TP与OT的钩子为过滤器钩子。 3. 把MultiImages文件夹放在Addons中 4. “钩子管理”中增加钩子,如下图所示: ![字段类型扩展钩子](http://git.oschina.net/uploads/images/2016/0918/103724_52f18644_725292.png "字段类型扩展钩子") ![表单字段扩展钩子](http://git.oschina.net/uploads/images/2016/0918/130253_7748631c_725292.png "表单字段扩展钩子") 5. 安装插件,在设置中设置字段类型名称(此名称用做编辑模型时字段类型的名称,即模板中判断字段选取表单代码时所需的名称) ![字段类型的名称](http://git.oschina.net/uploads/images/2016/0918/112547_bfbda9e4_725292.png "字段类型的名称") 6. 增加挂载点: 'addFieldType'钩子放在Onethink/Application/Common/Common/function.php的get_attribute_type()函数的return语句之前: ``` // 获取属性类型信息 function get_attribute_type($type=''){ // TODO 可以加入系统配置 static $_type = array( 'num' => array('数字','int(10) UNSIGNED NOT NULL'), 'string' => array('字符串','varchar(255) NOT NULL'), 'textarea' => array('文本框','text NOT NULL'), 'date' => array('日期','int(10) NOT NULL'), 'datetime' => array('时间','int(10) NOT NULL'), 'bool' => array('布尔','tinyint(2) NOT NULL'), 'select' => array('枚举','char(50) NOT NULL'), 'radio' => array('单选','char(10) NOT NULL'), 'checkbox' => array('多选','varchar(100) NOT NULL'), 'editor' => array('编辑器','text NOT NULL'), 'picture' => array('上传图片','int(10) UNSIGNED NOT NULL'), 'file' => array('上传附件','int(10) UNSIGNED NOT NULL'), ); $_type = hook('addFieldType',$_type,$filter=true); return $type?$_type[$type][0]:$_type; } ``` 'multiImagesForm'钩子放在Onethink/Application/Admin/View/Article/edit.html的switch结构中(其中case的值‘multi_images’是上面设置的字段类型的名称): ``` {:hook('addForm',array('typeName'=>'multi_images','fieldName'=>$field['name'],'images_ids'=>$data[$field['name']]))} ``` **效果图:** ![多图字段插件](http://git.oschina.net/uploads/images/2016/0918/114303_0166d996_725292.png "多图字段插件") ![多图字段插件](http://git.oschina.net/uploads/images/2016/0918/114312_79f245bc_725292.png "多图字段插件") 我的博客:[Creatint的博客](http://creatint.yotaku.cn) 推荐微信公众号:Fuchsia社区 ![Fuchsia社区](http://git.oschina.net/uploads/images/2016/0918/131237_0528baac_725292.jpeg "Fuchsia社区") 致谢: 本插件借鉴了TP社区Clavis网友的“ONETHINK图片批量上传插件”的代码,感谢Clavis的无私奉献。 历史版本: v0.4 2016.10.14 v0.3 v0.2 2016.9.19 v0.1 2016.9.19 > 后记 首先, 非常感谢你的分享. 已安装成功. 下面说说个人安装过程. 1, 我是个菜鸟, 你的第二步图片中显示"钩子挂载的插件排序"里有MultiImages, 新手在这里一脸懵逼, 我的没有显示MultiImages啊. 确定保存, 再点编辑, 依然没有. 好吧, 略过.继续第三步. 在第三步, 情况依然是这样. 再略过. 2, 在第四步, 把 ``` $_type = hook('addFieldType',$_type,$filter=true); ``` 这代码放在 **function.php** 的 **get_attribute_type** 方法里, **return** 语句的前面. 然后在后台新增模型字段时, "字段类型"里整个选项列表都没有了~ 估计是因为 ``` $_type = hook('addFieldType',$_type,$filter=true); ``` 这句代码, get_attribute_type()方法出错了. 无法执行下面的返回列表. 好坑啊. 我只好注释掉 ``` $_type = hook('addFieldType',$_type,$filter=true); ``` 直接在get_attribute_type()的数组里添加一行: ``` 'multi_images' => array('多图上传','varchar(255) NOT NULL'), ``` 再到后台新增模型字段, "字段类型"里整个选项列表恢复正常, 并且多出了一个"多图上传"选项. OK. 3, 依你第四步所说, 在Onethink/Application/Admin/View/Article/edit.html页面添加 ``` {:hook('addForm',array('typeName'=>'multi_images','fieldName'=>$field['name'],'images_ids'=>$data[$field['name']]))} ``` 完成后, 去新增文章, 多图上传的输入位置处显示出来的是一个text类型的Input ~再一次捂脸. 于是, 我只好找到Onethink/Application/Admin/View/Article/add.html, 在里面也添加 ``` {:hook('addForm',array('typeName'=>'multi_images','fieldName'=>$field['name'],'images_ids'=>$data[$field['name']]))} ``` 完成, OK. 4, 安装插件之后, 后台扩展-已装插件后台, 多出了一个"多图字段扩展", 点击, 直接报错: ``` SQLSTATE[42S02]: Base table or view not found: 1146 Table 'xiaozimu.zi_example' doesn't exist ``` 不过这个无伤大雅, 我不理会它.