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、控制器处理数据的时候只处理,不显示

 public function add(){
if(request()->isPost()){ return;
}
//将栏目信息显示回增加界面
//catetree方法新增了栏目的level字段
$modelCate=new ModelCate();
$data=$modelCate->catetree();
$this->assign('data',$data); return view();
}

处理完数据直接return

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

 public function add(){
if(request()->isPost()){
$datain=input('post.');
$modelArticle=new ModelArticle();
if($modelArticle->save($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();
}

5、上传文件两步操作

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

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

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

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

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

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

 <tbody>
{volist name='dataout' id='vo'}
<tr>
<td align="center">{$vo.aid}</td>
<td ><?php echo mb_substr($vo['atitle'],0,9,'utf-8'); if(strlen($vo['atitle'])>9){echo '...';} ?></td>
<td align="center">{$vo.athumb}</td>
<td align="center">{$vo.aauthor}</td>
<td align="center">{$vo.acateid}</td>
<td align="center">
<a href="#" class="btn btn-primary btn-sm shiny">
<i class="fa fa-edit"></i> 编辑
</a>
<a href="#" onClick="warning('确实要删除吗', '#" class="btn btn-danger btn-sm shiny">
<i class="fa fa-trash-o"></i> 删除
</a>
</td>
</tr>
{/volist}
</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 app\admin\model;
3 use think\Model;
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 app\admin\controller;
use think\Controller; use app\admin\model\Article as ModelArticle;
use app\admin\model\Cate as ModelCate;
use app\admin\controller\Base; 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模型中的代码:

 <?php
namespace app\admin\model;
use think\Model; class Article extends Model
{
protected static function init()
{
Article::event('before_update', function ($datain) {
if($_FILES['athumb']['tmp_name']){
//1、删除原来的图片
$dataArticle = Article::find($datain->aid);
/*$_SERVER['DOCUMENT_ROOT'] string(129) "E:/2017-02-21--SoftWare/PHP/SOFTWARE/phpStudy_New/PHPTutorial/WWW/github/BicycleEnterpriseWebsite/BicycleEnterpriseWebsite/public"*/
$thumbpath=$_SERVER['DOCUMENT_ROOT'].$dataArticle->athumb;
if(file_exists($thumbpath)){
@unlink($thumbpath);
}
//2、添加新图片
// 获取表单上传文件 例如上传了001.jpg
$file = request()->file('athumb');
// 移动到框架应用根目录/public/uploads/ 目录下
$info = $file->move(ROOT_PATH . 'public' . DS . 'static/uploads/admin');
// 已经上传成功,我们要把文件的路径写进数据库
$datain['athumb']='/static/uploads/admin/'.$info->getSaveName();
}
});
}
}

1、$_SERVER['DOCUMENT_ROOT']

2、file_exists($thumbpath)

3、@unlink($thumbpath);

4、thinkphp中的@

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

  1. thinkphp5项目--企业单车网站(四)

    thinkphp5项目--企业单车网站(四) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  2. thinkphp5项目--企业单车网站(三)

    thinkphp5项目--企业单车网站(三) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  3. thinkphp5项目--企业单车网站(九)(加强复习啊)(花了那么多时间写的博客,不复习太浪费了)

    thinkphp5项目--企业单车网站(九)(加强复习啊)(花了那么多时间写的博客,不复习太浪费了) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicyc ...

  4. thinkphp5项目--企业单车网站(五)

    thinkphp5项目--企业单车网站(五) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  5. thinkphp5项目--企业单车网站(二)

    thinkphp5项目--企业单车网站(二) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  6. thinkphp5项目--企业单车网站(一)

    thinkphp5项目--企业单车网站(一) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  7. thinkphp5项目--企业单车网站(七)

    thinkphp5项目--企业单车网站(七) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  8. thinkphp5项目--企业单车网站(六)

    thinkphp5项目--企业单车网站(六) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Websitehttps:/ ...

  9. thinkphp5项目--练手--企业单车网站(九)(友情链接)

    thinkphp5项目--练手--企业单车网站(九)(友情链接) 项目地址 fry404006308/BicycleEnterpriseWebsite: Bicycle Enterprise Webs ...

随机推荐

  1. Kinect 开发 —— 面部追踪

    SDK1.5中新增了人脸识别类库:Microsoft.Kinect.Toolkit.FaceTracking使得在Kinect中进行人脸识别变得简单,该类库的源代码也在Developer Toolki ...

  2. pwconv---pwunconv 密码投影

    pwconv命令用来开启用户的投影密码.Linux系统里的用户和群组密码,分别存放在名称为passwd和group的文件中, 这两个文件位于/etc目录下.因系统运作所需,任何人都得以读取它们,造成安 ...

  3. 如果笔记本的 WIN7 运行很卡,请尝试运行这些批处理

    如果笔记本的 WIN7 运行很卡,请尝试运行这些批处理 WIN7是不是很卡?关掉下列服务吧 @echo off rem AppXSvc 为部署应用商店应用程序提供基础结构支持 rem BITS 微软的 ...

  4. fragment-实例创建跟使用

    今天接触到了fragment,在网上看到了它的使用方法.现在把它的创建跟使用记录下,方便以后查询. 1.创建一个自己的fragment,继承自fragment package com.android. ...

  5. php数组插入数据

    php数组插入数据 一.总结 代码要多敲,看是看不会的 php代码直接在页面不好敲,可以去控制器里面敲 二.目标 在一组数中,要求插入一个数,按其原来顺序插入,维护原来排序方式. 三.代码 (1).思 ...

  6. php实现遍历文件目录

    php实现遍历文件目录 一.总结 1.熟悉简单:很经典的例子,多看,然后发现熟悉了很简单 二.php实现遍历目录 php实现遍历目录 代码一: //遍历目录 function iteral($path ...

  7. JXNU 新生选拔赛

    1001 最小的数 Problem Description 定义一种正整数集合K,集合中有N个数,集合中元素Ki(1<=i<=N)是包含i个不同质因子的最小的数.因为Ki可能会很大,所以将 ...

  8. 一句话解决Ping问题(主机,开发板,虚拟机)

    PC机使用网卡A连接开发板,VMWare就要使用同一个网卡A作为桥接网卡 步骤: 1.确定网卡A 2.VMWare选择网卡A作为桥接网卡 3.设置三者IP在同一网段 a.Windows网卡A的IP b ...

  9. 使用网络TCP搭建一个简单文件下载器

    说明:该篇博客是博主一字一码编写的,实属不易,请尊重原创,谢谢大家! 目录 一丶项目介绍 二丶服务器Server 三丶测试TCP server服务器 四丶客户端Client 五丶测试客户端向服务器下载 ...

  10. Opera mini for S60 custom server

    Opera mini for S60 custom server 在线改服 http://yourshell.info/mo/mini/ 本人贫穷一族,一直在用S60V2,这种手机启动JAVA很占内存 ...