用户
 找回密码
 入住 CI 中国社区
搜索
查看: 7612|回复: 7
收起左侧

Dili 附件上传功能小改动

  [复制链接]
发表于 2011-11-5 23:17:18 | 显示全部楼层 |阅读模式
本帖最后由 tonychan 于 2011-11-6 15:01 编辑

最近公司改版主站,选来选去最终选了CI做框架,然后就发现了DiliCMS,自己下载本机测试了下,感觉用起来真的挺爽的,写完公司网站有点空闲时间了就想着再测试测试,自己用CI还不到20天,用起来是很顺手,但是的确有很多地方急需学习的,所以也趁机会看看大大们是怎么用CI的。
直接把自己刚做的后台功能迁移过来做测试,发现产品图片上传,案例图片上传的时候,Dili的附件上传用着很别扭,于是自己做了小改动,思路如下:
1.添加了字段类型(隐藏字段,不在表单视图显示出来)--图片上传区域(TEXT).
2.修改content_form表单视图--添加跟字段对应的图片上传区域(实际上就是把附件上传从右上角迁移到了表单里边 哈哈),同时小改了admincp\default\js\dili_utility\upload.js文件,免除复制图片路径的麻烦.
3.修改Content控制器 接收附件上传完成后的图片路径进行入库.
修改过程如下:
首先添加字段
字段模型
application\models\dili\column_mdl.php
增加
switch($data['type']) 语句添加一个case:
PHP复制代码
 
switch($data['type'])
            {
                //图片上传字段(TEXT)                
                case 'pic':
                        $field = array(
                                'type' => 'TEXT',
                                'default' => ''
                                ) ;
                                break;
            }
 
复制代码

然后 修改Form类库
application\libraries\dili\Form.php
在类最后添加_pic()方法,暂时不用返回任何值
PHP复制代码
 
function _pic($field, $default){
        //$type= 'type=hidden';
        //$width=($field['width'] ? $field['width'] : '570') .'px;';
        //$height=($field['height'] ? $field['height'] : '415')  .'px;';
        return ;
        }
 
复制代码

效果图

然后 修改content_form视图
admincp\default\content_form.php
因为视图布局有所改动,所要添加自己的 my_uploader 视图
admincp\default\my_uploader.php
HTML复制代码
 
<!--admincp\default\content_form.php-->
<form action="<?php echo backend_url('content/save','model='.$model['name'].'&id='.(isset($content['id']) ? $content['id'] : '')); ?>"  method="post">
            <table class="form_table" >
                <col width="150px" />
                <col />
                <?php foreach( $model['fields'] as $v) :  ?>
                <?php if($v['editable']): ?>
                <tr>
                    <th> <?php echo $v['description'];?></th>
                    <td>
                   <?php
                  //图片上传字段
                  if($v['type']=="pic"):?>
                   <div class="search f_l" style="position:relative">
                    <button class="btn" type="button" hidefocus="true" ><span class="add">附件列表</span></button>
                    <?php $this->load->view('my_uploader'); ?>
                    </div>
                   <?php endif;?>
                        <?php $this->form->display($v , isset($content[$v['name']]) ? $content[$v['name']] : ''); ?>
                        <?php echo form_error($v['name']); ?>
                    </td>
                </tr>
                <?php endif; ?>
                <?php endforeach; ?>
                <?php $this->plugin_manager->trigger_model_action('register_view', $content); ?>
                <tr>
                    <th></th>
                    <td>
                        <?php if($model['hasattach']): ?>
                        <?php $this->form->show_hidden('uploadedfile','0',true); ?>
                        <?php endif; ?>
                        <button class="submit" type='submit'><span><?php echo $button_name; ?></span></button>
                    </td>
                </tr>
            </table>
        </form>
 
复制代码
HTML复制代码
 
<!--my_uploader.php-->
<div id="my_uploader">
                    <div style="position:relative;text-align:left;">
                        <p style="line-height:30px;"><a style="margin:2px;" id="uploaderSwitcher"  href="javascript:void(0)">打开上传控件</a>允许上传的格式:<b><?php echo setting('attachment_type'); ?></b>,大小限制:<b><?php echo number_format($maxsize = setting('attachment_maxupload')/1024/1024,2); ?>MB</b> </p>
                            <div id="uploaderContainer" style="position:absolute;z-index:3000000;display:none;background:#ccc;">
                            <object id="swfuploader" type="application/x-shockwave-flash" data="js/dili_utility//upload.swf?site=<?php echo backend_url('attachment'); ?>" width="470" height="268">
                                <param name="movie" value="js/dili_utility/upload.swf?site=<?php echo backend_url('attachment'); ?>"/>
                                <param name="allowFullScreen" value="false" />
                                <?php if(!strpos($_SERVER['HTTP_USER_AGENT'],'MSIE')): ?>
                                <param name="wmode" value="transparent" />
                                <?php endif; ?>
                            </object>
                            </div>
                    </div>
                    <ul id="attachList" >
                    <li id="loading"></li>
                    <?php if(isset($attachment)): ?>
                        <?php foreach($attachment as $v): ?>
                        <li id="attachment_<?php echo $v['aid']; ?>">
                            <span class="title"><input type="text" class="normal" id="pic_<?php echo $v['aid']; ?>" value="/<?php echo setting('attachment_dir').'/'.$v['folder'].'/'.$v['name'].'.'.$v['type']; ?>" name="<?php echo $v['name']?>" /></span>
                            <?php if($v['image'] == 1): ?>
                            <a href="javascript:void(0);" target="_blank">预览</a>
                            <?php endif;?>
                            <a href="javascript:void(0);">删除</a>
                        </li>
                        <?php endforeach; ?>
                    <?php endif; ?>
                    </ul>
                    <script language="javascript">
                        var base_url = '<?php echo base_url(); ?>' ,backend_url = '<?php echo backend_url($this->uri->rsegment(1)).'/'; ?>',attach_url = base_url + 'attachments/',attachment_dir = '<?php echo '/'.setting('attachment_dir').'/'; ?>';
                    </script>
                    <script src="js/dili_utility/upload.js"></script>
