• thinkphp5项目--企业单车网站(八)(文章板块要点)(删除图片)


    thinkphp5项目--企业单车网站(八)(文章板块要点)(删除图片)

    项目地址

    fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Website
    https://github.com/fry404006308/BicycleEnterpriseWebsite

    一、总结

     1、php标签中加原生php代码实现css(js)的标题过长截取的功能

    二、要点

    1、编程期间页面设计问题(框架+基本控件)

    其实只需要html5中的那些基本控件就好啊,开始不需要样式,一开始又不要多复杂,一件事情一件事情的来做嘛

    框架+基本控件

    2、控制其它input标签的class对textarea同样有效

    <textarea  class="form-control" name="" id="des" ></textarea>

    很基础的界面,没有什么复杂样式,但是看起来还是一样的美观

    3、控制器处理数据的时候只处理,不显示

     1 public function add(){
     2     if(request()->isPost()){
     3         
     4         return;
     5     }
     6     //将栏目信息显示回增加界面
     7     //catetree方法新增了栏目的level字段
     8     $modelCate=new ModelCate();
     9     $data=$modelCate->catetree();
    10     $this->assign('data',$data);
    11 
    12     return view();
    13 }

    处理完数据直接return

    4、直接模型对象.save添加数据倒是简单方便

     1 public function add(){
     2     if(request()->isPost()){
     3         $datain=input('post.');
     4         $modelArticle=new ModelArticle();
     5         if($modelArticle->save($datain)){
     6             $this->success('添加文章成功!!','article/lst');
     7         }else{
     8             $this->error('添加文章失败!!');
     9         }
    10         // dump($datain);die;
    11         return;
    12     }
    13     //将栏目信息显示回增加界面
    14     //catetree方法新增了栏目的level字段
    15     $modelCate=new ModelCate();
    16     $data=$modelCate->catetree();
    17     $this->assign('data',$data);
    18 
    19     return view();
    20 }

    5、上传文件两步操作

    1 //2、获取传入的文件数据
    2 if($_FILES['athumb']['tmp_name']){
    3     // 获取表单上传文件 例如上传了001.jpg
    4     $file = request()->file('athumb');
    5     // 移动到框架应用根目录/public/uploads/ 目录下
    6     $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/admin');
    7     // 已经上传成功,我们要把文件的路径写进数据库
    8     $data['athumb']='/static/uploads/admin/'.$info->getSaveName();
    9 }

    第一步:从表单获取文件的二进制数据

    $file = request()->file('athumb');

    第二步:将这个二进制数据写进服务器中,应该是用的io流

    $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/admin');

    6、php标签中加原生php代码实现css的标题过长截取的功能

     1 <tbody>
     2 {volist name='dataout' id='vo'}
     3     <tr>
     4         <td align="center">{$vo.aid}</td>
     5         <td ><?php echo mb_substr($vo['atitle'],0,9,'utf-8'); if(strlen($vo['atitle'])>9){echo '...';} ?></td>
     6         <td align="center">{$vo.athumb}</td>
     7         <td align="center">{$vo.aauthor}</td>
     8         <td align="center">{$vo.acateid}</td>
     9         <td align="center">
    10             <a href="#" class="btn btn-primary btn-sm shiny">
    11                 <i class="fa fa-edit"></i> 编辑
    12             </a>
    13             <a href="#" onClick="warning('确实要删除吗', '#" class="btn btn-danger btn-sm shiny">
    14                 <i class="fa fa-trash-o"></i> 删除
    15             </a>
    16         </td>
    17     </tr>
    18 {/volist}    
    19 </tbody>

    1、php代码可以实现css(js)中的标题字符过长截取功能

    2、php标签volist中可以套用原生php代码,并且可以操作vo

    3、mb_substr($vo['atitle'],0,9,'utf-8');函数截取字符还带编码

    7、取某表的所有字段 a.*

    $dataout=db('article')->alias('a')->field('a.*,c.catename')->join('bk_cate c','a.acateid=c.id')->paginate(2);

    8、模型事件(钩子函数:模型中在增删改等操作前后自动执行的事件)

    1、通过模型事件(钩子函数),可以模型事件是写在模型里面的,控制器中也必须用了模型操作数据库才能触发模型事件

    3、传入一个参数(当前的模型对象实例),也就是你传到模型中的数据,也就是你传到数据库中的数据

    2、模型事件是写在模型里面的,控制器中也必须用了模型操作数据库才能触发模型事件

    4、支持(当前的模型对象实例),也就是你传到模型中的数据,也就是你传到数据库中的数据

    模型

     1 <?php
     2 namespace appadminmodel;
     3 use thinkModel;
     4 
     5 class Article extends Model
     6 {
     7     protected static function init() //用来统一注册,里面的事件注册了才能用
     8     {
     9         Article::event('before_insert', function ($datain) { //支持传入一个参数,(当前的模型对象实例),也就是你传到模型中的数据
    10             if($_FILES['athumb']['tmp_name']){
    11                 // 获取表单上传文件 例如上传了001.jpg
    12                 $file = request()->file('athumb');
    13                 // 移动到框架应用根目录/public/uploads/ 目录下
    14                 $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/admin');
    15                 // 已经上传成功,我们要把文件的路径写进数据库
    16                 $datain['athumb']='/static/uploads/admin/'.$info->getSaveName();
    17             }
    18         });
    19     }
    20 }    

    控制器:

    <?php
    namespace appadmincontroller;
    use thinkController;
    
    use appadminmodelArticle as ModelArticle;
    use appadminmodelCate as ModelCate;
    use appadmincontrollerBase;
    
    class Article extends Base
    {
        public function add(){
            if(request()->isPost()){
                $datain=input('post.');
                $datain['time']=time();
                $modelArticle=new ModelArticle();
                //2、获取传入的文件数据
                /*在模型的事件中处理了*/
                if($datain//用了模型,传入的参数就是$datain
                    $this->success('添加文章成功!!','article/lst');
                }else{
                    $this->error('添加文章失败!!');
                }
                // dump($datain);die;
                return;
            }
            //将栏目信息显示回增加界面
            //catetree方法新增了栏目的level字段
            $modelCate=new ModelCate();
            $data=$modelCate->catetree();
            $this->assign('data',$data);
    
            return view();
        }
    }

    9、删除之前上传的图片

    article模型中的代码:

     1 <?php
     2 namespace appadminmodel;
     3 use thinkModel;
     4 
     5 class Article extends Model
     6 {
     7     protected static function init()
     8     {
     9         Article::event('before_update', function ($datain) {
    10             if($_FILES['athumb']['tmp_name']){
    11                 //1、删除原来的图片
    12                 $dataArticle = Article::find($datain->aid);
    13                 /*$_SERVER['DOCUMENT_ROOT'] string(129) "E:/2017-02-21--SoftWare/PHP/SOFTWARE/phpStudy_New/PHPTutorial/WWW/github/BicycleEnterpriseWebsite/BicycleEnterpriseWebsite/public"*/
    14                 $thumbpath=$_SERVER['DOCUMENT_ROOT'].$dataArticle->athumb;
    15                 if(file_exists($thumbpath)){
    16                     @unlink($thumbpath);
    17                 }
    18                 //2、添加新图片
    19                 // 获取表单上传文件 例如上传了001.jpg
    20                 $file = request()->file('athumb');
    21                 // 移动到框架应用根目录/public/uploads/ 目录下
    22                 $info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/admin');
    23                 // 已经上传成功,我们要把文件的路径写进数据库
    24                 $datain['athumb']='/static/uploads/admin/'.$info->getSaveName();
    25             }
    26         });
    27     }
    28 }    

    1、$_SERVER['DOCUMENT_ROOT']

    2、file_exists($thumbpath)

    3、@unlink($thumbpath);

    4、thinkphp中的@

  • 相关阅读:
    javascript 判断电话号码的格式
    JavaScript 'Pig latin is cool'==>'igPay atinlay siay oolcay'
    JavaScript 找出特殊数字如135 = 1^1 + 3^2 + 5^3
    nginx+Apache实现动静分离
    MYSQL数据库的主从复制
    Connection could not be established with host smtp.163.com [Connection timed out #110]
    Yii2 的 redis 应用
    Yii2 模块名、控制器名、方法名
    讯搜
    支付宝异步通知时间点分布
  • 原文地址:https://www.cnblogs.com/Renyi-Fan/p/9028320.html
Copyright © 2020-2023  润新知