tonychan 发表于 2011-11-5 23:17:18

Dili 附件上传功能小改动

本帖最后由 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:

switch($data['type'])
            {
                //图片上传字段(TEXT)               
                case 'pic':
                        $field = array(
                              'type' => 'TEXT',
                              'default' => ''
                              ) ;
                              break;
            }

然后 修改Form类库
application\libraries\dili\Form.php
在类最后添加_pic()方法,暂时不用返回任何值

function _pic($field, $default){
      //$type= 'type=hidden';
      //$width=($field['width'] ? $field['width'] : '570') .'px;';
      //$height=($field['height'] ? $field['height'] : '415').'px;';
      return ;
      }

效果图
data/attachment/album/201111/06/145508oc6kiu8ccw65ngim.jpg
然后 修改content_form视图
admincp\default\content_form.php
因为视图布局有所改动,所要添加自己的 my_uploader 视图
admincp\default\my_uploader.php

<!--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>


<!--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

/*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.js43行 给 input添加name属性

//admincp\default\js\dili_utility\upload.js
html = "<li id=\"attachment_" + v + "\"><span class=\"title\"><input type=\"text\" class=\"normal\" id=\"pic\" name=\"pic[]\" value=\""+ attachment_dir + v + '/' + v + '.' + v + "\" />(未保存)</span>";

效果图
data/attachment/album/201111/06/145716o2og189shsasczg1.jpg
最终修改content控制器
application\controllers\admin\content.php
修改 _save_post方法

//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);   
                        }
                  }
                }

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

huibing63 发表于 2011-11-6 08:30:57

不太明白

gs129090 发表于 2011-12-3 16:39:07

支持{:1_1:}{:1_1:}{:1_1:}

qq402717704 发表于 2012-3-5 17:17:25

这不是2.0的吧?

lnlingyuan 发表于 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是跟楼主里的一样的。是里面那里有问题?

O(∩_∩)O莔 发表于 2014-12-9 10:39:28

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

我也遇到这种情况,不知道为啥就是点击没反应
页: [1]
查看完整版本: Dili 附件上传功能小改动