</div>
 
复制代码

改动admincp\default\images\admin.css
在317行后增加 #my_uploader
CSS复制代码
 
/*my_uploader*/
#my_uploader{width:470px;border:1px #ccc solid;-webkit-border-radius: 3px;-moz-border-radius: 3px;border-radius: 3px;background:#FFF;}
 
复制代码

修改admincp\default\js\dili_utility\upload.js  43行 给 input添加name属性
JS复制代码
 
//admincp\default\js\dili_utility\upload.js
html = "<li id=\"attachment_" + v[0] + "\"><span class=\"title\"><input type=\"text\" class=\"normal\" id=\"pic\" name=\"pic[]\" value=\""+ attachment_dir + v[4] + '/' + v[2] + '.' + v[5] + "\" />(未保存)</span>";
 
复制代码

效果图

最终修改content控制器
application\controllers\admin\content.php
修改 _save_post方法
PHP复制代码
 
//application\controllers\admin\content.php
foreach($modeldata['fields'] as $v)
                {
                    if($v['editable'])
                    {
                        $data[$v['name']] = $this->input->post($v['name']);
                        if(($v['type'] == 'checkbox' || $v['type'] == 'checkbox_from_model') && is_array($data[$v['name']]))
                        {
                            $data[$v['name']] = $data[$v['name']] ? implode(',',$data[$v['name']]) : '';    
                        }
                        //图片上传字段
                        $pic=$this->input->post('pic');
                        if(($v['type'] == 'pic' || $v['type'] == '_pic')&&!empty($pic))
                        {
                            $data[$v['name']] = implode(',',$pic);    
                        }
                    }
                }
 
复制代码

到此修改完成.
效果图

ps:对于此修改有什么不适当的地方还有待研究,本修改只是换了一种图片附件的上传方式而已,后续还需要很多完善的地方 比如 上传字段的显示或隐藏,显示时候的宽高控制等等,不过刚看到DiliCMS2.0马上就要出了,所以后续就不做了,哈哈 ,等新版本出来了看看有什么功能改进先
二楼兄弟感觉不太理解 现在把图片也贴上来 这样应该就容易理解了 其实都是小改动而已

评分

参与人数 1威望 +6 收起 理由
jeongee + 6 参与有奖

查看全部评分

发表于 2011-11-6 08:30:57 | 显示全部楼层
不太明白
发表于 2011-12-3 16:39:07 | 显示全部楼层
支持
发表于 2012-3-5 17:17:25 | 显示全部楼层
这不是2.0的吧?
发表于 2012-4-21 00:32:35 | 显示全部楼层
赞一个!!!!!!!!
发表于 2012-7-12 15:23:58 | 显示全部楼层
A PHP Error was encountered
Severity: Notice

Message: Undefined variable: field

Filename: dili/Field_behavior.php

Line Number: 108

A PHP Error was encountered
Severity: Warning

Message: array_change_key_case() expects parameter 1 to be array, null given

Filename: mysql/mysql_forge.php

Line Number: 78

A PHP Error was encountered
Severity: Warning

Message: array_key_exists() expects parameter 2 to be array, null given

Filename: mysql/mysql_forge.php

Line Number: 82

A PHP Error was encountered
Severity: Warning

Message: array_key_exists() expects parameter 2 to be array, null given

Filename: mysql/mysql_forge.php

Line Number: 87

A PHP Error was encountered
Severity: Warning

Message: array_key_exists() expects parameter 2 to be array, null given

Filename: mysql/mysql_forge.php

Line Number: 112

A PHP Error was encountered
Severity: Warning

Message: array_key_exists() expects parameter 2 to be array, null given

Filename: mysql/mysql_forge.php

Line Number: 117

A PHP Error was encountered
Severity: Warning

Message: array_key_exists() expects parameter 2 to be array, null given

Filename: mysql/mysql_forge.php

Line Number: 122

A PHP Error was encountered
Severity: Warning

Message: array_key_exists() expects parameter 2 to be array, null given

Filename: mysql/mysql_forge.php

Line Number: 131

发生了一个数据库错误
Error Number: 1064

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'NOT NULL' at line 2

ALTER TABLE `dili_u_m_odf` ADD `pices` NOT NULL

Filename: D:\xampp\htdocs\dili\system\database\DB_driver.php

Line Number: 330
是不是不能在2.0里改的?
发表于 2012-7-12 15:55:41 | 显示全部楼层
刚才在_pic 方法里定义多了个符号,已经搞掂。
但现在在“打开上传控件”时,没反应。。my_uploader.php是跟楼主里的一样的。是里面那里有问题?

打开上传控件

打开上传控件
发表于 2014-12-9 10:39:28 | 显示全部楼层
火凌幻影 发表于 2012-7-12 15:55
刚才在_pic 方法里定义多了个符号,已经搞掂。
但现在在“打开上传控件”时,没反应。。my_uploader.php是 ...

我也遇到这种情况,不知道为啥就是点击没反应

本版积分规则