zoukankan      html  css  js  c++  java
  • ThinkPHP---TP功能类之公文管理功能2----------继续完善

    【前言】

         之前已经完成了公文的添加和列表展示功能,今天继续完善。做下公文的编辑和删除功能。

    【主体】

    (1)分析

    控制器:DocController.class.php

    方法:edit(将模板展示和数据保存写在一起)

    模板文件:edit.html

    下面分步操作:

    第一步:修改模板文件,添加编辑按钮

    <td>
        <a href="javascript:;" class="showBtn" data="{$vol.id}"" data-title="{$vol.title}">查看</a> |
        <a href="__CONTROLLER__/edit/id/{$vol.id}" class="editBtn">编辑</a>
    </td>

    第二部:控制器编写edit方法,展示数据和模板

    //编辑方法
        public function edit(){
            //接收id
            $id = I('get.id');
            //查询数据
            $data = M('doc')->find($id);
            //变量分配
            $this->assign('data',$data);
            //展示模板
            $this->display();
        }

    第三部:复制模板文件edit.html到指定位置ApplicationAdminViewDocedit.html,并换掉静态资源路径

    第四部:修改add.html模板文件,在模板文件中展示当前修改记录的原始数据。先不考虑附件,展示其他

    <form action="" method="post" enctype="multipart/form-data">
        <fieldset>
            <legend>编辑公文</legend>
                <p><label for="title">标题:</label><input type="text" name="title" id="title" value={$data.title}></p>
                <p><label for="filename">附件</label>
                    <input type="file" name="file" id="filename">
                </p>
                <p><label for="author">作者</label><input type="text" name="author" id="author" value={$data.author}></p>
                <p><label for="content">内容:</label>
                    <script id="editor" name="content" type="text/plain" style="800px;height:300px;">
                        {$data.content}
                    </script>
                </p>
                <div>
                    <a href="javascript:;" id="submitBtn">提交</a>
                    <a href="javascript:;" id="resetBtn">清空</a>
                </div>
        </fieldset>
    </form>

    展示效果:

    会发现,UE编辑器区域内包含转义字符。需要解码。

    为什么会这样?因为数据库保存的时候就是转义保存的,为了防止SQL注入。下面用htmlspecialchars_decode方法解码,该方法需要传递一个参数,这里传递变量本身用###

    <p><label for="content">内容:</label>
       <script id="editor" name="content" type="text/plain" style="800px;height:300px;">
           {$data.content|htmlspecialchars_decode=###}
       </script>
    </p>

    显示效果:现在显示正常

    第五步:操作附件

    如果需要修改则显示文件,留空则表示不修改

    注意:

        ①关于文件域的值,在文件域中输出value属性没有意义。所以可以采用和修改密码一样的原理。如果用户选择了文件则表示修改文件,如果没有选择则表示不修改文件。

        ②由于content之前写入数据表时经过I方法进行了转码处理,所以在展示时需要进行解码,还原之前形式,使用到PHP内置函数htmlspecialchars_decode方法

    第六步:检查表单,添加隐藏域(通过隐藏域的表单项来传递值id{$Think.get.id}

    <input type="hidden" name="id" value="{$data.id}">

    第七步:改写edit方法,做一个分支判断,判断请求类型实现数据的保存

    //编辑方法
        public function edit(){
            if (IS_POST) {
                //实现数据保存提交------1.接收数据;2.实例化自定义模型;3. 数据的保存提交
                $post = I('post.');
                //实例化自定义模型
                $model=D('Doc');
                //调用updateData方法,实现数据保存
                $result = $model->updateData($post,$_FILES['file']);
                if($result){
                    $this->success('修改成功',U('showList'),3);
                }else{
                    $this->error('修改失败');
                }
            }else{
                //接收id
                $id = I('get.id');
                //查询数据
                $data = M('doc')->find($id);
                //变量分配
                $this->assign('data',$data);
                //展示模板
                $this->display();
            }
        }

    第八步:编写模型中保存方法updateData

    先判断是否有文件需要处理,如果有则进行处理

    判断文件有无可以通过两个条件进行判断①$file['error']或者②$file['size']

    //更新数据保存
        public function updateData($post,$file){
            if(!$file['error']){
                //配置数组
                $cfg = array(
                    'rootPath' => WORKING_PATH.UPLOAD_ROOT_PATH
                );
                // 实例化上传类
                $upload = new ThinkUpload($cfg);
                //上传
                $info = $upload->uploadOne($file);
                dump($info);die;
            }else{
                //没有文件,则不进行处理
            }
            //写入数据 
            return $this->save($post);
        }    

    对上面上传文件进行输出,浏览器显示(若成功则返回一维数组,9个数据)

    array(9) {
      ["name"] => string(36) "008ba1edbe4c0365a538b71189546615.jpg"
      ["type"] => string(10) "image/jpeg"
      ["size"] => int(265610)
      ["key"] => int(0)
      ["ext"] => string(3) "jpg"
      ["md5"] => string(32) "ade1a4a4634de862a818a4626b5f4166"
      ["sha1"] => string(40) "2f45b527ac015a48b14c7c95cc37b45b6024b002"
      ["savename"] => string(17) "5ac323c6f0338.jpg"
      ["savepath"] => string(11) "2018-04-03/"
    }

    注意:数据库设计时没有考虑更新时间,只考虑了添加时间addtime,所以这里咱们也先不考虑更新时间

    接下来判断上传结果,若为真则成功,成功的话只对附件的3个字段进行修改即可;失败的话不用考虑

    //判断是否上传成功
                if($info){//上传成功,成功的话针对附件的三个字段进行修改即可
                    //补全剩余的三个字段
                    // 图片路径为相对路径---固定目录+日期+文件名+后缀
                    //因为后期数据库存的数据是给浏览器看的,所以路径上----不能带盘符,相对于站点根目录形式UPLOAD_ROOT_PATH
                    $post['filepath'] = UPLOAD_ROOT_PATH . $info['savepath'] . $info['savename'];
                    $post['filename'] = $info['name'];//文件的原始名
                    $post['hasfile'] = 1;//是否有文件
                }else{//上传失败
    
                }

    这里我输出下上传数据:$post

    array(7) {
      ["title"] => string(10) "4.3添加1"
      ["id"] => string(2) "23"
      ["author"] => string(9) "4.3添加"
      ["content"] => string(779) "&lt;p&gt;                    
    &lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;
    &lt;span style=&quot;color: rgb(75, 172, 198);&quot;&gt;&lt;strong&gt;今天04.03,哈哈&lt;span style=&quot;
    color: rgb(255, 0, 0);&quot;&gt;哈哈哈哈&lt;/span&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;&lt;p&gt;是&lt;/p&gt;
    &lt;p&gt;我的&lt;/p&gt;&lt;p&gt;生日哦&lt;img src=&quot;http://img.baidu.com/hi/jx2/j_0014.gif&quot;/&gt;&lt;/p&gt;
    &lt;p&gt;&lt;img src=&quot;/ueditor/php/upload/image/20180403/1522722138136582.jpg&quot; title=&quot;
    1522722138136582.jpg&quot; alt=&quot;c356da8d5eaa4c6b9bc730e6c56ddf99.jpg&quot;/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;
    &lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;
    &lt;/p&gt;" ["filepath"] => string(43) "/Public/Upload/2018-04-03/5ac3257e01757.jpg" ["filename"] => string(36) "008ba1edbe4c0365a538b71189546615.jpg" ["hasfile"] => int(1) }
  • 相关阅读:
    linux下查找文件中空行的行号
    JavaScript:jklyDB
    Chart:Amcharts
    Chart-template
    Miscellaneos:ISV
    杂项-模板
    Error-MVCr:找到了多个与 URL 匹配的控制器类型。如果多个控制器上的特性路由与请求的 URL 匹配,则可能会发生这种情况。
    Error-MVC:HTTP Error 500.19
    ASP.NET 网站管理工具
    HTML:Browser 对象
  • 原文地址:https://www.cnblogs.com/fightjianxian/p/8708087.html
Copyright © 2011-2022 走看看